[RK356x] [Firefly-Linux] 10min带你获取了解与编译U-Boot源代码

Posted Neutionwei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[RK356x] [Firefly-Linux] 10min带你获取了解与编译U-Boot源代码相关的知识,希望对你有一定的参考价值。

🍇 博主主页:Systemcall小酒屋
🍇 博主简介:Neutionwei,C站嵌入式领域新星创作者之一,一枚热爱开源技术、喜欢分享技术心得的极客,注重简约风格,热衷于用简单的案例讲述复杂的技术,“假传万卷书,真传一案例”,这是厦大一位教数学的院士说过的一句话,另外“成就是最好的老师”,技术既要沉淀,也得分享,成就感的正反馈是支持我持续耕耘的动力!
🍇 专栏目录:Firefly-RK356x板卡
🍇 专栏说明:本专栏主要基于Firefly旗下的RK356x板卡进行入门篇讲述,欢迎订阅,博主会持续更新!

一、U-Boot获取

RK356x平台U-Boot源代码获取的方式有两种,第一是直接下载Firefly官方SDK并同步即自动生成U-Boot目录,第二是在代码托管仓库GitHub或者GitLab抓取!

第一种方式可以参考以下文章:

https://blog.csdn.net/Neutionwei/article/details/121638947

第二种方式使用以下命令即可:

# 从 GitLab 中抓取
$ git clone https://gitlab.com/firefly-linux/u-boot.git
# 切换为 RK356x 分支
$ git checkout -b rk356x/firefly remotes/origin/rk356x/firefly
$ git clone https://gitlab.com/firefly-linux/rkbin.git
$ mkdir -p prebuilts/gcc/linux-x86/aarch64
$ 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根目录如下:

以下是各个子目录或文件的介绍!

2.1 api/

api/是给外部app调用的独立的API(与硬件无关):

2.2 arch/

arch/是CPU相关的架构代码:


其中arm架构下的内容:

  • mach-开头文件夹:某个具体的ARM处理器相关文件(我们关心的是mach-rockchip
  • cpudtslibinclude文件夹:是ARM架构处理器通用文件

cpu/是某个具体的ARM内核架构,内容如下:


mach-rockchip/是存放某个通用或者具体的Rockchip处理器文件,内容如下:

2.3 board/

board/是不同开发板的代码,移植U-Boot的时候新建开发板bsp也是在这里对应的芯片厂商下面新建:


Rockchip处理器相关开发板:

2.4 cmd/

U-Boot命令的实现文件夹,可以与Linux Shell命令进行对比,这是因为U-Boot也有自己的Shell,U-Boot命令相当于U-Boot中的应用程序:

2.5 common/

U-Boot中通用的一些功能实现,硬件依赖性低。

2.6 config/

config/存放不同配置文件,命名规则统一为xxx_defconfig

以下是Rockchip相关的配置文件:

以下是Firefly相关的配置文件:

2.7 disk/

disk/存放分区相关的数据结构文件:

2.8 drivers/

与内核一样,drivers/是存放设备驱动源码:

2.9 dts/

存放编译后的设备树文件,以下是未编译状态:

2.10 env/

env/是存放与环境变量相关的文件:

2.11 fs/

fs/是支持的文件系统:

2.12 Makefile、Kbuild、Kconfig、config.mk

这四个文件配合script/目录一起配置与编译使用。

2.13 make.sh

Rockchip自定义的一个编译脚本,也是一个打包、调试工具。

2.14 net/

net/是网络相关功能实现:

2.15 scripts/

scripts/包含一些针对U-Boot固件的操作脚本:

2.16 test/

测试文件:
Rockchip相关的测试文件:

2.17 tools/

一些工具的源代码:

Rockchip相关的工具:

2.18 其他(重要程度低)

目录/文件描述
MAINTAINERS记录维护人员信息
PREUPLOAD.cfg检查补丁使用
READMEReadme文件
snapshot.commitGit快照
doc/文档目录
Documentation/文档目录
examples/示例代码目录
include/公共头文件目录
lib/库文件目录
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

编译完成:

3.4 编译后产生目录或文件

目录/文件描述
fit/Fit打包格式产生目录
spl/SPL引导文件产生目录
tpl/TPL引导文件产生目录
dts/*设备树产生文件
rk356x_spl_loader_v1.11.112.bin最终烧录的miniloader固件
System.map系统映射文件
bl31.elfARM Trusted Firmware固件
tee.binOptee固件
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.cfgU-Boot的另一种配置文件
u-boot.cfg.configsu-boot.cfg的配置文件
u-boot.dtb编译后的设备树文件
u-boot.lds链接脚本
u-boot.map映射文件
u-boot.srecS-Record格式的镜像文件
u-boot.sym符号文件
uboot.img最终烧录固件

以上是关于[RK356x] [Firefly-Linux] 10min带你获取了解与编译U-Boot源代码的主要内容,如果未能解决你的问题,请参考以下文章

[RK356x] [Firefly-Linux] 一节课间时间带你了解Ubuntu固件各个分区

[RK356x] [Firefly-Linux] 一节课间时间带你了解Linux_SDK

[RK356x] [Firefly-Linux] 10min带你获取了解与编译Kernel源代码

[RK356x] [Firefly-Linux] 一节课间时间教你单独更新Kernel到Ubuntu系统的boot分区

[RK356x] [Firefly-Linux] 10min带你获取了解与编译U-Boot源代码

RK356x U-Boot研究所(引导篇)1.1 BootLoader引导过程浅析