uboot顶层目录(根目录)下的config.mk解析

该文件在主Makefile中的第185行被包含,如下:

# load other configuration
include $(TOPDIR)/config.mk

1. 编译工具定义(94 ~ 107行)

#
# Include the make variables (CC, etc...)
#
AS	= $(CROSS_COMPILE)as
LD	= $(CROSS_COMPILE)ld
CC	= $(CROSS_COMPILE)gcc
CPP	= $(CC) -E
AR	= $(CROSS_COMPILE)ar
NM	= $(CROSS_COMPILE)nm
LDR	= $(CROSS_COMPILE)ldr
STRIP	= $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump
RANLIB	= $(CROSS_COMPILE)RANLIB

2. 包含开发板配置项(112行)

# Load generated board configuration
sinclude $(OBJTREE)/include/autoconf.mk

(1)autoconf.mk文件不会源代码提供的,是在配置过程中自动生成的。

(2)该文件的作用是指导uboot的编译过程。该文件里面的内容是以CONFIG_开头的宏,这些宏会影响uboot的编译过程(其实就是条件编译)。

在uboot代码中的很多地方使用条件编译进行编写,这里的条件编译时用来可移植性的。

(3)这个文件是根据include/configs/xxx.h头文件的内容生成的。x210开发板对应的头文件是x210_sd.h,在这个.h头文件中,全部都是宏定义,这些宏定义就代表了对x210开发板的移植。每一个开发板的移植对应include/configs目录下的一个头文件,而对应的头文件中全部都是宏定义,因此配置头文件中的这些宏定义就是移植uboot的关键所在。

3. 链接脚本(142 ~ 149行)

ifndef LDSCRIPT
#LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds.debug
ifeq ($(CONFIG_NAND_U_BOOT),y)
LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds
else
LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds
endif
endif

如果定义了CONFIG_NAND_U_BOOT宏,则使用u-boot-nand.lds这个链接脚本;如果未定义,使用u-boot.lds这个链接脚本。

4. TEXT_BASE(156 ~ 158行)

ifneq ($(TEXT_BASE),)
CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE)
endif

(1)在Makefile中配置x210开发板时,在board/samsung/x210目录下生成了一个文件config.mk,这个文件中的内容就是:

TEXT_BASE = 0xc3e00000

相当于定义了一个变量TEXT_BASE,它的内容是0xC3E00000。

(2)TEXT_BASE是整个uboot链接时指定的链接地址。由于在uboot中启用了虚拟地址映射,因此0xC3E00000这个地址就等于0x23E00000。

5. 自动推到规则(239 ~ 256行)

ifndef REMOTE_BUILD

%.s:	%.S
	$(CPP) $(AFLAGS) -o $@ $<
%.o:	%.S
	$(CC) $(AFLAGS) -c -o $@ $<
%.o:	%.c
	$(CC) $(CFLAGS) -c -o $@ $<

else

$(obj)%.s:	%.S
	$(CPP) $(AFLAGS) -o $@ $<
$(obj)%.o:	%.S
	$(CC) $(AFLAGS) -c -o $@ $<
$(obj)%.o:	%.c
	$(CC) $(CFLAGS) -c -o $@ $<
endif

该部分内容可以参考《跟我一切学Makefile》。

### 设置 U-Boot 编译环境 #### 安装依赖包 为了成功编译 U-Boot,需要安装一系列必要的工具链和支持库。对于大多数 Linux 发行版来说,可以通过包管理器来完成这些软件的安装。 在 Debian 或 Ubuntu 系统上可以执行如下命令: ```bash sudo apt-get update && sudo apt-get install -y build-essential libncurses5-dev \ libssl-dev mtools bison flex u-boot-tools gcc-arm-linux-gnueabihf ``` 这会安装 GCC 编译器、Make 工具以及其他一些辅助程序[^2]。 #### 获取源码 可以从官方 Git 仓库克隆最新的 U-Boot 源代码到本地机器: ```bash git clone https://source.codeaurora.org/external/u-boot/u-boot.git cd u-boot/ ``` 也可以下载特定版本的压缩包并解压至工作目录下。 #### 配置目标平台 进入 U-Boot 的根目录之后,通过 `make` 命令指定要支持的目标硬件架构及其对应的默认配置文件来进行初始化设置。例如针对 ARM 架构下的某款开发板: ```bash make distclean make <board_name>_defconfig ``` 这里的 `<board_name>` 应替换为实际使用的开发板名称字符串。该操作会在项目树内生成 `.config` 文件作为后续构建的基础参数集。 #### 修改配置选项 (可选) 如果想要调整某些高级特性或是启用额外的功能模块,则可以在上述基础上进一步编辑配置项。有两种方式实现这一点: 1. 使用菜单驱动界面交互修改: ```bash make menuconfig ``` 2. 手动编辑位于顶层目录中的 `.config` 文本文件直接更改宏定义值。 注意,在 include/config.mk 中记录有 U-Boot 版本信息;而在 include/configs/<board>.h 则保存了许多以 CONFIG_ 开头的关键字用于控制功能开关等重要属性。 #### 编译固件镜像 当一切准备就绪后就可以正式开始编译流程了。通常情况下只需简单运行一次 Make 即可获得所需的二进制输出物: ```bash make all ``` 完成后将会得到几个主要产物如 idbloader.img(TPL/SPL)、u-boot.itb 及 bl31.elf 这些都是启动过程中需要用到的核心组件[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值