uboot——启动内核分析
内核启动的步骤
-
第一步是将内核镜像从启动介质中加载到DDR中。
movi read kernel 0x30008000 //这条指令就是从SD卡中的kernel分区中将kernel读取到DDR的链接地址0x30008000中
-
第二步是去DDR中启动内核镜像。
bootm 0x30008000 //这条指令用来启动kernel
**注意:**内核代码不需要考虑重定位,因为内核知道会有uboot之类的把自己加载到DDR中链接地址处的,所以内核直接就是从链接地址处开始运行的。
内核的链接地址
uboot启动内核时将内存从SD卡读取放到DDR中(其实就是个重定位的过程),不能随意放置,必须放在内核的链接地址处,否则启动不起来。譬如我们使用的内核链接地址是0x30008000。
do_bootm函数分析
CONFIG_ZIMAGE_BOOT
/*
代码196行定义了一个宏,这个宏用条件编译来控制一段代码;
这段代码(196-225行)用来支持zImage格式的内核启动。
*/