U-Boot分析
说明
全篇以提出问题和解决问题的方式进行分析,自顶向下。
一、编译uboot
1.使用make编译uboot
make V=1 //打印编译的命令具体信息,对于分析问题非常重要
2.分析结果
最后会生成很多 u-boot.*
的文件,内容见下面:
说明:
1. u-boot.bin是机器可执行文件(二进制文件);
2. u-boot.imx是u-boot.bin加上imx6ull的头部文件(二进制文件);
3. u-boot.map是内存映射文件;
4. u-boot.cfg是配置相关文件;
5. u-boot.lds是链接文件;
其中.bin文件是在MCU中最终的文件,也是imx6ull芯片的uboot最终文件。
二、问题的提出和解决
1.u-boot.bin如何生成?
打开uboot源码文件(基于正点原子提供的NXP官方U-Boot源码),在源码文件夹下找到Makefile,并打开:
找到第一个目标为 _all:
_all 依赖于 all,接着找以 all 为目标的依赖(后面的同理继续):
找到当前位置出现 u-boot.bin (继续找):
打开第一步编译的详细信息终端,确定u-boot.bin的依赖和生成命令:
这一条信息表明u-boot.bin由u-boot-nodtb.bin复制而来
。
2.u-boot-nodtb.bin如何生成?
u-boot由各种.o文件通过链接到地址0x878000000而成:
上面的命令中所包含的.o文件和.o文件所在的目录表明,u-boot的生成和这些东西直接相关,如果要修改u-boot的内容应该从这些文件进行入手。
三、关于Makefile调用Makefile.build
在文件Kbuild.include
中可以找到一个变量build:
在这个变量中包含了Makefile.build这个文件。