[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抓取!
第一种方式可以参考以下文章:
第二种方式使用以下命令即可:
# 从 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
)cpu
、dts
、lib
、include
文件夹:是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 | 检查补丁使用 |
README | Readme文件 |
snapshot.commit | Git快照 |
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.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 | 最终烧录固件 |
以上是关于[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分区