build_embed_linux_system

附录二:RK3568平台SDK操作和移植说明

本节以正点原子的AtomPi-CA1进行说明,主要讲述I.MX6ULL SDK平台和应用移植功能。

参考网址: http://www.openedv.com/docs/atompi/AtomPi/AtomPi-CA1.html

hardware

串口连接(TTL),波特率: 1500000(15M)

引脚 功能说明 串口模块连接
G GND GND
T TX RX
R RX TX

通过OTG连接(和USB共用一个接口,同时只能一个连接)

atompi_compile

atompi-ca1是正点原子出品的类似树莓派的产品,此方案使用正点原子的SDK版本为,ATOMPI-CA1_SDK_v1.1.tar.xz。

u-boot

cd u-boot/
./make.sh atompi-ca1
  1. rk356x_spl_loader_v1.18.112.bin(Miniloader.bin):包含SPL和TPL的打包代码。
  2. uboot.img:生成的u-boot执行代码。

kernel

cd kernel/

# 执行kernel的编译
./make.sh

# 执行打包命令
cd ../
./mkboot.sh

###################################################################################################
# 手动打包生成boot.img
if [ -d ./tmp ]; then
    sudo umount ./tmp
    rm -rf ./tmp
fi

if [ -e ./boot.img ]; then
    rm ./boot.img
fi

dd if=/dev/zero of=boot.img bs=1M count=256
mkfs.vfat -F 32 -n boot boot.img
mkdir ./tmp
sudo mount -o loop ./boot.img ./tmp
sudo rm -rf tmp_modules/lib/modules/5.10.*/build
sudo rm -rf tmp_modules/lib/modules/5.10.*/source
cd ./tmp
sudo mkdir extlinux
sudo mkdir dtbs
sudo cp ../extlinux.conf ./extlinux/
sudo cp ../kernel/arch/arm64/boot/Image ./
sudo cp ../kernel/arch/arm64/boot/dts/rockchip/rk3568-atk-atompi-ca1.dtb ./rk-kernel.dtb
sudo cp ../kernel/arch/arm64/boot/dts/rockchip/overlay/*.dtbo ./dtbs/
sudo cp -rf ../tmp_modules/lib/modules/5.10.* ./
cd ..
sudo rm -rf tmp_modules
sleep 1
sync
sleep 1
sudo umount ./tmp
sudo rm -rf ./tmp
sleep 1
sync
echo "Making bootfs finsh!"
exit_if_last_error
###################################################################################################
  1. boot.img: boot.img是FAT32格式的镜像,由多个镜像合并而成。

rootfs

debian文件系统

cd debian/

#下载安装debian的基础库
RELEASE=bullseye TARGET=desktop ARCH=arm64 ./mk-base-debian.sh

#安装重要组件
RELEASE=bullseye ARCH=arm64 ./mk-rootfs.sh

#创建
./mk-image.sh

rk3568_compile

rk3568_firmware

固件名称 固件说明 来源
MiniLoaderAll.bin 该镜像是运行在RK3568平台U-Boot之前的一段Loader代码(也就是比U-Boot更早阶段的Loader)。
MiniLoaderAll.bin由TPL和SPL两部分组成,TPL用于初始化DDR,运行在SRAM;而SPL运行在DDR,主要负责加载、引导uboot.img。
MiniLoaderAll.bin会烧录到开发板uboot分区
编译u-boot生成
uboot.img uboot.img是一种FIT(flattened image tree)格式镜像,它由多个镜像合并而成。
其中包括trust镜像(ARM Trusted Firmware+OP-TEE OS)、u-boot镜像、uboot-dtb;
编译 U-Boot时会将这些镜像打包成一个uboot.img。
uboot.img 会烧录到开发板uboot分区
编译u-boot生成
boot.img boot.img也是FAT32格式的镜像,它也是由多个镜像合并而成,其中包括内核镜像、内核 DTB、资源镜像resource.img。
boot.img 会烧录到开发板boot分区
编译内核
parameter.txt 一个txt文本文件,是RK3568平台的分区表文件(记录分区名以及每个分区它的起始地址、结束地址);烧写镜像时,并不需要将parameter.txt文件烧写到Flash,而是烧录软件会读取它的信息去定义分区 -
rootfs.img 正常启动模式下对应的根文件系统镜像,包含有大量的库文件、可执行文件等。rootfs.img 会烧录到开发板rootfs分区 编译文件系统
recovery.img recovery模式镜像,recovery.img 用于进入recovery模式,recovery.img 会烧录到开发板recovery分区。recovery模式是一种用于对设备进行修复、升级更新的模式。recovery.img 也是FIT格式镜像,也是由多个镜像合并而成,其中包括ramdisk(进入recovery模式时挂载该根文件系统)、内核镜像(进入recovery 模式时启动该内核镜像)、内核dtb以及resource.img。 打包内核和文件系统
misc.img 包含BCB(Bootloader Control Block)信息,该镜像会烧写到开发板misc分区。
misc分区是一个很重要的分区,其中存放了BCB数据块,主要用于Android/Linux系统、 U-Boot 以及 recovery 之间的通信
-
userdata.img 给用户使用,可用于存放用户的App或数据; 该镜像会烧写至开发板 userdata 分区,系统启动之后,会将其挂载到/userdata 目录 -
oem.img 给厂家使用,用于存放厂家的APP或数据,该镜像会烧写至开发板oem 分区,系统启动之后会将其挂载到/oem 目录 -

sdk_decode

cd linux_sdk/

tar -xvf atk-rk3568_linux_release_v1.2_20240129.tgz
.repo/repo/repo sync -l -j10

MiniLoaderAll.bin & uboot.img


cd u-boot/
./make.sh rk3568

# 生成spl文件: rk356x_spl_loader_v1.13.112.bin => MiniLoaderAll.bin
# 生成u-boot打包: uboot.img
cd ../
cp -rv u-boot/rk356x_spl_loader_v1.13.112.bin rockdev/MiniLoaderAll.bin
cp -rv u-boot/uboot.img rockdev/uboot.img

boot.img & resource.img

cd kernel/

# 编译dtb和image
RK_ARCH=arm64
RK_JOBS=16
make ARCH="${RK_ARCH}" rockchip_linux_defconfig
make ARCH="${RK_ARCH}" Image -j"${RK_JOBS}"
make ARCH="${RK_ARCH}" rockchip/rk3568-atk-evb1-ddr4-v10-linux.dtb -j"${RK_JOBS}"
make ARCH="${RK_ARCH}" rockchip/rk3568-atk-evb1-mipi-dsi-1080p.dtb -j"${RK_JOBS}"
make ARCH="${RK_ARCH}" rockchip/rk3568-atk-evb1-mipi-dsi-720p.dtb -j"${RK_JOBS}"
make ARCH="${RK_ARCH}" rockchip/rk3568-atk-evb1-mipi-dsi-10p1_800x1280.dtb -j"${RK_JOBS}"

#生成resource.img
scripts/mkmultidtb.py RK3568-ATK-EVB1

#生成打包版本的boot.img
make ARCH="${RK_ARCH}" rockchip/rk3568-evb1-ddr4-v10-linux.dtb -j"${RK_JOBS}"
cd ../
"$(pwd)"/device/rockchip/common/mk-fitimage.sh "$(pwd)"/kernel/boot.img "$(pwd)"/device/rockchip/rk356x/boot.its

cp -rv kernel/boot.img rockdev/boot.img
cp -rv kernel/resource.img rockdev/resouce.img

rootfs.img

cd buildroot/
#如果执行失败,此语句重复执行一次
source build/envsetup.sh rockchip_rk3568
make all -j16

cd ../
cp -rv buildroot/output/rockchip_rk3568/images/rootfs.ext2 rockdev/rootfs.img

recovery.img

#step1: 生成recovery.img前,要先编译完成kernel,生成Image和相应的dtb文件

#step2. 编译recovery版本的文件系统
cd buildroot/
#如果执行失败,此语句重复执行一次
source build/envsetup.sh rockchip_rk356x_recovery
make all -j16

#生成recovery.img镜像
cd ../
"$(pwd)"/device/rockchip/common/mk-fitimage.sh $(pwd)/buildroot/output/rockchip_rk356x_recovery/images/recovery.img $(pwd)/device/rockchip/rk356x/boot4recovery.its $(pwd)/buildroot/output/rockchip_rk356x_recovery/images/rootfs.cpio.gz
cp buildroot/output/rockchip_rk356x_recovery/images/recovery.img rockdev/

extera_img

#oem.img
#oem资源: device/rockchip/oem/oem_normal
source buildroot/build/envsetup.sh rockchip_rk3568
./device/rockchip/common/mk-image.sh device/rockchip/oem/oem_normal rockdev/oem.img ext2 0K 

#userdata.img
#oem资源: device/rockchip/userdata/userdata_normal
./device/rockchip/common/mk-image.sh device/rockchip/userdata/userdata_normal rockdev/userdata.img ext2 0K 
#misc资源: device/rockchip/rockimg/*.img
cp -rv device/rockchip/rockimg/blank-misc.img rockdev/misc.img
cp -rv device/rockchip/rk356x/parameter-buildroot-fit.txt rockdev/parameter.txt

next_chapter

返回目录

直接开始下一章节说明: 全志t113-i平台编译和应用方法