在WSL2 Ubuntu 22.04上搞定RK3568 SDK编译:我遇到的8个坑和填坑方法
在WSL2 Ubuntu 22.04上搞定RK3568 SDK编译我遇到的8个坑和填坑方法作为一名长期在Windows环境下工作的嵌入式开发者第一次尝试在WSL2中编译RK3568 SDK的经历简直像是一场噩梦。从环境配置到最终构建成功我踩遍了几乎所有可能的坑。这篇文章将详细记录这些血泪史希望能帮助后来者少走弯路。1. 环境准备WSL2与Ubuntu 22.04的基础配置在开始RK3568 SDK编译之前确保你的WSL2环境已经正确配置。我使用的是Windows 11专业版WSL2内核版本5.15.90.1Ubuntu 22.04 LTS发行版。关键配置参数分配至少8GB内存给WSL2建议12GB以上交换空间设置为4GB磁盘空间不少于50GB# 查看WSL版本 wsl --list --verbose # 在Ubuntu中检查系统信息 uname -a lsb_release -a free -h注意WSL2默认的内存分配可能不足需要在Windows用户目录下的.wslconfig文件中进行配置[wsl2] memory12GB swap4GB2. 第一个坑Python2缺失导致的构建失败当我满怀信心地执行build.sh all时第一个错误就给了我当头一棒ERROR: No python2 ERROR: Running build_uboot failed!问题分析RK3568的U-Boot构建脚本仍然依赖Python2而Ubuntu 22.04默认不再包含Python2。解决方案sudo apt update sudo apt install python2安装后还需要确保系统能正确找到Python2# 检查Python2是否安装成功 python2 --version # 如果没有/usr/bin/python2可以创建符号链接 sudo ln -s /usr/bin/python2.7 /usr/bin/python23. 第二个坑缺失.config文件的构建错误解决了Python2问题后紧接着遇到的是Buildroot配置问题cp: cannot stat .../.config: No such file or directory make: *** No rule to make target .../Makefile. Stop.问题根源SDK没有正确初始化Buildroot的配置文件导致构建系统找不到必要的配置。详细解决步骤进入SDK的Buildroot目录cd /path/to/SDK/buildroot生成默认配置make Ooutput/rockchip_rk3568 rockchip_rk3568_defconfig验证生成的文件ls output/rockchip_rk3568/应该能看到.config、.br-external.mk和Makefile等关键文件。4. 第三个坑Perl构建时的段错误这是最棘手的问题之一错误日志显示Segmentation fault (core dumped) Failed to build miniperl. Please run make minitest深入分析这个问题源于Perl 5.26.1的一个已知bug在使用GCC 10及以上版本编译时更容易触发。两种解决方案方案一应用补丁创建补丁目录cd buildroot/package/perl mkdir -p patches创建补丁文件0001-fix-null-pointer-strtod.patch内容如下From 1e7c716c0b7c2e6d1b0e8c7e8c0a9f9b9c8d9e0f Mon Sep 17 00:00:00 2001 From: Karl Williamson khwcpan.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.emailexample.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 Ooutput/rockchip_rk3568 host-perl-dirclean方案二升级Perl版本如果补丁不奏效可以考虑升级Perl版本。参考CSDN上的方案下载新版Perl源码包并替换相关文件。5. 第四个坑live555版本过旧导致的时间函数冲突错误信息显示gettimeofday(timeNow, NULL); candidate: int gettimeofday(timeval*, int*)解决方案更新live555到稳定版本# 修改版本号 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/*.patch6. 第五个坑缺失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 rpm2cpio # 下载并解压RPM包 wget 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/7. 第六个坑库架构不匹配错误信息ERROR: architecture for /usr/lib/libod_share.so is ARM, should be AArch64解决方案调整Buildroot配置进入配置菜单cd buildroot make menuconfig导航至Target packages └── Rockchip BSP packages └── rockchip common algorithm └── target platform [ ] Enable 32bit build # 取消选择 [X] Enable 64bit build # 选中保存配置make savedefconfig8. 第七和第八个坑重复定义和缺失.br-external.mk问题7fwriter_buffer重复定义参考CSDN上的解决方案通常需要检查头文件包含关系或修改编译选项。问题8recovery构建失败make: *** No rule to make target .../.br-external.mk. Stop.解决方案手动创建所需文件结构# 创建目录结构 mkdir -p output/rockchip_rk356x_recovery # 生成配置 make rockchip_rk356x_recovery_defconfig Ooutput/rockchip_rk356x_recovery # 创建空文件并设置权限 touch output/rockchip_rk356x_recovery/.br-external.mk chmod aw output/rockchip_rk356x_recovery/.br-external.mk # 单独构建recovery make Ooutput/rockchip_rk356x_recovery经过这一系列问题的解决最终RK3568 SDK在WSL2 Ubuntu 22.04环境下成功编译。整个过程耗时约3天大部分时间都花在了查找和解决这些构建问题上。希望这篇记录能帮助其他开发者节省宝贵的时间。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2456320.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!