|
【技术讨论】
新:RK3568编译buildroot的具体流程(完结)
发表于 2022-3-30 08:57:45
浏览:10000
|
回复:5
打印
只看该作者
[复制链接]
楼主
本帖最后由 tieshou200 于 2022-4-1 16:43 编辑
进入代码根目录
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,可见
ln -rsf $LOADER $ROCKDEV/MiniLoaderAll.bin
ln -rsf $SPL $ROCKDEV/MiniLoaderAll.bin
追踪宏,可见
LOADER=$TOP_DIR/u-boot/*_loader_v*.bin
SPL=$TOP_DIR/u-boot/*_loader_spl.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个中的某个修改的文件,即可快速烧录。
|
|