zImage内核镜像下载到开发板之后,可以使用u-boot的go命令进行直接跳转,这个时候内核直接解压启动。
但是此时的内核无法挂载文件系统,因为go命令没有将内核需要的相关启动参数从u-boot中传递给内核。
传递相关启动参数必须使用u-boot的bootm命令进行跳转,但是u-boot的bootm命令只能处理uImage镜像。
uImage相对于zImage在头部多了64个byte,即为0x40。
(这里你应该知道了为什么要使用bootm命令,以及为什么要是有uImage格式)
在前面我们曾经分析过Uboot的启动流程,两个阶段。
程序最终执行common/main.c中的main_loop。在此之前都是进行一些初始化工作,U-Boot的main_loop函数相当于main主函数。
main_loop函数的结构很复杂,它所做的工作与具体的平台无关,主要目的是处理用户输入的命令和引导内核启动。
(终于看到了引导内核加载)
main_loop 函数的调用关系错综复杂,而且掺杂关系复杂的条件编译,我们抓住与命令实现密切相关的操作来分析命令的实现原理。
命令实现的大致流程如下图所示。
全部0条评论
快来发表一下你的评论吧 !