随笔分类 -  3.u-boot

摘要:在上节制作busybox后(位于/work/nfs_root/mini_fs), 然后根据以下5个来构建最小根文件系统: (1)/dev/console(终端控制台, 提供标准输入、标准输出以及标准错误) (2)init进程的程序(也就是busybox,因为init程序位于busybox中,已经完成 阅读全文
posted @ 2017-08-21 19:44 诺谦 阅读(5176) 评论(0) 推荐(1) 编辑
摘要:在上一节分析出制作一个最小的根文件系统至少需要: (1)/dev/console(终端控制台, 提供标准输入、标准输出以及标准错误) (2)init进程的程序(也就是busybox,因为init程序位于busybox中) (3)/etc/inittab(用于init进程读取配置, 然后执行initt 阅读全文
posted @ 2017-08-21 19:26 诺谦 阅读(6172) 评论(0) 推荐(0) 编辑
摘要:本节目标: (1) 了解busybox(init进程和命令都放在busybox中) (2) 创建SI工程,分析busybox源码来知道init进程做了哪些事情 (3) 分析busybox中init进程 init_main() (3.1)熟悉init进程的inittab配置文件(位于/etc/init 阅读全文
posted @ 2017-08-21 19:14 诺谦 阅读(3243) 评论(1) 推荐(2) 编辑
摘要:本章学习如何启动第一个应用程序 1.在前面的分析中我们了解到,在init进程中内核挂接到根文件系统之后,会开始启动第一个应用程序: kernel_init函数代码如下: 2.接下来开始分析init_post()如何启动应用程序的,代码如下: 当我们删除根文件系统的内容再启动内核,发现串口就会打印上面 阅读全文
posted @ 2017-08-21 17:52 诺谦 阅读(2945) 评论(0) 推荐(0) 编辑
摘要:内核启动并初始化后,最终目的是像Windows一样能启动应用程序,在windows中每个应用程序都存在C盘、D盘等,而linux中每个应用程序是存放在根文件系统里面,那么挂载根文件系统在哪里,怎么实现最终目的运行应用程序? 1.内核运行应用程序步骤: 1.1首先是进入stext函数启动内核: 1.2 阅读全文
posted @ 2017-08-15 18:31 诺谦 阅读(4516) 评论(0) 推荐(1) 编辑
摘要:内核启动分析之start_kernel初始化函数(init/main.c) stext函数启动内核后,就开始进入start_kernel初始化各个函数, 下面只是浅尝辄止的描述一下函数的功能,很多函数真正理解需要对linux相关体系有很深的了解后才能明白 代码如下: 然后进入rest_init(): 阅读全文
posted @ 2017-08-15 18:28 诺谦 阅读(5031) 评论(0) 推荐(0) 编辑
摘要:目标: (1)创建Source Insight 工程,方便后面分析如何启动内核的 (2)分析uboot传递参数,链接脚本如何进入stext的 (3) 分析stext函数如何启动内核: (3.1) 关闭irq和fiq,设置svc管理模式 (3.2)判断是或支持这个CPU (3.3)判断是否支持这个单板 阅读全文
posted @ 2017-08-15 18:25 诺谦 阅读(2631) 评论(0) 推荐(0) 编辑
摘要:目标: 通过分析makefile,明白make uImage如何编译内核 把整个内核的makefile分成三类(makefile资料文档在linux-2.6.22.6/Documentation/build/makefiles.txt) <1>各级子目录makefile(每个子目录都有makefil 阅读全文
posted @ 2017-08-12 00:48 诺谦 阅读(1573) 评论(0) 推荐(0) 编辑
摘要:目标: 分析make menuconfig内核配置过程 在上1小结中(内核编译试验)讲到了3种不同的配置: (1)通过make menuconfig 直接从头到尾配置.config文件 (2) 通过make s3c2410_deconfig 命令在默认的配置上进行自动修改.config文件 (3)使 阅读全文
posted @ 2017-08-11 23:50 诺谦 阅读(2581) 评论(0) 推荐(2) 编辑
摘要:目标: 1.给内核打补丁 2.配置 3.编译 4.重启 1 内核打补丁 1.1 通过FTP将Windows里system目录下linux-2.6.22.6.tar.bz2和linux-2.6.22.6_jz2440.patch文件拷贝到linux里/work/system下 1.2 使用 tar x 阅读全文
posted @ 2017-08-10 23:20 诺谦 阅读(2301) 评论(2) 推荐(3) 编辑
摘要:编译测试: 1.将写好的uboot复制到linux下面 2.make编译,然后将错误的地方修改,生成boot.bin (编译出错的解决方案:http://www.cnblogs.com/lifexy/p/7326172.html) 3.通过make生成的反汇编来查看代码是否正确 4.通过oflash 阅读全文
posted @ 2017-08-10 09:35 诺谦 阅读(1128) 评论(0) 推荐(0) 编辑
摘要:目标: 1 添加头文件setup.h和serial.h 2 写main函数 2.1 帮内核设置串口0, (内核启动会打印出启动信息) 2.2把内核读入到SDRAM 2.3设置参数(参考u-boot-1.1.6 /lib_arm/armlinux.C中do_bootm_linux()函数) 2.4跳转 阅读全文
posted @ 2017-08-10 09:32 诺谦 阅读(1294) 评论(0) 推荐(0) 编辑
摘要:目标: 第一阶段: 1.关看门狗 2.设置时钟 3.初始化SDRAM (初始化寄存器以及清除bss段) 4.重定位 (将nand/nor中代码COPY到链接地址上,需要初始化nandflash,读flash) 5.执行main 进入第二阶段: 6.写main函数,在main()中设置要传给内核的参数 阅读全文
posted @ 2017-08-10 09:31 诺谦 阅读(1761) 评论(0) 推荐(0) 编辑
摘要:本节主要学习: 详细分析UBOOT中"bootcmd=nand read.jffs2 0x30007FC0 kernel;bootm 0x30007FC0"中怎么实现bootm命令启动内核. 其中bootm要做的事情:a 读取头部,把内核拷贝到合适的地方(0X30008000)b 在do_boom_ 阅读全文
posted @ 2017-08-09 01:16 诺谦 阅读(9725) 评论(1) 推荐(1) 编辑
摘要:本节主要学习: 详细分析UBOOT中"bootcmd=nand read.jffs2 0x30007FC0 kernel;bootm 0x30007FC0" 怎么实现nand命令读内核. 1. nand read.jffs2 0x30007FC0 kernel 步骤a: 从NAND FILSHE中k 阅读全文
posted @ 2017-08-09 00:52 诺谦 阅读(3764) 评论(0) 推荐(0) 编辑
摘要:本节主要学习,run_command函数命令查找过程,命令生成过程 1.run_command函数命令查找过程分析:在u-boot界面中(main_loop();位于u-boot-1.1.6/common/main.c ):a 输入命令字符串b 将命令字符串代入函数run_command()c ru 阅读全文
posted @ 2017-08-09 00:46 诺谦 阅读(5445) 评论(0) 推荐(1) 编辑
摘要:仿照bootm命令生成来制作一个hello命令,功能:打印出hello,world!和参数值 1.点击New File ,创建cmd_hello.c将./common/cmd_bootm.c的头文件复制到 cmd_hello.c中(因为cmd_bootm.c的头文件都是包括的命令相关的文件): #i 阅读全文
posted @ 2017-08-09 00:27 诺谦 阅读(1250) 评论(0) 推荐(0) 编辑
摘要:start_armboot()分析:在start.S初始化后跳转到start_armboot实现第2阶段硬件相关的初始化(烧写擦除flash,网卡驱动,usb驱动,串口驱动,从FLASH读内核,启动内核等)然后调用main_loop();实现u-boot环境参数设置(print),读内核,启动内核等 阅读全文
posted @ 2017-08-09 00:23 诺谦 阅读(1733) 评论(0) 推荐(2) 编辑
摘要:分析uboot第一个执行函数_start(cpu/arm920t/start.S) 打开cpu/arm920t/start.S 在第1行中".globl _start":使用.globol声明全局符号_start,在 board/100ask24x0/u-boot.lds中ENTRY(_start) 阅读全文
posted @ 2017-08-09 00:17 诺谦 阅读(4902) 评论(0) 推荐(2) 编辑
摘要:汇编程序中以.开头的名称并不是指令的助记符,不会被翻译成机器指令,而是给汇编器一些特殊指示,称为伪操作. 作用:声明一个_start全局符号(Symbol), 这个_start这个符号要被lds链接脚本用到 作用:以当前地址开始,在地址为16的倍数的指令位置的上一个指令填入为0xdeadbeef的内 阅读全文
posted @ 2017-07-14 17:20 诺谦 阅读(2137) 评论(0) 推荐(1) 编辑