1.__u_boot_cmd_start以及__u_boot_cmd_end两个变量在代码只有一处出现,这两个变量是通过链接脚本传进来的。
2.使用nand read.jffs2中的.jffs2是因为使用这种格式不需要页对齐,比较方便。
3.flash上存储的内核:头部+真正的内核
头部中的两个重要的参数:
ih_load:表示加载地址,即内核运行时应该放在哪里
ih_ep:表示入口地址,运行内核时需要跳转到的地址
注释:因为头部有这两个参数,所以下载内核到内存中的位置没有关系,内核都会被移动到加载地址;加载的时候指的是真正的内核加载的地址,而不包括头部;头部大小为64字节。
4.使用do_bootm_linux启动系统:这时候uboot会帮助内核设置启动参数(内核和uboot之间的交互方法:在某个地址按某种格式(TAG格式)存放一些数据);跳转到入口地址去启动内核。
注释:跳到入口函数的过程:theKernel赋值;调用theKernel函数。
5.交互的参数:
setup_start_tag:size、tag、flag、pagesize、rootdev
setup_memory_tags:size、flag、size、start(0x3000 0000)
setup_commandline_tag:size、tag
setup_end_tag:0、0
6.theKernel函数的三个参数解析:
第一个参数为0
第二个参数:bd->bi_arch_number是机器ID(2410和2440的机器ID不同)。
第三个参数:bd->bi_boot_parasm是uboot和内核交互数据的首地址。
7.直接输入boot命令,实际上是调用bootcmd中的两条语句来启动内核。
uboot分析之uboot启动内核分析
最新推荐文章于 2020-06-20 08:56:54 发布