🍇 博主主页:Systemcall小酒屋
🍇 博主简介:Neutionwei,C站嵌入式领域新星创作者之一,一枚热爱开源技术、喜欢分享技术心得的极客,注重简约风格,热衷于用简单的案例讲述复杂的技术,“假传万卷书,真传一案例”,这是厦大一位教数学的院士说过的一句话,另外“成就是最好的老师”,技术既要沉淀,也得分享,成就感的正反馈是支持我持续耕耘的动力!
🍇 专栏目录:Firefly-RK356x板卡
🍇 专栏说明:本专栏主要基于Firefly旗下的RK356x板卡进行入门篇讲述,欢迎订阅,博主会持续更新!
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_嵌入式](https://file.cfanz.cn/uploads/jpeg/2023/01/17/10/90U0DK72B1.jpeg)
一、U-Boot获取
RK356x平台U-Boot源代码获取的方式有两种,第一是直接下载Firefly官方SDK并同步即自动生成U-Boot目录,第二是在代码托管仓库GitHub或者GitLab抓取!
第一种方式可以参考以下文章:
javascript:void(0)
第二种方式使用以下命令即可:
# 从 GitLab 中抓取 U-Boot 源代码
$ git clone https://gitlab.com/firefly-linux/u-boot.git
# 切换为 RK356x/firefly 分支
$ git checkout -b rk356x/firefly remotes/origin/rk356x/firefly
# 从 GitLab 中抓取 rkbin
$ git clone https://gitlab.com/firefly-linux/rkbin.git
$ mkdir -p prebuilts/gcc/linux-x86/aarch64
$ cd prebuilts/gcc/linux-x86/aarch64
# 从 GitLab 中抓取 gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu
$ git clone https://gitlab.com/firefly-linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.git
二、U-Boot根目录
RK356x平台U-Boot根目录如下:
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_嵌入式_02](https://file.cfanz.cn/uploads/png/2023/01/17/10/048FXbIL34.png)
以下是各个子目录或文件的介绍!
2.1 api/
api/是给外部app调用的独立的API(与硬件无关):
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_嵌入式_03](https://file.cfanz.cn/uploads/png/2023/01/17/10/3bc6F5b45K.png)
2.2 arch/
arch/是CPU相关的架构代码:
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_rk3568_04](https://file.cfanz.cn/uploads/png/2023/01/17/10/M4e5Y8ZIQ6.png)
其中arm架构下的内容:
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_linux_05](https://file.cfanz.cn/uploads/png/2023/01/17/10/f0W0fcf1DV.png)
-
mach-开头文件夹:某个具体的ARM处理器相关文件(我们关心的是mach-rockchip) -
cpu、dts、lib、include文件夹:是ARM架构处理器通用文件
cpu/是某个具体的ARM内核架构,内容如下:
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_嵌入式_06](https://file.cfanz.cn/uploads/png/2023/01/17/10/8W54Ff804V.png)
mach-rockchip/是存放某个通用或者具体的Rockchip处理器文件,内容如下:
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_uboot_07](https://file.cfanz.cn/uploads/png/2023/01/17/10/Wd74U74dd3.png)
2.3 board/
board/是不同开发板的代码,移植U-Boot的时候新建开发板bsp也是在这里对应的芯片厂商下面新建:
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_linux_08](https://file.cfanz.cn/uploads/png/2023/01/17/10/Ge81UW0cd0.png)
Rockchip处理器相关开发板:
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_uboot_09](https://file.cfanz.cn/uploads/png/2023/01/17/10/f2WL3c975F.png)
2.4 cmd/
U-Boot命令的实现文件夹,可以与Linux Shell命令进行对比,这是因为U-Boot也有自己的Shell,U-Boot命令相当于U-Boot中的应用程序:
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_bsp_10](https://file.cfanz.cn/uploads/png/2023/01/17/10/74SR8NBV8S.png)
2.5 common/
U-Boot中通用的一些功能实现,硬件依赖性低。
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_rk3568_11](https://file.cfanz.cn/uploads/png/2023/01/17/10/dLU8RE7PV4.png)
2.6 config/
config/存放不同配置文件,命名规则统一为xxx_defconfig。
以下是Rockchip相关的配置文件:
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_rk3568_12](https://file.cfanz.cn/uploads/png/2023/01/17/10/81Ybe0b1XI.png)
以下是Firefly相关的配置文件:
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_嵌入式_13](https://file.cfanz.cn/uploads/png/2023/01/17/10/83J8938838.png)
2.7 disk/
disk/存放分区相关的数据结构文件:
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_linux_14](https://file.cfanz.cn/uploads/png/2023/01/17/10/38eI99299Z.png)
2.8 drivers/
与内核一样,drivers/是存放设备驱动源码:
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_uboot_15](https://file.cfanz.cn/uploads/png/2023/01/17/10/PBO5aLI917.png)
2.9 dts/
存放编译后的设备树文件,以下是未编译状态:
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_uboot_16](https://file.cfanz.cn/uploads/png/2023/01/17/10/F4U8G23bb7.png)
2.10 env/
env/是存放与环境变量相关的文件:
![请添加图片描述 [RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_嵌入式_17](https://file.cfanz.cn/uploads/png/2023/01/17/10/36a6YO5d99.png)
2.11 fs/
fs/是支持的文件系统:
![请添加图片描述 [RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_linux_18](https://file.cfanz.cn/uploads/png/2023/01/17/10/D0dY4aUa97.png)
2.12 Makefile、Kbuild、Kconfig、config.mk
这四个文件配合script/目录一起配置与编译使用。
2.13 make.sh
Rockchip自定义的一个编译脚本,也是一个打包、调试工具。
./make.sh -h可以查看如何使用:
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_bsp_19](https://file.cfanz.cn/uploads/png/2023/01/17/10/2YL02KP38c.png)
2.14 net/
net/是网络相关功能实现:
![请添加图片描述 [RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_rk3568_20](https://file.cfanz.cn/uploads/png/2023/01/17/10/384A801cdD.png)
2.15 scripts/
scripts/包含一些针对U-Boot固件的操作脚本:
![请添加图片描述 [RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_rk3568_21](https://file.cfanz.cn/uploads/png/2023/01/17/10/4d5Y6Z6248.png)
2.16 test/
测试文件:
![请添加图片描述 [RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_嵌入式_22](https://file.cfanz.cn/uploads/png/2023/01/17/10/fZ03f3Ba13.png)
Rockchip相关的测试文件:
![请添加图片描述 [RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_uboot_23](https://file.cfanz.cn/uploads/png/2023/01/17/10/68UD8R5M9R.png)
2.17 tools/
一些工具的源代码:
![请添加图片描述 [RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_linux_24](https://file.cfanz.cn/uploads/png/2023/01/17/10/398005008K.png)
Rockchip相关的工具:
![请添加图片描述 [RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_bsp_25](https://file.cfanz.cn/uploads/png/2023/01/17/10/8O05Z17Y0X.png)
2.18 include/
公共头文件目录,include <xxx.h>就是包含此处的头文件:
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_uboot_26](https://file.cfanz.cn/uploads/png/2023/01/17/10/04f0Xa22aM.png)
Rockchip相关的头文件:
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_rk3568_27](https://file.cfanz.cn/uploads/png/2023/01/17/10/0JXPbJ4c61.png)
2.19 lib/
库文件目录:
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_rk3568_28](https://file.cfanz.cn/uploads/png/2023/01/17/10/f7cWYF2dcf.png)
2.20 examples/
示例代码目录:
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_bsp_29](https://file.cfanz.cn/uploads/png/2023/01/17/10/WeaU71KcM5.png)
2.20 其他(较少关心)
目录/文件 | 描述 |
MAINTAINERS | 记录维护人员信息 |
PREUPLOAD.cfg | 检查补丁使用 |
README | Readme文件 |
snapshot.commit | Git快照 |
doc/ | doc文档目录 |
Documentation/ | Documentation文档目录 |
Licenses/ | 开源许可 |
post/ | 上电自检程序 |
三、编译U-Boot
编译U-Boot需要rkbin与交叉工具链gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu,前面我们已克隆下来。
3.1 编译环境
$ sudo apt-get install repo git ssh make gcc libssl-dev liblz4-tool \
expect g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support \
qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-multilib \
unzip device-tree-compiler python-pip ncurses-dev python-pyelftools
3.2 编译firefly-rk3568
$ cd u-boot
$ ./make.sh firefly-rk3568
编译完成:
![[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_uboot_30](https://file.cfanz.cn/uploads/png/2023/01/17/10/1VbaO62603.png)
3.4 编译后产生目录或文件
![请添加图片描述 [RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_bsp_31](https://file.cfanz.cn/uploads/png/2023/01/17/10/959761693F.png)
目录/文件 | 描述 |
fit/ | Fit打包格式产生目录 |
spl/ | SPL引导文件产生目录 |
tpl/ | TPL引导文件产生目录 |
dts/* | 设备树产生文件 |
rk356x_spl_loader_v1.11.112.bin | 最终烧录的miniloader固件 |
System.map | 系统映射文件 |
bl31.elf | ARM Trusted Firmware固件 |
tee.bin | Optee固件 |
u-boot | 编译出的ELF格式的U-Boot镜像文件 |
u-boot.bin | 编译出来的二进制格式的U-Boot可执行镜像文件 |
u-boot-nodtb.bin | 和u-boot.bin一样,u-boot.bin就是u-boot-nodtb.bin的复制文件 |
u-boot-dtb.bin | 由u-boot通过objcopy生成 |
u-boot.cfg | U-Boot的另一种配置文件 |
u-boot.cfg.configs | u-boot.cfg的配置文件 |
u-boot.dtb | 编译后的设备树文件 |
u-boot.lds | 链接脚本 |
u-boot.map | 映射文件 |
u-boot.srec | S-Record格式的镜像文件 |
u-boot.sym | 符号文件 |
uboot.img | 最终烧录固件 |








