编译linux SDK
参考正点原子
编译环境是 ubuntu20.04。Linux 源码包是rk356x_linux_XXXXXXX.tar.gz。使用命令“ tar -vxf rk356x_linux_XXXXXXX.tar.gz解压,解压后会生成一个 rk356x_linux 文件夹。
1、编译 uboot
./build.sh uboot
编译成功生成
<SDK>/uboot/uboot.img
<SDK>/uboot/rk356x_spl_loader_v1.13.112.bin
2、编译 kernel
./build.sh kernel
编译成功生成<SDK>/kernel/boot.img
3、编译 Recovery
./build.sh recovery
编译成功生成rootfs.img,在目录下buildroot/output/rockchip_rk356x_recovery/images/
4、编译 rootfs
选择buildroot根文件系统
./build.sh buildroot
编译成功生成rootfs.img,在目录下
buildroot/output/rockchip_rk3568/images/
5、打包镜像
./build.sh firmware
将前面编译的镜像移动到 rockdev 目录下
./build.sh updateimg
将 rockdev 目录下的镜像打包 update.img 镜像
6、SDK 板级配置文件
板级配置文件位于目录<SDK>/device/rockchip/rk356x/。xxx.mk文件就是板级配置文件,.mk 文件其实是一个 sh 脚本文件,通过 export 导出一些环境变量。
7、uboot
U-Boot 源码在<SDK>/u-boot 目录
RK3568 的设备树文件是<U-Boot>/arch/arm/dts/rk3568-evb.dts,该设备树文件包
含了 rk3568.dtsi 和 rk3568-u-boot.dtsi。原生的 U-Boot 只支持 U-Boot 自己的 DTB, RK 平台在原生 U-Boot 基础上增加了 kernel DTB 机制的支持,即 U-Boot 会使用 kernel DTB 去初始化外设。U-Boot 设备树负责初始化存储、调试串口等基础外设;而 kernel 设备树初始化存储、调试
串口之外的外设,譬如 LCD 显示、 千兆网等。执行 U-Boot 代码时先用 U-Boot 的设备树完成存
储、调试串口的初始化操作,然后从存储上加载 kernel 的设备树并转而使用这份设备树继续初
始化其余外设。
MiniLoaderAll.bin由 rk356x_spl_loader_v1.13.112.bin 重命名而来。MiniLoaderAll.bin 由两部分构成: TPL(Tiny Program Loader) + SPL(Secondary Program Loader)构成。TPL 运行在 SRAM 中(片内内存), 由 rk3568 芯片内部所固化的 Maskrom(BootROM)代码引导启动;其作用是负责完成 DRAM 的初始化工作、并启动 SPL; SPL 运行在 DDR, SPL的作用是负责完成系统的 lowlevel 初始化、 完成 uboot.img 的加载和引导工作。
Linux 系统的镜像启动顺序为:
Maskrom → MiniLoaderAll.bin → uboot.img → boot.img → rootfs.img
还可以进行细分:
Maskrom → TPL(ddr bin) → SPL(miniloader) → Trust(ATF + OP-TEE) → u-boot → kernel → rootfs
U-Boot中, RK3568平台使用的defconfig配置文件为: <U-Boot>/configs/rk3568_defconfig