一. uboot 源码分析前提
由于 uboot 会使用到一些经过编译才会生成的文件,因此,我们在分析 uboot的时候,需要先编译一下 uboot 源码工程。
这里所用的开发板是 nand-flash 版本。
本文学习续上一篇文章,如下:
IMX6ULL移植篇-uboot源码主要目录说明_凌肖战的博客-CSDN博客
二. uboot 源码主要文件说明
1. .config 文件
当我们执行make xxx_defconfig以后就会生成 .config文件,此文件保存了详细的 uboot 配置信息。
可以看出 .config 文件中都是以 “ CONFIG_ ” 开始的配置项,这些配置项就是 Makefile 中的
变量,因此后面都跟有相应的值, uboot 的顶层 Makefile 或子 Makefile 会调用这些变量值。
在 .config文件 中会有大量的变量值为‘y ’,这些为‘y ’的变量一般用于控制某项功能是否使能,为
‘ y ’的话就表示功能使能。
2. .u-boot.xxx_cmd 文件
u-boot.xxx_cmd 是一系列的文件,这些文件都是编译生成的,都是一些命令文件。
都是一些命令文件,比如文件 .u-boot.bin.cmd ,看名字应该是和 u-boot.bin 有关的。
例如,.u-boot.bin.cmd文件内容如下:
cmd_u-boot.bin := cp u-boot-nodtb.bin u-boot.bin
.u-boot.bin.cmd 里面定义了一个变量: cmd_u-boot.bin ,其值为“ cp u-boot-nodtb.bin u-boot.bin ”,即 重命名为 u-boot.bin 。也就是说 u-boot.bin 来源于文件 u-boot-nodtb.bin 。
文 件 .u-boot-nodtb.bin.cmd 就 是 用 于 生 成 uboot.nodtb.bin 。而 .u-boot-nodtb.bin.cmd文件内如下:
cmd_u-boot-nodtb.bin := arm-linux-gnueabihf-objcopy --gap-fill=0xff -j .text -j .secure_text -j .rodata -j .hash -j .data -j .got -j .got.plt -j .u_boot_list -j .rel.dyn -O binary u-boot u-boot-nodtb.bin
这里用到了 arm-linux-gnueabihf-objcopy ,使用 objcopy 将 ELF 格式的 u-boot 文件转换为二
进制的 u-boot-nodtb.bin 文件。 以此类推。
3. Makefile 文件
uboot 源码根目录下的 Makefile 是顶层 Makefile。 Makefile 是支持嵌套的,也就是顶层 Makefile 可以调用子目录 中的 Makefile 文件。如下就是 顶层 Makefile 文件:
4. 顶层 README 文件
顶层README,非常重要。建议大家阅读!!!
README 文件描述了 uboot 的详细信息,包括 uboot 该如何编译、uboot 中各文件夹的含义、相应的命令等等。建议大家详细的阅读此文件,可以进一步增加对 uboot 的认识。
5. u-boot.xxx 文件
u-boot.xxx 同样也是一系列文件,是 uboot 编译后生成的一系列文件。
这些文件的含义如下:
u-boot :编译出来的 ELF 格式的 uboot 镜像文件。
u-boot.bin :编译出来的二进制格式的 uboot 可执行镜像文件,即编译出来带ELF信息的 uboot可执行文件。
u-boot.cfg : uboot 的另外一种配置文件。
u-boot.imx : u-boot.bin 添加头部信息以后的文件, NXP 的 CPU 专用文件。
u-boot.lds :链接脚本。
u-boot.map : uboot 映射文件,通过查看此文件可以知道某个函数被链接到了哪个地址上。
u-boot.srec : S-Record 格式的镜像文件。
u-boot.sym : uboot 符号文件。
u-boot-nodtb.bin :和 u-boot.bin 一样, u-boot.bin 就是 u-boot-nodtb.bin 的复制文件。
6. System.map 文件
System.map 文件是内存映射表。编译 uboot后生成的文件。
7. Kconfig 文件
Kconfig 文件 与图形界面有关的。uboot可以通过图形界面来配置。
8. imx6ull_alientek_nand.sh
imx6ull_alientek_nand.sh文件,是之前我们编译 uboot 时,我们自己自定义创建的配置脚本文件。作用就是配置并编译 uboot 源码。