0
点赞
收藏
分享

微信扫一扫

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


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

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

一、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


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

2.1 api/

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

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_嵌入式_03

2.2 arch/

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

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


其中arm架构下的内容:

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

  • ​mach-​​​开头文件夹:某个具体的ARM处理器相关文件(我们关心的是​​mach-rockchip​​)
  • ​cpu​​​、​​dts​​​、​​lib​​​、​​include​​文件夹:是ARM架构处理器通用文件

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

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_嵌入式_06


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

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

2.3 board/

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

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


Rockchip处理器相关开发板:

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

2.4 cmd/

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

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

2.5 common/

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

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

2.6 config/

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

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

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


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

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_嵌入式_13

2.7 disk/

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

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

2.8 drivers/

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

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

2.9 dts/

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

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

2.10 env/

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

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_嵌入式_17

2.11 fs/

​fs/​​是支持的文件系统:

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

2.12 Makefile、Kbuild、Kconfig、config.mk

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

2.13 make.sh

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

​./make.sh -h​​可以查看如何使用:

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

2.14 net/

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

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

2.15 scripts/

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

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

2.16 test/

测试文件:

[RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码_嵌入式_22

Rockchip相关的测试文件:

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

2.17 tools/

一些工具的源代码:

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

Rockchip相关的工具:

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

2.18 include/

公共头文件目录,​​include <xxx.h>​​就是包含此处的头文件:

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

Rockchip相关的头文件:

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

2.19 lib/

库文件目录:

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

2.20 examples/

示例代码目录:

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

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

3.4 编译后产生目录或文件

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

目录/文件

描述

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

最终烧录固件


举报

相关推荐

0 条评论