Firefly开源社区

打印 上一主题 下一主题

[技术讨论] 新:RK3568编译buildroot的具体流程(完结)

83

积分

0

威望

0

贡献

技术小白

积分
83

新:RK3568编译buildroot的具体流程(完结)

发表于 2022-3-30 08:57:45      浏览:4703 | 回复: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个中的某个修改的文件,即可快速烧录。




回复

使用道具 举报

2077

积分

10

威望

12

贡献

中级创客

Rank: 4

积分
2077
发表于 2022-3-30 09:11:20        只看该作者  沙发
什么板型就使用什么配置文件,不能使用 firefly-rk3568-buildroot.mk ,这个是共用的配置文件,缺少dts,不完整
你后面的所有问题都是因为选错了配置文件,是 AIO-3568J 的板子就用 aio-3568j 开头的配置文件

不需要摄像头和屏幕你不接就行了
回复

使用道具 举报

83

积分

0

威望

0

贡献

技术小白

积分
83
发表于 2022-3-30 09:43:18        只看该作者  板凳
Liuth 发表于 2022-3-30 09:11
什么板型就使用什么配置文件,不能使用 firefly-rk3568-buildroot.mk ,这个是共用的配置文件,缺少dts,不 ...

aio-3566-jd4-2cam-buildroot.mk
aio-3566-jd4-buildroot.mk
aio-3566-jd4-mipi-2cam-buildroot.mk
aio-3566-jd4-mipi-buildroot.mk
aio-3568j-2cam-buildroot.mk
aio-3568j-buildroot.mk
aio-3568j-mipi-2cam-buildroot.mk
aio-3568j-mipi-buildroot.mk
firefly-rk3566-buildroot.mk
firefly-rk3568-buildroot.mk
firefly-rk3568-nvr-buildroot.mk
roc-rk3566-pc-2cam-buildroot.mk
roc-rk3566-pc-buildroot.mk
roc-rk3566-pc-mipi-2cam-buildroot.mk
roc-rk3566-pc-mipi-buildroot.mk
roc-rk3568-pc-2cam-buildroot.mk
roc-rk3568-pc-buildroot.mk
roc-rk3568-pc-mipi-2cam-buildroot.mk
roc-rk3568-pc-mipi-buildroot.mk
老师能大概说一下这jd4/pc/nvr/roc都是什么意思吗?
回复

使用道具 举报

2077

积分

10

威望

12

贡献

中级创客

Rank: 4

积分
2077
发表于 2022-3-30 09:53:29        只看该作者  地板
tieshou200 发表于 2022-3-30 09:43
aio-3566-jd4-2cam-buildroot.mk
aio-3566-jd4-buildroot.mk
aio-3566-jd4-mipi-2cam-buildroot.mk

板子型号
回复

使用道具 举报

83

积分

0

威望

0

贡献

技术小白

积分
83
发表于 2022-3-30 18:27:32        只看该作者  5#

能细说一下吗?跪求了
回复

使用道具 举报

2077

积分

10

威望

12

贡献

中级创客

Rank: 4

积分
2077
发表于 2022-3-31 09:21:29        只看该作者  6#
本帖最后由 Liuth 于 2022-4-1 12:22 编辑
tieshou200 发表于 2022-3-30 18:27
能细说一下吗?跪求了

和开发无关,无需了解
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表