在分析uboot源码之前一定要在Ubuntu中编译一下uboot源码,因为编译过程会生成一些文件,而生成的这些恰恰是分析uboot源码不可或缺的文件。

arch文件夹
存放和架构有关的文件,我们现在用的是ARM芯片,所以只需要关系arm文件夹即可

其中有一部分march-xxx的文件夹。march开头的文件夹跟具体的设备有关,比如“mach-exynos”就是跟三星的 exyons 系列 CPU 有关的文件。
我们使用的是I.MX6ULL,所以要关注imx-common这个文件夹。此外,“cpu”文件夹和cpu架构有关。

I.MX6ULL使用的是Cortex-A7内核,Cortex-A7属于armv7,所以我们要关心“armv7”这个文件夹。
“u-boot.lds”是ARM芯片使用的u-boot连接脚本文件。

board文件夹

board 文件夹就是和具体的板子有关的,打开此文件夹,里面全是不同的板子。

所有使用freescale芯片的板子都放到此文件夹中,I.MX系列以前属于freescale,只是后面被NXP收购了。
以“mx6ul”开头的表示使用I.MX6UL 芯片的板子,以 mx6ull 开头的表示使用 I.MX6ULL 芯片的板子。mx6ullevk 是 NXP官方的I.MX6ULL 开发板,正点原子的ALPHA开发板就是在这个基础上开发的,因此 mx6ullevk也是正点原子的开发板。我们后面移植 uboot 到时候就是参考 NXP 官方的开发板,也就是要参考 mx6ullevk 这个文件夹来定义我们的板子。

configs文件夹
此文件夹为uboot配置文件,uboot是可配置的。
但是你要是自己从头开始一个一个项目的配置,那就太麻烦了,因此一般半导体或者开发板厂商都会制作好一个配置文件。我们可以在这个做好的配置文件基础上来添加自己想要的功能,这些半导体厂商或者开发板厂商制作好的配置文件统一命名为“xxx_defconfig”,xxx 表示开发板名字,这些 defconfig 文件都存放在 configs文件夹。

make max6ull_14x14_ddr512_emmc_defconfig

上述命令就是配置正点原子的I.MX6ULL EMMC核心板所使用的uboot。
在编译uboot之前一定要使用defconfig来配置uboot。
在mx6ull_alientel_emmc.sh中就有一句
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
这个就是调用 mx6ull_14x14_ddr512_emmc_defconfig 来配置 uboot。

当我们执行make xxx_defconfig后就会生成.config文件,此文件保存了详细的uboot配置信息。

u-boot.xxx_cmd文件,这些文件都是编译生成的,都是一些命令文件,比如文件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-nodtb.bin,并重命名为u-boot.bin。这个就是 u-boot.bin的来源,来自于文件 u-boot-nodtb.bin。

.u-boot-nodtb.bin.cmd就是用于生成u-boot.nodtb.bin 的

使用arm-linux-gnueabihf-objcopy,使用objcopy将ELF格式的u-boot文件转换为二进制的u-boot-nodtb.bin 文件。

u-boot是ELF格式的文件,文件.u-boot.cmd用于生成u-boot。

.u-boot.cmd使用到了arm-linux-gnueabihf-ld.bfd,也就是链接工具,将各个built-in.o文件链接在一起就形成了u-boot。
uboot在编译的时候会将同一个目录中所有.c文件便已在一起,并命名为built-in.o,相当于将总多的.c文件对应的.o文件集合在一起,这个就是u-boot文件的来源。

如果我们要用NXP提供的MFGTools工具向开发板烧写uboot,此时烧写的是u-boot.imx文件,而不是u-boot.bin文件。u-boot.imx是在u-boot.bin文件的头部添加了IVT、DCD等信息。这个工作是由文件.u-boot.imx.cmd完成。


这里用到了工具tools/mkimage,而 IVT、DCD 等数据保存在了文件board/freescale/mx6ullevk/imximage-ddr512.cfg.cfgtmp 中。
工具mkimage就是读取文件imximage-ddr512.cfg.cfgtmp 里面的信息,然后将其添加到文件 u-boot.bin 的头部,最终生成 u-boot.imx。

Makefile文件
这个是顶层Makefile文件,Makefile是支持嵌套的,也就是顶层Makefile可以调用子目录中的Makefile文件。
Makefile嵌套在大项目中很常见,一般大项目里面所有的源代码都不会放到同一个目录中,各个功能模块的源代码都是分开的,各自存放在各自的目录中。
每个功能模块目录下都有一个Makefile,这个Makefile只处理本模块的编译链接工作,这样所有的编译链接工作就不用全部放到一个Makefile中,可以使Makefile变得简洁明了。
uboot源码根目录下的Makefile是顶层Makefile,他会调用其它模块的Makefile文件,比如drivers/adc/Makefile。

u-boot.xxx文件

  • u-boot:编译出来的ELF格式的uboot镜像文件。
  • u-boot.bin:编译出来的二进制格式的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 的复制文件。

.config文件
uboot配置文件,使用命令“make xxx_deconfig”配置uboot以后就会自动生成。
.config文件中都是以“CONFIG_”开始的配置项,这些配置项是Makefile中的变量,因此后面都跟有相应的值,uboot的顶层Makefile或子Makefile会调用这些变量值。
在.config中会有大量的变量值为‘y’,这些为‘y’的变量一般用于控制某项功能是否使能,为‘y’就表示功能使能。

CONFIG_CMD_BOOTM=y

如果使能了bootd这个命令的话,CONFIG_CMD_BOOTM就为‘y’。
在 cmd/Makefile 中有如下代码:

obj-$(CONFIG_CMD_BOOTM) += bootm.o
CONFIG_CMD_BOOTM=y
obj-y += bootm.o
也就是给obj-y追加了一个“bootm.o”,obj-y包含着所有要编译的文件对应的.o文件,这里表示需要编译文件cmd/boot.c。
相当于通过CONFIG_CMD_BOOTD=y,来使能bootm这个命令,进而编译cmd/bootm.c这个文件,这个文件实现了命令bootm。
在uboot和Linux内核中都是采用这种方法来选择使能某个功能,编译对应的源码文件。

Uboot源码目录分析相关推荐

  1. U-Boot源码目录分析(VScode工程创建及文件夹过滤)

    参考:U-Boot工程目录介绍 作者:一只青木呀 发布时间: 2020-10-21 14:47:30 网址:https://blog.csdn.net/weixin_45309916/article/ ...

  2. Linux 内核获取、初次编译、源码目录分析

    目录 Linux 内核获取 Linux 内核初次编译 Linux 内核源码目录分析 1.arch 目录 2.block 目录 3.crypto 目录 4.Documentation 目录 5.driv ...

  3. 开发板与虚拟机组网、uboot源码makefile分析、uboot安全启动与非安全启动方式、uboot源码配置与编译流程、制作TF启动盘

    开发板与虚拟机组网. 局面:开发板.PC(Ubuntu系统).网线直连PC:设置Ubuntu系统:1.设置桥接模式,桥接到PC的有线网卡上:2.手动配置IP V4的地址信息,注意和开发板保持在同一网段 ...

  4. uboot之源码目录分析

    (1).gitignore.git工具的文件,git是一个版本管理工具(类似的还有个svn),这个文件和git有关,和uboot本身无关的,不用去管. (2)arm_config.mk.后缀是.mk, ...

  5. Android源码目录分析【转】

    本文转载自:http://blog.csdn.net/backgarden_straw/article/details/8050783 在学习Android的过程中,学习写应用还好,一开始不用管太多代 ...

  6. u-boot:env源码目录分析一

    目的:探索env的读取和保存(qspi) 一.涉及的类型定义 CONFIG_ENV_OFFSET_REDUND ReDund:redundancy(冗余,即开启环境变量的备份). 官方解释: conf ...

  7. 基于OK6410开发板Uboot源码简单分析

    2018-04-07 OK6410开发板是基于三星S3C6410芯片设计的一款开发板,资源比较丰富,可是想要使用这些资源就需要编写相应的启动引导程序,即BootLoader.当然,想要自己凭空写出Bo ...

  8. linux内核源码目录分析

    /arch.arch是architecture的缩写.arch目录下是好多个不同架构的CPU的子目录,譬如arm这种cpu的所有文件都在arch/arm目录下,X86的CPU的所有文件都在arch/x ...

  9. 【OpenHarmony-v3.2代码分析】02 - device目录 uboot源码分析

    [OpenHarmony-v3.2代码分析]02 - device目录 uboot源码分析 1. device 目录分析 从本文开始 ,我们正式来分析OpenHarmony-V3.2的源码的 uboo ...

  10. uboot源码——主Makefile分析

    以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 一.配置编译初体验 1.uboot来源于官方(uboot官网下载),或者SoC官方(研发s5pv210芯片的公司推出的开发板,SMDKV21 ...

最新文章

  1. 嵌入式软件工程师笔试题(含答案)
  2. 【Python】list 之 extend 和 append 的区别
  3. mysql 日期_Mysql数据库常见函数(下)——日期时间函数
  4. JAVA多线程-基础Lock Condition 并发集合
  5. perl中q,qq,qw,qr的区别。
  6. spark中累加器的使用(转)
  7. 前端的c语言面试题,前端工程师面试题汇总(选择题)
  8. python位运算符_Python位运算符
  9. [零基础学JAVA]Java SE应用部分-35.JAVA类集之二
  10. visual studio 库
  11. java在控制台输出空心正方形,菱形,空心菱形
  12. Windows XP 下安装Perl cpan模块
  13. SESSION 与 COOKIE的区别是
  14. 苹果Mac侧边栏笔记工具:​​​​​​​​SideNotes
  15. centos7 虚拟机系统磁盘扩容
  16. 微信小程序利用腾讯云IM即时通讯发送文字+表情开发
  17. 吉首 - 最亲密的x个人
  18. RNN分类IMDB电影评分
  19. 最优化:拟牛顿法、最速下降法、共轭梯度法、信赖域法、协同优
  20. 遇人不淑之逗比程序员

热门文章

  1. 《优化方法基础》知识点总结:凸优化、最优性条件与约束优化问题
  2. 【unity shader】误打误撞做出来了一个简单全息投影shader。。。
  3. 关于TI TMS320F28335的EPWM如何采用软件强制开关状态
  4. (转)不走弯路,就是捷径
  5. 带你看看JS的新趋势「State of JS 2020」中文解读
  6. ios模拟器-Mac os+xcode+xcrun命令行工具
  7. 连续存储结构的循环队列实现
  8. Las与Laz点云文件格式的区别
  9. 再战beach靶场之web考核作业一
  10. 翔楼新材通过注册:年营收10.6亿 清研汽车是股东