镜像介绍
根据官网提供的代码仓库,获取源码,README中有介绍各个仓库如何编译及编译出的镜像名称。是以Debian 系统为案例。
https://github.com/radxa/rockchip-bsp
最终编译出两个镜像,rk3399_loader_v1.12.112.bin和system.img
烧录之后开机进入uboot命令行,看下part list
=> part list mmc 0
Partition Map for MMC device 0 -- Partition Type: EFI
Part Start LBA End LBA Name
Attributes
Type GUID
Partition GUID
1 0x00000040 0x00001f7f "loader1"
attrs: 0x0000000000000000
type: 0fc63daf-8483-4772-8e79-3d69d8477de4
guid: f89d5d3c-d4ce-4c2c-a2a4-a4568672de37
2 0x00004000 0x00005fff "loader2"
attrs: 0x0000000000000000
type: 0fc63daf-8483-4772-8e79-3d69d8477de4
guid: 92467811-debc-4be9-ba0c-85703c475b92
3 0x00006000 0x00007fff "trust"
attrs: 0x0000000000000000
type: 0fc63daf-8483-4772-8e79-3d69d8477de4
guid: 44ee5a82-67ea-46fb-9b1e-ac02ac6ef0db
4 0x00008000 0x00107fff "boot"
attrs: 0x0000000000000000
type: c12a7328-f81f-11d2-ba4b-00a0c93ec93b
guid: 6400ce01-5eee-4390-b529-06a1d84bf246
5 0x00108000 0x007a7fde "rootfs"
attrs: 0x0000000000000000
type: 0fc63daf-8483-4772-8e79-3d69d8477de4
guid: b921b045-1df0-41c3-af44-4c6f280d3fae
通过上述信息可以看到总共有5个分区,分别是loader1,loader2,trust,boot和rootfs。
通过查看build/mk-image.sh可以看到相应分区对应的镜像名称,对应关系如下:
loader1 ----》 idbloader.img
loader2 ----》uboot.img
trust --------》trust.img
boot --------》boot.img
rootfs ------》idbloader.img
idbloader.img
idbloader.img文件是一个Rockchip格式的预加载程序,在SoC启动时工作,它包含:
- 由Rockchip BootROM知道的IDBlock 头;
- DDR初始化程序,由BootROM加载到SRAM,运行在SRAM内部;
- 下一级加载程序,由MaskROM加载并运行在DDR上;
u-boot.img
u-boot.bin 是uboot源码编译后生成的原始二进制映像,可以直接烧录到设备的闪存中。而u-boot.img则是通过mkimage工具在u-boot.bin基础上增加了一个头部信息,这个头部信息可能也包括一些额外的数据,例如启动参数和内核映像地址等。
因此,通过使用u-boot.img而不是 u-boot.bin,可以使引导ROM更容易地识别uboot映像,并更好地指导uboot在设备上正确启动。
trust.img
因为RK3399是ARM64,所以我们还需要编译 ATF (ARM Trust Firmware),ATF 主要负责在启动uboot之前把CPU从安全的EL3切换到 EL2,然后跳转到uboot,并且在内核启动后负责启动其他的CPU。
boot.img
boot.img是由Image ,rk3399-rock-pi-4b.dtb和rk3399.conf这三个文件组成的一个vfat类型的img。
rk3399.conf内容如下:
label kernel-4.4
kernel /Image
fdt /rk3399-rock-pi-4b.dtb
append earlycon=uart8250,mmio32,0xff1a0000 swiotlb=1 coherent_pool=1m earlyprintk console=ttyS2,1500000n8 rw root=PARTUUID=b921b045-1d rootfstype=ext4 init=/sbin/init rootwait
rootfs.img
rootfs是根据github中debian的文件系统编译出的img, 用于文件系统的使用。
打包脚本介绍
主要介绍mk-image.sh,源码如下:
#!/bin/bash -e
LOCALPATH=$(pwd)
OUT=${LOCALPATH}/out
TOOLPATH=${LOCALPATH}/rkbin/tools
EXTLINUXPATH=${LOCALPATH}/build/extlinux
CHIP=""
TARGET=""