瑞芯微Rockchip开发者社区
直播中

王璐

7年用户 490经验值
私信 关注
[经验]

RK3568编译buildroot的具体流程是怎样的

进入代码根目录
cd rk356x_linux_release_20211019/

查看不同板型的配置文件
ls device/rockchip/rk356x/

不必进入配置文件目录,也不必修改权限,直接在顶层目录执行指令来配置文件
./build.sh aio-3568j-buildroot.mk
返回
processing option: aio-3568j-buildroot.mk
switching to board: /home/tianma/linux/rk356x_linux_release_20211019/device/rockchip/rk356x/aio-3568j-buildroot.mk

配置文件会链接到另一个配置文件device/rockchip/.BoardConfig.mk,抓取配置文件
cat device/rockchip/.BoardConfig.mk
返回
#!/bin/bash
CMD=`realpath $BASH_SOURCE`
CUR_DIR=`dirname $CMD`
source $CUR_DIR/firefly-rk3568-buildroot.mk
# Kernel dts
export RK_KERNEL_DTS=rk3568-firefly-aioj
# PRODUCT MODEL
export RK_PRODUCT_MODEL=AIO_3568J

它指向firefly-rk3568-buildroot.mk,但只是个基础配置,还需要选择额外的.mk文件编译,否则会缺少DTS报错
./build.sh roc-rk3568-pc-buildroot.mk
返回
processing option: roc-rk3568-pc-buildroot.mk
switching to board: /home/tianma/linux/rk356x_linux_release_20211019/device/rockchip/rk356x/roc-rk3568-pc-buildroot.mk

再次抓取
cat device/rockchip/.BoardConfig.mk
返回
#!/bin/bash
CMD=`realpath $BASH_SOURCE`
CUR_DIR=`dirname $CMD`
source $CUR_DIR/firefly-rk3568-buildroot.mk
# Kernel dts
export RK_KERNEL_DTS=rk3568-firefly-roc-pc
# PRODUCT MODEL
export RK_PRODUCT_MODEL=ROC_RK3568_PC

编译uboot
./build.sh uboot

编译kernel
./build.sh kernel
期间需要配置2组PMU和8组IO的电压,可以在1.8V与3.3V之间选择,我选择3.3V

编译recovery
./build.sh recovery

编译buildroot
./build.sh buildroot

到此为止所有的编译指令已经完成,接下来要将所有编译所得文件拷贝到指令目录rockdev
./mkfirmware.sh

查看已经拷贝过来的文件
ls rockdev/
boot.img  idblock.bin  MiniLoaderAll.bin  misc.img  oem.img  pack  parameter.txt  recovery.img  rootfs.ext4  rootfs.img  uboot.img  userdata.img
这里面有一些文件是不需要的,但指令了拷贝命令就都拷过来了,稍后分析各个文件

我们先尝试整体编译,需要将已经拷贝过来的文件整合为一个文件,再通过烧录工具烧录。整合好的文件,保存在rockdev/pack
./build.sh updateimg

接下来是我的私房菜
使用烧录工具,unpack那个update.img文件,结果发现它被拆分成了这些包
boot.img、MiniLoaderAll.bin、misc.img、oem.img、parameter.txt、recovery.img、rootfs.img、uboot.img、userdata.img

执行瑞芯微开发工具,如果分布烧录的话,可选项有10个:
Loader、Parameter、Uboot、Misc、Dtbo、vbmeta、Boot、Recovery、baseparameter、Super

由此可得出:
结论1:update.img需要烧录的oem.img、rootfs.img、userdata.img是无法单步烧录的,所以板子第一次烧录一定要整体烧录,以后才能单步烧录;
结论2:开发工具中的Dtbo、vbmeta、baseparameter、Super这4个选项是无用的,单步烧录不勾选它们。

从前面流程得知,rockdev下的文件,大多是从其他目录拷贝过来的,那么要不要有一点小小的改动,都需要整体拷贝到rockdev下呢?
其实是不用的,我们单步烧录,只要从编译文件中找到其路径,就不必每次都拷贝了,直接烧录很方便。
我的寻找方法很简单,以MiniLoaderAll.bin为例。

步骤一:在mkfirmware.sh中,搜索MiniLoaderAll.bin,可见


追踪宏,可见


不用继续追踪宏,也大概可以猜测,u-boot下*loader_v*.bin和*loaer_spl.bin就是我们要寻找的目标

步骤二:编译文件中,find命令查找相应的文件名;
$ find u-boot/ -name "*_loader_v*.bin"
u-boot/rk356x_spl_loader_v1.12.112.bin
$ find u-boot/ -name "*_loader_spl.bin"
结果只找到了一个文件,它大概就是我们要的文件了

步骤三:将可能是我们要的烧录文件统统进行MD5校验,看哪个与rockdev下的烧录文件校验相同
$ md5sum u-boot/rk356x_spl_loader_v1.12.112.bin
7e4f89b9c90557865b562cdc8958c906  u-boot/rk356x_spl_loader_v1.12.112.bin
$ md5sum rockdev/MiniLoaderAll.bin
7e4f89b9c90557865b562cdc8958c906  rockdev/MiniLoaderAll.bin
二者校验和完全相同,那就是它了。

同理,我将其他的都查了个遍,目录和过程如下
$ md5sum u-boot/rk356x_spl_loader_v1.12.112.bin
7e4f89b9c90557865b562cdc8958c906  u-boot/rk356x_spl_loader_v1.12.112.bin
$ md5sum rockdev/MiniLoaderAll.bin
7e4f89b9c90557865b562cdc8958c906  rockdev/MiniLoaderAll.bin

$ md5sum u-boot/uboot.img
1560ef12251f68c97d38137f40575e0e  u-boot/uboot.img
$ md5sum rockdev/uboot.img
1560ef12251f68c97d38137f40575e0e  rockdev/uboot.img

$ md5sum device/rockchip/rockimg/*misc*
756c8e2b3ef736c7957b3d537a12c93d  device/rockchip/rockimg/wipe_all-misc.img
$ md5sum rockdev/misc.img
756c8e2b3ef736c7957b3d537a12c93d  rockdev/misc.img

$ md5sum kernel/boot.img
2506869160f4644430104bc47a0f1d97  kernel/boot.img
$ md5sum rockdev/boot.img
2506869160f4644430104bc47a0f1d97  rockdev/boot.img

$ md5sum buildroot/output/rockchip_rk356x_recovery/images/recovery.img
4b0826c892c4d8f623c51dc1f9ce9b97  buildroot/output/rockchip_rk356x_recovery/images/recovery.img
$ md5sum rockdev/recovery.img
4b0826c892c4d8f623c51dc1f9ce9b97  rockdev/recovery.img

注意一点,parameter.txt不是拷贝过来的,是自动生成的,所以它的路径只能在rockdev。
到此为止,6个必要的烧录文件的源目录都已找到,单步调试的时候,只要勾选这6个中的某个修改的文件,即可快速烧录。

更多回帖

发帖
×
20
完善资料,
赚取积分