详解U-Boot引导内核分析

u-boot的命令为用户提供了交互功能,并且已经实现了几十个常用的命令。如果开发板需要很特殊的操作,可以添加新的u-boot命令。u-boot的每一个命令都是通过u_boot_cmd宏定义的。这个宏在头文件中定义
#defineu_boot_cmd(name,maxargs,rep,cmd,usage,help)\
cmd_tbl_t__u_boot_cmd_##namestruct_section={#name,maxargs,rep,cmd,usage}
其中:
·name:命令的名字,他不是一个字符串,不能用双引号括起来
·maxargs:最大的参数个数
·command:对应的函数指针
·usage:一个字符串,简短的使用说明
·help:一个字符串,比较详细的使用说明
对于bootm命令,其定义如下:
[plain]view plaincopy
1.u_boot_cmd(//bootm命令
2.bootm,cfg_maxargs,1,do_bootm,
3.bootm-bootapplicationimagefrommemory\n,
4.[addr[arg...]]\n-bootapplicationimagestoredinmemory\n
5.\tpassingarguments'arg...';whenbootingalinuxkernel,\n
6.\t'arg'canbetheaddressofaninitrdimage\n
7.#ifdefconfig_of_flat_tree
8.\twhenbootingalinuxkernelwhichrequiresaflatdevice-tree\n
9.\tathirdargumentisrequiredwhichistheaddressoftheofthe\n
10.\tdevice-treeblob.tobootthatkernelwithoutaninitrdimage,\n
11.\tusea'-'forthesecondargument.ifyoudonotpassathird\n
12.\tabd_infostructwillbepassedinstead\n
13.#endif
14.);
bootm命令是用来引导经过u-boot的工具mkimage打包后的kernelimage的。u-boot源代码的tools/目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件。 mkimage在制作映象文件的时候,是在原来的可执行映象文件的前面加上一个0x40字节的头,记录参数所指定的信息,这样uboot才能识别这个映象是针对哪个cpu体系结构的,哪个os的,哪种类型,加载内存中的哪个位置,入口点在内存的那个位置以及映象名是什么。
u-boot正是通过bootm命令引导linux内核的。bootm命令调用do_bootm函数,下面我们来分析一下:
do_bootm函数流程分析
do_bootm_linux函数

4月份中高端安卓手机性能排行榜,OPPO分别拿下两个榜单首位
MPU6050工作原理
蔚来预计新增50座换电站 不下车换电不远了
Samtec与与Keysight带来800G有源线缆测试解决方案
双法兰差压变送器安装步骤及注意事项
详解U-Boot引导内核分析
一家OPPO店店长学会玩私域流量
苹果无线充哪个牌子好,苹果官方推荐无线充电器
关于S信号源与频谱仪的宽带数字预失真算法研究的分析和介绍
如何正确将电池材料和设计结合?
经典电路分析:六倍程的电流对数放大器
一文知道人工智能芯片的算法
华为畅享8e评测 在同价位属于中上水平
IBM与金科集团达成合作全面激活金科数字化转型蓝图
百度飞桨及文心大模型赋能千行百业
连接器的发展趋势是什么?
了解一下被行业寄以广泛期待的“好望”
解决指南:将电解电容器替换为MLCC的指南修订
亚马逊和谷歌逐鹿智能家居 双雄争夺谁能成为赢家?
Kevin学ZED之(5):顺藤摸瓜