参考《韦东山1期视频》第09课第5节 u-boot分析_uboot启动内核.WMV
(1)启动内核主要命令:
s = getenv ("bootcmd");
debug ("### main_loop: bootcmd=\"%s\"\n", s ? s : "<UNDEFINED>");
if (bootdelay >= 0 && s && !abortboot (bootdelay)) {
# ifdef CONFIG_AUTOBOOT_KEYED
int prev = disable_ctrlc(1); /* disable Control C checking */
# endif
# ifndef CFG_HUSH_PARSER
{
printf("Booting Linux ...\n");
run_command (s, 0);
}
bootcmd
nand read.jffs2 0x30007fc0 kernal从nand 读出内核
从哪里读:从kernal分区读
放到哪里去:放到0x30007fc0。
分区:在100ask24x0.h中定义:
#define MTDIDS_DEFAULT "nand0=nandflash0"
#define MTDPARTS_DEFAULT "mtdparts=nandflash0:256k@0(bootloader)," \
"128k(params)," \
"2m(kernel)," \
"-(root)"
(2)bootm 启动内核相关命令分析
1.读取头部,移动内核到加载地址
2.启动do_bootm_linux(ARMLINUX.C)
uboot告诉内核一些参数,设置启动参数(某个地址30000100,某个格式TAG保存参数。)
调到入口地址,启动内核。