U-Boot 的源码顶层目录说明
目录 | 特性 | 解 释 说 明 |
---|---|---|
board | 平台依赖 | 存放电路板相关的目录文件,例如:RPXlite(mpc8xx)、smdk2410(arm920t)、sc520_cdp(x86) 等目录 |
cpu | 平台依赖 | 存放 CPU 相关的目录文件, 例如: mpc8xx、 ppc4xx、 arm720t、 arm920t、 xscale、i386 等目录 |
lib_ppc | 平台依赖 | 存放对 PowerPC 体系结构通用的文件, 主要用于实现 PowerPC 平台通用的函数 |
lib_arm | 平台依赖 | 存放对 ARM 体系结构通用的文件,主要用于实现 ARM 平台通用的函数 |
lib_i386 | 平台依赖 | 存放对 X86 体系结构通用的文件,主要用于实现 X86 平台通用的函数 |
include | 通用 | 头文件和开发板配置文件,所有开发板的配置文件都在 configs 目录下 |
common | 通用 | 通用的多功能函数实现 |
lib_generic | 通用 | 通用库函数的实现 |
Net | 通用 | 存放网络的程序 |
Fs | 通用 | 存放文件系统的程序 |
Post | 通用 | 存放上电自检程序 |
drivers | 通用 | 通用的设备驱动程序,主要有以太网接口的驱动 |
Disk | 通用 | 硬盘接口程序 |
Rtc | 通用 | RTC 的驱动程序 |
Dtt | 通用 | 数字温度测量器或者传感器的驱动 |
examples | 应用例程 | 一些独立运行的应用程序的例子,例如 helloworld |
tools | 工具 | 存放制作 S-Record 或者 U-Boot 格式的映像等工具,例如 mkimage Doc 文档 开发使用文档 |
嵌入式学院—《嵌入式 Linux 系统开发标准教程》——第 6 章、Bootloader
U-Boot 的编译
U-Boot 的源码是通过 GCC 和 Makefile 组织编译的。 顶层目录下的 Makefile 首先可以设置开发板的定义,然后递归地调用各级子目录下的 Makefile,最后把编译过的程序链接成 U-Boot 映像。
1.顶层目录下的 Makefile
它负责 U-Boot 整体配置编译。按照配置的顺序阅读其中关键的几行。
每一种开发板在 Makefile 都需要有板子配置的定义。
例如 smdk2410 开发板的定义如下
smdk2410_config :unconfig
@./mkconfig $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
执行配置 U-Boot 的命令 make smdk2410_config,通过./mkconfig 脚本生成
include/config.mk 的配置文件。文件内容正是根据 Makefile 对开发板的配置生成的。
ARCH = arm
CPU = arm920t
BOARD = smdk2410
SOC = s3c24x0
2.开发板配置头文件
除了编译过程 Makefile 以外,还要在程序中为开发板定义配置选项或者参数。这个头文件是 include/configs/<board_name>.h。 <board_name>用相应的 BOARD 定义代替。
这个头文件中主要定义了两类变量。
一类是选项,前缀是 CONFIG_,用来选择处理器、设备接口、命令、属性等。
例如:
#define CONFIG_ARM920T 1
#define CONFIG_DRIVER_CS8900 1
另一类是参数,前缀是 CFG_,用来定义总线频率、串口波特率、Flash 地址等参数。
例如:
#define CFG_FLASH_BASE 0x00000000
#define CFG_PROMPT "=>"
3.编译结果
根据对 Makefile 的分析,
编译分为 2 步。
第 1 步配置,
例如: make smdk2410_config
第 2 步编译,执行 make 就可以了。
编译完成后,可以得到 U-Boot 各种格式的映像文件和符号表
文 件 名 称 | 说明 |
---|---|
System.map | U-Boot 映像的符号表 |
u-boot.bin | U-Boot 映像原始的二进制格式 |
u-boot | U-Boot 映像的 ELF 格式 |
u-boot.srec | U-Boot 映像的 S-Record 格式 |
一般 u-boot.bin 最为常用,直接按照二进制格式下载,并且按照绝对地址烧写到Flash 中就可以了。
U-Boot移植
(1)在顶层 Makefile 中为开发板添加新的配置选项
(2)创建一个新目录存放开发板相关的代码,并且添加文件
(3)为开发板添加新的配置文件
(4)配置开发板
(5)编译 U-Boot
(6)添加驱动或者功能选项
(7)调试 U-Boot 源代码,直到 U-Boot 在开发板上能够正常启动
网友评论