当前位置: 首页 > article >正文

在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天大部分时间都花在了查找和解决这些构建问题上。希望这篇记录能帮助其他开发者节省宝贵的时间。

相关文章:

在WSL2 Ubuntu 22.04上搞定RK3568 SDK编译:我遇到的8个坑和填坑方法

在WSL2 Ubuntu 22.04上搞定RK3568 SDK编译:我遇到的8个坑和填坑方法 作为一名长期在Windows环境下工作的嵌入式开发者,第一次尝试在WSL2中编译RK3568 SDK的经历简直像是一场噩梦。从环境配置到最终构建成功,我踩遍了几乎所有可能的坑。这篇文…...

图结构AI Agent记忆机制深度解析:小白/程序员必备,收藏学习大模型前沿技术!

图结构AI Agent记忆机制深度解析:小白/程序员必备,收藏学习大模型前沿技术! 本文深入解析了基于图结构的AI Agent记忆机制,揭示了LLM驱动AI Agent面临的三大局限:知识截断、工具 incompetence 和性能饱和。文章强调记…...

通用GUI编程技术——Win32 原生编程实战(十八)——GDI 设备上下文(HDC)完全指南

通用GUI编程技术——Win32 原生编程实战(十八)——GDI 设备上下文(HDC)完全指南 前面一系列文章我们聊了对话框、控件、资源这些内容,我们的窗口已经能够显示各种控件了。但你可能已经发现了一个问题:我们所…...

IDEA 2023.3 配置 JavaWeb 项目完整流程:从新建到打包 War 的保姆级避坑指南

IDEA 2023.3 配置 JavaWeb 项目完整流程:从新建到打包 War 的保姆级避坑指南 作为一名长期使用 IntelliJ IDEA 进行 JavaWeb 开发的工程师,我深知在配置项目时可能遇到的各种"坑"。特别是对于刚接触 IDEA 的新手来说,从项目创建到最…...

OpenSpec 生成文件说明

proposal.md —— 为什么做、做什么(产品/范围) Why:要解决什么问题、机会是什么。What Changes:会新增/改掉/删掉哪些能力,有没有 BREAKING。Capabilities:会动到哪些能力名(对应后面 specs/&l…...

电子小白之二极管

很多年前我第一次看到电路图上各种二极管符号时,心里只有一个想法:这玩意儿到底干嘛用的?硬件部门同事告诉我一句话,瞬间就通了: 正向导通,反向截止;整流防反,稳压发光。 今天就用最…...

云服务器购买怎么选?2026云服务器优惠与租赁指南

在AI创作、3D渲染、远程办公快速发展的今天,「云服务器购买」「云服务器租赁」已经成为越来越多个人和企业的刚需。但面对复杂的配置和价格体系,很多人都会问:👉 到底怎么选最划算? 👉 有没有长期稳定又有“…...

DBA_RECYCLEBIN purge指定日期前的表

SummaryHow to purge DBA_RECYCLBIN for objects older than x days/minutes? or do we have RECYCLEBIN RETENTION feature or truncate recyclebin ?--------------------------------------------------------------------------------------DBA_RECYCLEBIN has a column …...

AI 模型推理框架性能分析与对比

AI模型推理框架性能分析与对比 随着人工智能技术的快速发展,AI模型推理框架成为支撑各类应用落地的核心工具。无论是计算机视觉、自然语言处理还是推荐系统,高效的推理框架直接影响模型的响应速度、资源占用和部署成本。本文将从多个维度对比主流AI推理…...

Go语言的context.WithCancel取消信号传播与资源清理在分布式系统中的协调

Go语言的context.WithCancel取消信号传播与资源清理在分布式系统中的协调 在分布式系统中,任务的取消与资源清理是确保系统稳定性和高效性的关键挑战。Go语言通过context包提供了优雅的解决方案,尤其是context.WithCancel机制,能够实现跨组件…...

MxRadioRF2xx库:ARM Mbed平台RF2xx射频驱动开发指南

1. MxRadioRF2xx 库概述 MxRadioRF2xx 是一个专为 ARM Mbed OS 平台设计的 Atmel(现 Microchip)RF2xx 系列射频收发器驱动库。该库并非对底层寄存器操作的简单封装,而是面向嵌入式无线应用开发者的工程化抽象层,其核心目标是&…...

AIGC时代,程序员会被取代吗?我的看法与行动建议

AIGC时代,程序员会被取代吗?我的看法与行动建议 随着AI生成内容(AIGC)技术的迅猛发展,许多人开始担忧:程序员这一职业是否会被AI取代?从代码生成工具GitHub Copilot到对话式编程助手ChatGPT&am…...

深度学习中的优化器:原理与实践

深度学习中的优化器:原理与实践 一、背景与动机 在深度学习中,优化器是模型训练的核心组件,它决定了模型参数如何根据损失函数的梯度进行更新。选择合适的优化器对于模型的训练速度和最终性能至关重要。本文将深入探讨各种优化器的核心原理、…...

深度解析Internet Archive下载器:数字图书馆资源获取的完整方案

深度解析Internet Archive下载器:数字图书馆资源获取的完整方案 【免费下载链接】internet_archive_downloader A chrome/firefox extension that download books from Internet Archive(archive.org) and HathiTrust Digital Library (hathitrust.org) 项目地址:…...

feishu2md:飞书文档批量下载与Markdown转换解决方案

feishu2md:飞书文档批量下载与Markdown转换解决方案 【免费下载链接】feishu2md 一键命令下载飞书文档为 Markdown 项目地址: https://gitcode.com/gh_mirrors/fe/feishu2md 在团队协作和知识管理场景中,飞书文档已成为许多组织的核心工具。然而&…...

C++的std--ranges算法自定义比较器与等价关系在集合操作中的运用

C20引入的std::ranges库为算法操作带来了革命性改进,其中自定义比较器与等价关系的灵活运用,显著提升了集合操作的表达能力。通过精确控制元素间的比较逻辑,开发者能够实现更复杂的业务需求,例如处理自定义对象集合或实现非标准排…...

OpenClaw操作录制:ollama-QwQ-32B学习人工流程生成自动化脚本

OpenClaw操作录制:ollama-QwQ-32B学习人工流程生成自动化脚本 1. 为什么需要操作录制功能 上周我在整理月度运营报告时,突然意识到自己正在重复第7次执行完全相同的操作流程:打开三个数据源表格→复制特定列→粘贴到汇总表→生成折线图→导…...

LangChain4j vs Spring AI:Java AI 框架技术选型深度对比与生产落地指南

LangChain4j vs Spring AI:Java AI 框架技术选型深度对比与生产落地指南 摘要:当 Java 团队建设 AI 应用时,真正困难的通常不是“能否调通模型”,而是“如何把 Prompt、RAG、工具调用、可观测性、限流熔断、灰度发布、权限隔离与业务系统稳定地耦合起来”。本文不再停留在 …...

会用AI的人,早已拉开职场差距!全岗位工作范式重构进行时

AI深度融入职场,正在改写工作的底层逻辑,会用AI的从业者,已在工作效率与职业发展上形成明显优势。从开发人员的研发流程,到方案人员的工作模式,再到各行各业的基础岗位,AI不再只是简单的效率工具&#xff0…...

大模型私有化不是选型,是生存!Python工程师必须在Q3前掌握的5类国产化适配方案,否则明年项目全卡审批

第一章:大模型私有化是Python工程师的生存分水岭当企业开始将大语言模型从公有云API转向本地GPU集群部署,Python工程师的角色正经历一次静默但深刻的重构——不再只是调用requests.post()封装接口,而是要亲手构建模型加载、推理服务、权限控制…...

中国AI模型调用量领跑全球:成本与开源优势塑造竞争新范式

当前,全球人工智能(AI)领域的竞争正经历着深刻变革。据全球最大AI模型API聚合平台OpenRouter的最新监测数据,中国AI大模型的周调用量已连续数周实现对美国的稳定且显著的超越,并在特定时期内包揽了全球调用量排行榜的前…...

从‘偏差-方差’到一行代码:用NumPy/PyTorch五步实现GAE,附PPO实战避坑点

从‘偏差-方差’到一行代码:用NumPy/PyTorch五步实现GAE,附PPO实战避坑点 强化学习中的策略优化常常面临一个核心挑战:如何准确评估动作的价值?广义优势估计(GAE)通过巧妙平衡偏差与方差,成为PP…...

Mojo+Python混合部署案例深度拆解(从Jupyter到生产环境的无缝迁移全路径)

第一章:MojoPython混合部署案例深度拆解(从Jupyter到生产环境的无缝迁移全路径)Mojo 作为新兴的系统级编程语言,与 Python 生态天然兼容,为机器学习模型从探索性开发(Jupyter Notebook)迈向高吞…...

基于训练RBF神经网络的车速信息时序预测Matlab模型

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...

WWW-万维网

万维网的概念与组成结构万维网(World Wide Web,WWW)是一个分布式的信息存储空间,在这个空间中:一个事物被称为一样 “资源”,并由一个全域 “统一资源定位符”(URL)标识。这些资源通…...

语音播报实时

目录 GPT-SoVITS(强烈推荐) Fish Speech-1.5 GPT-SoVITS(强烈推荐) RVC-Boss/GPT-SoVITS: 1 min voice data can also be used to train a good TTS model! (few shot voice cloning) Fish Speech-1.5 追求极致流畅的实时对话&a…...

从C语言到裸机运行:i.MX6ULL 的 GPIO 控制与编译链接过程分析

引言在嵌入式系统开发中,从高级语言到硬件控制的完整链路涉及编译、链接、寄存器配置等多个环节。本文基于 i.MX6ULL 平台,以 C 语言实现 LED 与蜂鸣器控制为例,系统分析 ARM 裸机开发中的编译工具链使用、链接脚本的作用,以及 GP…...

STM32实现智能酒驾监测系统设计

基于STM32的酒后驾车监测报警系统设计与实现1. 项目概述1.1 系统背景酒后驾车是全球交通事故的主要诱因之一,传统的人工检测方法存在效率低、覆盖范围有限等问题。随着嵌入式系统和物联网技术的发展,智能化的酒精监测系统成为解决这一问题的有效方案。1.…...

2026年3月27日NSSCTF之[SWPUCTF 2021 新生赛]ez_unserialize

[SWPUCTF 2021 新生赛]ez_unserialize 开启环境,进入并查看,可以看到一个动图,选择查看网页源码,得到 看到有隐藏信息,根据隐藏信息可以猜测,可以利用robots协议查看相关信息,访问得到 可以得…...

OpenClaw自动化测试:Qwen3.5-9B在API接口校验中的实战应用

OpenClaw自动化测试:Qwen3.5-9B在API接口校验中的实战应用 1. 为什么选择OpenClaw做接口自动化测试 去年接手一个个人项目时,我遇到了接口测试的痛点:每次后端更新都要手动验证几十个API,不仅耗时还容易遗漏边缘case。尝试过Pos…...