概述
- 开发板
基于Firefly开发板
- 参考
参考wiki,SDK里面的文档
编译过程
编译buildroot系统固件
编译前配置
进入sdk目录
./build.sh aio-3588q-buildroot.mk
or
./build.sh aio-3588q-BE45-A1-buildroot.mk # MIPI 屏幕
or
./build.sh aio-3588q-edp-buildroot.mk # EDP 屏幕
编译
全自动编译
./build.sh
打包固件,生成的完整固件会保存到 rockdev/pack/ 目录。
编译成功部分log如下:
make: Leaving directory '/home/linux/plat/rk3588/sdk/buildroot'
2024-04-09T16:58:45 >>> Finalizing host directory
2024-04-09T16:58:45 >>> Finalizing target directory
2024-04-09T16:58:48 >>> Sanitizing RPATH in target tree
2024-04-09T16:59:00 >>> Sanity check in overlay board/rockchip/common/base
2024-04-09T16:59:00 >>> Sanity check in overlay board/rockchip/rk3588/fs-overlay/
2024-04-09T16:59:00 >>> Sanity check in overlay board/firefly/roc-rk3588s-pc
2024-04-09T16:59:00 >>> Sanity check in overlay board/firefly/itx-3588j
2024-04-09T16:59:00 >>> Sanity check in overlay board/firefly/aio-3588sjd4
2024-04-09T16:59:00 >>> Copying overlay board/rockchip/common/base
2024-04-09T16:59:00 >>> Copying overlay board/rockchip/rk3588/fs-overlay/
2024-04-09T16:59:00 >>> Copying overlay board/firefly/roc-rk3588s-pc
2024-04-09T16:59:00 >>> Copying overlay board/firefly/itx-3588j
2024-04-09T16:59:00 >>> Copying overlay board/firefly/aio-3588sjd4
2024-04-09T16:59:01 >>> Executing post-build script board/rockchip/common/post-build.sh
2024-04-09T16:59:01 >>> Generating root filesystems common tables
2024-04-09T16:59:01 >>> Generating filesystem image rootfs.cpio
2024-04-09T16:59:57 >>> Generating filesystem image rootfs.ext2
2024-04-09T17:00:02 >>> Generating filesystem image rootfs.squashfs
2024-04-09T17:00:12 >>> Generating filesystem image rootfs.tar
Done in 1min 40s
Log saved on /home/linux/plat/rk3588/sdk/.buildroot/br.log
Generated images:
rootfs.cpio rootfs.cpio.gz rootfs.ext2 rootfs.ext4 rootfs.squashfs rootfs.tar
you take 1:40.70 to build builroot
====Build buildroot ok!====
Running build_rootfs succeeded.
==========Start building recovery==========
TARGET_RECOVERY_CONFIG=
========================================
config is
use prebuilt rk3588-recovery-arm64.cpio.gz for CPIO image
found kernel image
pack recovery.img...fdt {
kernel {
ramdisk {
resource {
FIT description: U-Boot FIT source file for arm
Created: Tue Apr 9 17:00:20 2024
Image 0 (fdt)
Description: unavailable
Created: Tue Apr 9 17:00:20 2024
Type: Flat Device Tree
Compression: uncompressed
Data Size: 287453 Bytes = 280.72 KiB = 0.27 MiB
Architecture: AArch64
Load Address: 0xffffff00
Hash algo: sha256
Hash value: b90d711f4dad16885bcfe2dc13c077ccc4505985065434de4efb1aa6fe29f290
Image 1 (kernel)
Description: unavailable
Created: Tue Apr 9 17:00:20 2024
Type: Kernel Image
Compression: uncompressed
Data Size: 41091584 Bytes = 40128.50 KiB = 39.19 MiB
Architecture: AArch64
OS: Linux
Load Address: 0xffffff01
Entry Point: 0xffffff01
Hash algo: sha256
Hash value: 73abc16de532b1333c13857a47a8bbb49cd877f46a2c1118e307ad80f8e1b24f
Image 2 (ramdisk)
Description: unavailable
Created: Tue Apr 9 17:00:20 2024
Type: RAMDisk Image
Compression: uncompressed
Data Size: 37701100 Bytes = 36817.48 KiB = 35.95 MiB
Architecture: AArch64
OS: Linux
Load Address: 0xffffff02
Entry Point: unavailable
Hash algo: sha256
Hash value: 090d5810e26f5936642da44d87d600d6461bb26ed682d41f195720a6bf58c61f
Image 3 (resource)
Description: unavailable
Created: Tue Apr 9 17:00:20 2024
Type: Multi-File Image
Compression: uncompressed
Data Size: 545792 Bytes = 533.00 KiB = 0.52 MiB
Hash algo: sha256
Hash value: 945b7d02612dd55a33a01d7af4cd3d066442ccee95cd0d08893ff01887b23fe6
Default Configuration: 'conf'
Configuration 0 (conf)
Description: unavailable
Kernel: kernel
Init Ramdisk: ramdisk
FDT: fdt
done.
you take 0:03.81 to build recovery
====Build recovery ok!====
Running build_recovery succeeded.
Skipping build_ramboot for missing configs: RK_CFG_RAMBOOT.
Running build_all succeeded.
/usr/bin/fakeroot
Source buildroot/build/envsetup.sh
Top of tree: /home/linux/plat/rk3588/sdk
make: Entering directory '/home/linux/plat/rk3588/sdk/buildroot'
GEN /home/linux/plat/rk3588/sdk/buildroot/output/firefly_rk3588/Makefile
/home/linux/plat/rk3588/sdk/buildroot/build/parse_defconfig.sh /home/linux/plat/rk3588/sdk/buildroot/configs/firefly_rk3588_defconfig /home/linux/plat/rk3588/sdk/buildroot/output/firefly_rk3588/.config.in
Parsing defconfig: /home/linux/plat/rk3588/sdk/buildroot/configs/firefly_rk3588_defconfig
Using /home/linux/plat/rk3588/sdk/buildroot/configs/firefly_rk3588_defconfig as base
#
# merged configuration written to /home/linux/plat/rk3588/sdk/buildroot/output/firefly_rk3588/.config.in (needs make)
#
BR2_DEFCONFIG='' KCONFIG_AUTOCONFIG=/home/linux/plat/rk3588/sdk/buildroot/output/firefly_rk3588/build/buildroot-config/auto.conf KCONFIG_AUTOHEADER=/home/linux/plat/rk3588/sdk/buildroot/output/firefly_rk3588/build/buildroot-config/autoconf.h KCONFIG_TRISTATE=/home/linux/plat/rk3588/sdk/buildroot/output/firefly_rk3588/build/buildroot-config/tristate.config BR2_CONFIG=/home/linux/plat/rk3588/sdk/buildroot/output/firefly_rk3588/.config HOST_GCC_VERSION="7" BASE_DIR=/home/linux/plat/rk3588/sdk/buildroot/output/firefly_rk3588 SKIP_LEGACY= CUSTOM_KERNEL_VERSION="5.10" BR2_DEFCONFIG=/home/linux/plat/rk3588/sdk/buildroot/configs/firefly_rk3588_defconfig /home/linux/plat/rk3588/sdk/buildroot/output/firefly_rk3588/build/buildroot-config/conf --defconfig=/home/linux/plat/rk3588/sdk/buildroot/output/firefly_rk3588/.config.in Config.in
#
# configuration written to /home/linux/plat/rk3588/sdk/buildroot/output/firefly_rk3588/.config
#
make: Leaving directory '/home/linux/plat/rk3588/sdk/buildroot'
Linking parameter.txt from /home/linux/plat/rk3588/sdk/device/rockchip/rk3588/parameter-ubuntu-fit.txt...
Done linking parameter.txt
Linking uboot.img from /home/linux/plat/rk3588/sdk/u-boot/uboot.img...
Done linking uboot.img
Linking MiniLoaderAll.bin from /home/linux/plat/rk3588/sdk/u-boot/rk3588_spl_loader_v1.13.112.bin...
Done linking MiniLoaderAll.bin
Linking boot.img from /home/linux/plat/rk3588/sdk/kernel/extboot.img...
Done linking boot.img
Linking misc.img from /home/linux/plat/rk3588/sdk/device/rockchip/rockimg/misc.img...
Fallback to /home/linux/plat/rk3588/sdk/device/rockchip/rockimg/wipe_all-misc.img
Done linking misc.img
Linking rootfs.img from /home/linux/plat/rk3588/sdk/rockdev/rootfs.ext4...
Done linking rootfs.img
Images in /home/linux/plat/rk3588/sdk/rockdev are ready!
Make image ok!
File name is AIO-3588Q-BE45-A1_Buildroot_v1.3.0b_240409.img
Rename the file? [N|y]y
Enter new file name: AIO-3588Q-BE45-A1_Buildroot_v1.3.0b_240409.img
Make update.img
start to make update.img...
Android Firmware Package Tool v2.2
------ PACKAGE ------
Add file: ./package-file
package-file,Add file: ./package-file done,offset=0x800,size=0xf4,userspace=0x1
Add file: ./Image/MiniLoaderAll.bin
bootloader,Add file: ./Image/MiniLoaderAll.bin done,offset=0x1000,size=0x731c0,userspace=0xe7
Add file: ./Image/parameter.txt
parameter,Add file: ./Image/parameter.txt done,offset=0x74800,size=0x1e2,userspace=0x1,flash_address=0x00000000
Add file: ./Image/uboot.img
uboot,Add file: ./Image/uboot.img done,offset=0x75000,size=0x800000,userspace=0x1000,flash_address=0x00004000
Add file: ./Image/misc.img
misc,Add file: ./Image/misc.img done,offset=0x875000,size=0xc000,userspace=0x18,flash_address=0x00008000
Add file: ./Image/boot.img
boot,Add file: ./Image/boot.img done,offset=0x881000,size=0x10000000,userspace=0x20000,flash_address=0x0000a000
Add file: ./Image/recovery.img
recovery,Add file: ./Image/recovery.img done,offset=0x10881000,size=0x4bf0c00,userspace=0x97e2,flash_address=0x0008a000
Add file: ./Image/rootfs.img
rootfs,Add file: ./Image/rootfs.img done,offset=0x15472000,size=0x2e800000,userspace=0x5d000,flash_address=0x000da000
Add CRC...
Make firmware OK!
------ OK ------
********rkImageMaker ver 2.23********
Generating new image, please wait...
Writing head info...
Writing boot file...
Writing firmware...
Generating MD5 data...
MD5 data generated successfully!
New image generated successfully!
Making ./Image/update.img OK.
Make update image ok!
/home/linux/plat/rk3588/sdk/rockdev/pack/AIO-3588Q-BE45-A1_Buildroot_v1.3.0b_240409.img
Running build_updateimg succeeded.
可以看到成功生成固件:AIO-3588Q-BE45-A1_Buildroot_v1.3.0b_240409.img
编译过程遇到一些了问题,在下面的编译问题章节部分描述。
部分编译
编译 u-boot
./build.sh uboot
编译 kernel
./build.sh extboot
编译 recovery
./build.sh recovery
编译 buildroot
./build.sh rootfs
更新各部分镜像链接到 rockdev/ 目录:
./mkfirmware.sh
打包固件,生成的完整固件会保存到 rockdev/pack/ 目录。
./build.sh updateimg
单独编译buildroot
进入sdk/buildroot目录
坏境变量的设定
source ./envsetup.sh (config_name)
config_name 可以source ./envsetup.sh列出来,选择具体平台编译。
编译
make menuconfig
make
编译问题
kernel编译报错
SDK仓库问题
按wiki同步SDK代码,编译uboot成功,编译内核报错如下。
反复确认了Ubuntu环境,该装的软件都装好了,还是报错。切换到之前的tag,编译不报这个错了,但还是报其他错误。所以判断和SDK有关系,和环境没关系。
.config:7527:warning: override: reassigning to symbol IP6_NF_RAW
.config:7529:warning: override: reassigning to symbol IP6_NF_NAT
.config:7530:warning: override: reassigning to symbol IP6_NF_TARGET_MASQUERADE
#
# configuration written to .config
#
SYNC include/config/auto.conf.cmd
CC scripts/mod/devicetable-offsets.s
In file included from ./include/linux/types.h:6,
from ./include/linux/mod_devicetable.h:12,
from scripts/mod/devicetable-offsets.c:3:
./include/uapi/linux/types.h:5:10: fatal error: asm/types.h: No such file or directory
5 | #include <asm/types.h>
| ^~~~~~~~~~~~~
compilation terminated.
scripts/Makefile.build:117: recipe for target 'scripts/mod/devicetable-offsets.s' failed
make[2]: *** [scripts/mod/devicetable-offsets.s] Error 1
Makefile:1492: recipe for target 'scripts_mod' failed
make[1]: *** [scripts_mod] Error 2
arch/arm64/Makefile:214: recipe for target 'rk3588-firefly-aio-3588q-mipi101-M101014-BE45-A1.img' failed
make: *** [rk3588-firefly-aio-3588q-mipi101-M101014-BE45-A1.img] Error 2
ERROR: Running build_extboot failed!
ERROR: exit code 2 from line 785:
make ARCH=$RK_ARCH $RK_KERNEL_DTS.img -j$RK_JOBS
【问题解决】使用repo指令checkout到最新的tag(rk3588/linux_release_v1.3.0b),编译成功了。
repo forall -c git checkout rk3588/linux_release_v1.3.0b
按wiki操作,同步 SDK,按道理就是最新代码,为什么还要checkout一下了。这个可能是Firefly的git仓库问题,Firefly论坛上也有好几个人遇到同样的问题。
linux@linux-virtual-machine:~/plat/rk3588/sdk$ repo forall -c git log
... A new repo command ( 1.25) is available.
... You should upgrade soon:
cp /home/linux/plat/rk3588/sdk/.repo/repo/repo /usr/bin/repo
commit 6a5b5349b13fe91b9537aa6472a1a51c40c1af34 (HEAD -> firefly, tag: rk3588/linux_release_v1.3.0b, m/master)
Merge: dd5644d 9a2997e
Author: lvsx <lvsx@t-chip.com.cn>
Date: Tue Apr 25 17:32:10 2023 +0800
Merge branch 'rk3588/rockchip' into rk3588/firefly
commit 9a2997e381072c998729783df0a9586a8b086580
Author: Jeffy Chen <jeffy.chen@rock-chips.com>
Date: Tue Nov 8 11:17:05 2022 +0800
Drop S50launcher
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
Change-Id: I7f41a73921d1b00dfc59c2acd5250ad33e9fa8e5
commit dd5644dcdbcfa99569c52681efcee2f8b033ae8a (tag: rk3588/linux_release_v1.0.6c)
Author: Caesar Wang <wxt@rock-chips.com>
Date: Fri Feb 25 17:40:20 2022 +0800
copyright: add LICENSE
Signed-off-by: Caesar Wang <wxt@rock-chips.com>
Change-Id: I7f672c55124c01752343c759362cb554cd8dc13a
commit a17ceb273aaa6f5c9aaf9f570d4ee56e28135c9d
Author: Jeffy Chen <jeffy.chen@rock-chips.com>
Date: Tue Jan 26 17:58:24 2021 +0800
No rule to make target ‘drivers/spi/spi-wk2xxx.o’, needed by ‘drivers/spi/built-in.a’. Stop
【错误详细信息】
AR drivers/auxdisplay/built-in.a
make[3]: *** No rule to make target 'drivers/spi/spi-wk2xxx.o', needed by 'drivers/spi/built-in.a'. Stop.
make[3]: *** Waiting for unfinished jobs....
scripts/Makefile.build:516: recipe for target 'drivers/spi' failed
make[2]: *** [drivers/spi] Error 2
Makefile:1939: recipe for target 'drivers' failed
make[1]: *** [drivers] Error 2
make[1]: *** Waiting for unfinished jobs....
arch/arm64/Makefile:214: recipe for target 'rk3588-firefly-aio-3588q-mipi101-M101014-BE45-A1.img' failed
make: *** [rk3588-firefly-aio-3588q-mipi101-M101014-BE45-A1.img] Error 2
【问题分析】没有去改任何地方,为什么报这个错误了,还是怀疑本身拉下来的代码问题
【问题解决】到sdk 的kernel路径运行git reset --hard 解决了
参考firfly的论坛:https://bbs.t-firefly.com/forum.php?mod=viewthread&tid=3675
看来遇到类似问题的也很多。
cd path to sdk/kernel/
git reset --hard
环境变量引起的问题
python: error while loading shared libraries: libpython3.10.so.1.0: cannot open shared object file: No such file or directory
【错误详细信息】
python: error while loading shared libraries: libpython3.10.so.1.0: cannot open shared object file: No such file or directory
SYNC include/config/auto.conf.cmd
python: error while loading shared libraries: libpython3.10.so.1.0: cannot open shared object file: No such file or directory
python: error while loading shared libraries: libpython3.10.so.1.0: cannot open shared object file: No such file or directory
python: error while loading shared libraries: libpython3.10.so.1.0: cannot open shared object file: No such file or directory
python: error while loading shared libraries: libpython3.10.so.1.0: cannot open shared object file: No such file or directory
python: error while loading shared libraries: libpython3.10.so.1.0: cannot open shared object file: No such file or directory
init/Kconfig:33:warning: 'GCC_VERSION': number is invalid
arch/arm64/Makefile:44: Detected assembler with broken .inst; disassembly will be unreliable
python: error while loading shared libraries: libpython3.10.so.1.0: cannot open shared object file: No such file or directory
arch/arm64/Makefile:44: Detected assembler with broken .inst; disassembly will be unreliable
python: error while loading shared libraries: libpython3.10.so.1.0: cannot open shared object file: No such file or directory
CC scripts/mod/empty.o
【问题分析】提示python错误,系统python是已经装好的,输入python也是有这个命令的,猜测可能是环境变量设置不对。
linux@linux-virtual-machine:/etc/profile.d$ which python
/home/linux/toolchain/host/bin/python
输入上面的命令,python的路径不是 /usr/bin/python 而是上面的路径,确实是环境变量设置问题。因为在设置Qt环境变量时,在/etc/profile.d 增加了如下的文件host_qtEnv.sh。内容如下,增加了环境变量/home/linux/toolchain/host/bin,这个目录下又有python相关命令,所以没从系统目录去找python,造成出错。
#QTPATH="/opt/firefly_qt5.12.2_arm64_18.04/host"
QTPATH="/home/linux/toolchain/host"
LD_LIBRARY_PATH=$QTPATH/lib:$LD_LIBRARY_PATH
LIBRARY_PATH=$QTPATH/lib:$LIBRARY_PATH
C_INCLUDE_PATH=$QTPATH/include:$C_INCLUDE_PATH
CPLUS_INCLUDE_PATH=$QTPATH/include:$CPLUS_INCLUDE_PATH
PATH=$QTPATH/bin:$PATH
PKG_CONFIG_PATH=$QTPATH/lib/pkgconfig:$PKG_CONFIG_PATH
export LD_LIBRAY_PATH
export LIBRAY_PATH
export C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH
export PKG_CONFIG_PATH
export PATH
export PATH=$PATH:/home/linux/toolchain/host/bin
【问题解决】把host_qtEnv.sh 从/etc/profile.d目录移除,也可以把/home/linux/toolchain/host/bin下面的python相关的删掉。
which python 可以看到路径已经改变了,编译不python相关错误了。
linux@linux-virtual-machine:~$ which python
/usr/bin/python
buildroot文件系统编译报错
在SDK里用./build.sh rootfs 编译buildroot文件系统,陆续有报错。SDK需要联网下载软件包,软件包的资源又在github上。
根据错误提示,按如下操作,可以继续下载软件包。
sudo sed -i '$a 43.154.68.204tkgithub.com' /etc/hosts
sudo sed -i '$a 43.155.83.75traw.kgithub.com objects.githubusercontent.kgithub.com' /etc/hosts
编译到后面下载其他包的时候,一直失败,报错如下。后续板子先用Ubuntu系统进行操作。
host-meson 1.2.0 Downloading
Unable to access github.com! Trying kgithub now...
Oops! The kgithub is down!
【问题解决】对于下载失败的包,联网下载的同时,需要单独去github下载,再拷贝到虚拟机中解压,就能把下载失败的问题解决。
build_wifibt编译失败问题
【错误详细信息】
make: Leaving directory ‘/home/linux/plat/rk3588/sdk/external/rkwifibt-app’
chmod +x tools
chmod: cannot access ‘/home/linux/plat/rk3588/sdk/external/rkwifibt/src/rk_wifibt_init’: No such file or directory
ERROR: Running build_wifibt failed!
ERROR: exit code 1 from line 1101:
chmod 755 $RKWIFIBT/src/rk_wifibt_init
【问题解决】看了SDK里确实没有 sdk/external/rkwifibt/src这个文件夹。目前没有用到wifibt,在build.sh里屏蔽编译这个模块的内容。
function build_wifibt(){
return 0 #增加这行,在shell函数里直接返回,不进行下面的编译
build_check_cross_compile
case $RK_ARCH in
编译权限问题
wiki上说了需要普通权限进行编译,同事用了sudo编译后,再用普通权限编译就会出问题。
修改权限:sudo chown linux:linux ./* -R
修改SDK里文件权限再次编译,使用./build.sh extboot 单独编译内核,编译成功。