WSL2 + RK3568 SDK 编译踩坑笔记
💻 基础配置
项目 | 配置 |
---|---|
Ubuntu版本 | 22.04 |
CPU核心 | 20 |
内存 | 8G |
交换空间 | 4G |
⚠️ 以下所有问题基于如下前提:
✅ 依赖已安装,dl 包已解压,SDK 已完整同步
🚨 错误发生在执行build.sh all
过程中
🧨 问题列表与解决方案
❌ 问题1:缺失 Python2
ERROR: No python2
ERROR: Running build_uboot failed!
...
✅ 解决方法:
sudo apt update
sudo apt install python2
❌ 问题2:.config
文件缺失,Buildroot 无法构建
cp: cannot stat '.../.config': No such file or directory
...
make: *** No rule to make target '.../Makefile'. Stop.
✅ 解决方法:
cd /path/to/SDK/.../buildroot
make O=output/rockchip_rk3568 rockchip_rk3568_defconfig
ls output/rockchip_rk3568/
# 应包含:.config、.br-external.mk、Makefile 等文件
❌ 问题3:Perl 构建崩溃(Segfault)+ strtod
报错
✳️ 该问题是 Perl 5.26.1 的已知 bug,GCC 10+ 编译器更易触发。
错误日志(节选):
Segmentation fault (core dumped)
Failed to build miniperl. Please run make minitest
✅ 方法一:添加补丁(部分环境失败)
- 创建补丁文件:
cd buildroot/package/perl
mkdir -p patches
nano patches/0001-fix-null-pointer-strtod.patch
- 补丁内容(点击展开):
From 1e7c716c0b7c2e6d1b0e8c7e8c0a9f9b9c8d9e0f Mon Sep 17 00:00:00 2001
From: Karl Williamson <khw@cpan.org>
Date: Sat, 20 Jul 2019 13:48:43 -0600
Subject: [PATCH] Avoid strtod with NULL in my_atof_infnan()This function is called with a NULL when called from toke.c when there is
an error. This caused a coredump on some platforms.Signed-off-by: Your Name <your.email@example.com>
---numeric.c | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)diff --git a/numeric.c b/numeric.c
index 1f7c0f0..a7e1a2a 100644
--- a/numeric.c
+++ b/numeric.c
@@ -1300,7 +1300,7 @@ S_my_atof_infnan(pTHX_ const char * const s, const STRLEN len, NV *value)if (len) {/* some sort of garbage, but maybe number in string */*value = my_atof(s);
- } else {
+ } else if (s) {char *endp;const char * const fake = s + len;nv = Perl_strtod(fake, &endp);
--
2.25.1
- 清理并重编:
make O=output/rockchip_rk3568 host-perl-dirclean
✅ 方法二:升级 Perl
参考:CSDN 博客链接
-
替换
perl.mk
与perl.hash
-
下载源包:
-
perl-cross-1.6.2
-
perl-5.40.0
-
mv ./perl.mk ~/perl_bk.mk
mv ./perl.hash ~/perl_bk.hash
nano ./perl.mk
nano ./perl.hash
✅ 将新版包放入
dl
目录
❌ 问题4:live555 版本过旧导致冲突(gettimeofday 重定义)
gettimeofday(&timeNow, NULL);
candidate: 'int gettimeofday(timeval*, int*)'
✅ 解决方法:更换 live555 至稳定版本 2023.01.19
# 修改版本
sed -i 's/LIVE555_VERSION = .*/LIVE555_VERSION = 2023.01.19/' package/live555/live555.mk
sed -i 's|LIVE555_SITE = .*|LIVE555_SITE = https://download.videolan.org/pub/contrib/live555|' package/live555/live555.mk
sed -i 's/LIVE555_SOURCE = .*/LIVE555_SOURCE = live.$(LIVE555_VERSION).tar.gz/' package/live555/live555.mk# 删除旧版本
rm -rf dl/live.20*
rm -rf output/rockchip_rk3568/build/live555-*
rm package/live555/*.patch
❌ 问题5:缺失 libasan.so.5.0.0
/usr/bin/install: cannot stat '.../libasan.so.5.0.0': No such file or directory
✅ 解决方法:
sudo apt update
sudo apt install rpm2cpiowget https://repo.almalinux.org/almalinux/8/BaseOS/aarch64/os/Packages/libasan-8.5.0-24.el8_10.alma.1.aarch64.rpm ~rpm2cpio libasan-8.5.0-24.el8_10.alma.1.aarch64.rpm | cpio -idmv --directory=/path/to/SDK/.../sysroot/lib/
❌ 问题6:库架构错误(libod_share.so 是 ARM 而非 AArch64)
ERROR: architecture for "/usr/lib/libod_share.so" is "ARM", should be "AArch64"
✅ 解决方法:
cd buildroot
make menuconfig
📌 定位到:
Target packages
└── Rockchip BSP packages└── rockchip common algorithm└── target platform[ ] Enable 32bit build ← 取消[X] Enable 64bit build ← 勾选
🔒 可选保存配置:
make savedefconfig
❌ 问题7:fwriter_buffer 重复定义(额外记录)
参考文章:CSDN 博客
❌ 问题8:recovery 构建失败(缺失 .br-external.mk
)
make: *** No rule to make target '.../.br-external.mk'. Stop.
✅ 解决步骤:
- 手动创建目录结构:
mkdir -p output/rockchip_rk356x_recovery
- 生成配置:
make rockchip_rk356x_recovery_defconfig O=output/rockchip_rk356x_recovery
- 创建空文件并授权:
touch output/rockchip_rk356x_recovery/.br-external.mk
chmod a+w output/rockchip_rk356x_recovery/.br-external.mk
- 单独构建 recovery:
make O=output/rockchip_rk356x_recovery