RK356x U-Boot研究所(编译篇)2.5 ./make.sh脚本的用法

本文介绍了RK356x设备的U-Boot编译过程,包括固件构建、打包及反汇编调试的方法。在固件构建中,重点讲解了./make.sh脚本的使用,强调了构建前提条件和env工具的作用。固件打包部分提到了FIT格式的限制,并给出特定命令的应用场景。最后,文章阐述了反汇编调试的步骤。
平台 U-Boot 版本 Linux SDK 版本
RK356x 2017.09 v1.2.3

直接在u-boot根目录执行./make.sh -h命令就能看到用法:

一、固件构建

构建rk3568固件其实就是./make.sh rk3568,实际选用的是rk3568_defconfig,这里的构建固件一定要确保configs目录有相应的*_defconfig*.config文件:


如果是相同的.config文件,再次构建直接执行./make.sh即可!

除此之外,./make.sh env用于构建fw_printenv工具:

fw_printenv是U-Boot提供的一个给linux使用的en

您提供的这段命令是 **编译 `mkimage` 工具的过程**。`mkimage` 是 U-Boot 提供的一个用于生成 U-Boot 可识别镜像(如 `uImage`)的工具。它通常位于 U-Boot 源码目录的 `tools/` 子目录下。 --- ### 🧾 命令解析 #### 第一行:编译 `mkimage.c` 源文件 ```bash cc -Wp,-MD,tools/.mkimage.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 \ -include ./include/compiler.h -idirafterinclude -idirafter./arch/arm/include \ -idirafterlib_verify -I./scripts/dtc/libfdt -I./tools -DUSE_HOSTCC -D__KERNEL_STRICT_NAMES \ -D_GNU_SOURCE -std=gnu99 -c -o tools/mkimage.o tools/mkimage.c ``` - `cc`:C 编译器(通常是 GCC)。 - `-Wp,-MD,tools/.mkimage.o.d`:生成依赖文件 `.d`,用于 Makefile 自动依赖管理。 - `-Wall -Wstrict-prototypes`:启用所有警告。 - `-O2`:优化等级 2- `-fomit-frame-pointer`:不保留帧指针,优化代码。 - `-std=gnu11`:使用 GNU C11 标准编译- `-include ./include/compiler.h`:在编译前自动包含该头文件。 - `-idirafter...`:指定头文件搜索路径。 - `-I./scripts/dtc/libfdt -I./tools`:添加头文件路径。 - 宏定义: - `-DUSE_HOSTCC`:表示使用主机编译器。 - `-D__KERNEL_STRICT_NAMES`:启用内核命名风格检查。 - `-D_GNU_SOURCE`:启用 GNU 扩展。 - `-std=gnu99`:使用 GNU C99 标准编译(可能用于兼容旧代码)。 - `-c`:只编译,不链接。 - `-o tools/mkimage.o`:输出目标文件。 - `tools/mkimage.c`:源文件。 --- #### 第二行:链接生成可执行文件 `mkimage` ```bash cc -o tools/mkimage tools/aisimage.o ... tools/mkimage.o ``` - 将多个 `.o` 目标文件链接成最终的可执行文件 `mkimage`。 - 这些 `.o` 文件来自不同平台和功能模块(如 FIT、FDT、CRC、设备特定格式等)。 - 支持多种镜像格式,如: - FIT(Flattened Image Tree) - AIS(TI 的镜像格式) - i.MX、Rockchip、Zynq、Atmel 等平台镜像格式 - CRC32SHA、MD5 等校验算法 --- ### 📌 `mkimage` 的作用 `mkimage` 是一个命令行工具,用于将原始内核镜像(如 `zImage`)加上 U-Boot 镜像头部,生成可被 U-Boot 启动的镜像文件(如 `uImage`)。 #### 示例命令: ```bash ./tools/mkimage -A arm -O linux -T kernel -C none \ -a 0x8000 -e 0x8000 -n 'Linux' -d zImage uImage ``` --- ### 📁 编译流程说明 ``` mkimage.c ↓ mkimage.o ↓ 链接其他模块(fit, fdt, crc32, imx, rk, etc.) ↓ 生成可执行文件:tools/mkimage ``` --- ### ✅ 成功编译后你可以做什么? - 使用 `mkimage` 生成 U-Boot 可识别的镜像(如 `uImage`) - 将其集成到构建系统中(例如 Linux 内核 Makefile) - 在嵌入式平台上使用 `uImage` 启动系统 --- ### 🛠 常见问题与解决方法 | 问题 | 原因 | 解决方法 | |------|------|-----------| | 编译失败,找不到 `compiler.h` | 编译路径错误或未配置 | 确保在 U-Boot 源码根目录下执行 `make` | | 链接失败,找不到某些 `.o` 文件 | 编译未完成或未生成目标文件 | 执行 `make tools/mkimage` 以确保完整构建 | | 生成的 `mkimage` 无法运行 | 平台不匹配或未交叉编译 | 主机工具无需交叉编译,但用于嵌入式平台的镜像需使用正确参数 | --- ### 🧩 扩展知识 - `mkimage` 是 U-Boot 构建过程的一部分,通常通过 `make tools/` 或 `make all` 生成。 - `mkuboot.sh` 是一个封装脚本,调用 `mkimage` 并传递参数。 - `mkimage` 支持多种镜像类型,如: - `kernel`(内核) - `ramdisk` - `flat_dt`(设备树) - `script`(U-Boot 脚本- `firmware` - `multi`(多文件镜像) --- ### ✅ 总结 这段命令展示了 `mkimage` 工具的编译过程。它由多个平台相关的 `.o` 文件组成,最终链接成一个可执行文件,用于生成 U-Boot 可启动镜像。这是 U-Boot 构建系统中的关键部分,也是 Linux 内核构建中用于生成 `uImage` 的依赖工具。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式逍遥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值