U-Boot启动引导内核分析(二)

  • Post author:
  • Post category:其他






标签:ARM   bootloader   U-Boot   代码分析 抵岸科技




也许细心的你会问:我在用


UBoot


的时候并没有直接进入用户命令界面呀,而是在倒计时结束后自动引导


kernel


。这是怎么回事呢?

在 main_loop()函数当中有如下一段代码:


#if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)














s

=


getenv

(

“bootcmd”

);


/*获取bootcmd 的内容*/



/*bootcmd=nand read 0x22000000 0xB0000 0x200000; bootm */











# ifndef CFG_HUSH_PARSER



run_command

(s

,


0

);


/*运行s包含的命令*/



/*运行nand read 0x22000000 0xB0000 0x200000表示将NANDFLASH



0xB0000处数据读取放于0x22000000处,读取长度为0x200000



*/



/*运行bootm命令,引导内核启动*/



# else



parse_string_outer

(s

,


FLAG_PARSE_SEMICOLON

|


FLAG_EXIT_FROM_LOOP

);


# endif















#endif


/* CONFIG_BOOTDELAY */



bootm


命令是什么?它是怎样引导内核的?

要知道想解决这个问题,就要分析


common/cmd_bootm.c


中的函数


do_bootm


,因为引导


kernel


就是


bootm


这条命令的工作,


do_bootm


是命令


bootm


的执行函数。

现在我们来分析一下


common/cmd_bootm.c


中的函数


do_bootm


,这是


bootm


命令的处理函数。


int


do_bootm

(



版权声明:本文为dian_technology原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。