rk3588的SDK编译踩坑记录

概述

  • 开发板

基于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 单独编译内核,编译成功。

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在RK3588平台上进行Android SDK编译,你可以按照以下步骤进行操作: 1. 首先,获取RK3588的Android源代码。你可以从Rockchip官方的开发者网站或者其他可靠的来源获取到源代码。 2. 安装所需的编译工具链。RK3588平台使用ARM架构,因此你需要安装相应的ARM交叉编译工具链。你可以从ARM官方网站下载并安装适用于你的操作系统的工具链。 3. 设置环境变量。将编译工具链的路径添加到系统的环境变量中,以便能够在终端中直接使用交叉编译工具。 4. 进入Android源代码目录,并运行以下命令初始化编译环境: ``` source build/envsetup.sh ``` 5. 选择要编译的目标设备。RK3588平台有多个设备配置文件可供选择,你可以使用以下命令选择其中一个: ``` lunch ``` 6. 配置编译选项。你可以通过运行以下命令来配置编译选项: ``` make menuconfig ``` 在这个菜单中,你可以选择要编译的模块、启用或禁用特定功能等。 7. 开始编译。运行以下命令开始编译Android SDK: ``` make -j4 ``` 这里的`-j4`表示使用4个线程进行编译,你可以根据你的系统配置进行调整。 8. 等待编译完成。编译过程可能需要一些时间,具体时间取决于你的系统性能和编译选项。 9. 编译完成后,在输出目录中可以找到生成的Android SDK镜像文件。你可以把这个镜像烧录到RK3588设备上进行测试和使用。 请注意,以上步骤仅提供了一个大致的编译流程,具体步骤可能因为不同的Android源代码版本和开发环境而有所差异。在实际操作中,你可能需要参考更详细的文档或向相关的开发者社区寻求帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值