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

在Ubuntu 22.04上,用QEMU模拟RISC-V芯片跑起开源鸿蒙轻量系统(保姆级避坑指南)

在Ubuntu 22.04上用QEMU模拟RISC-V芯片跑起开源鸿蒙轻量系统保姆级避坑指南RISC-V架构的兴起为开发者带来了全新的可能性而OpenHarmony作为国产开源操作系统其轻量系统版本尤其适合嵌入式场景。本文将手把手带你完成从零开始的环境搭建到系统运行的完整流程特别针对Ubuntu 22.04环境中的常见问题进行深度解析。1. 环境准备与工具链配置在开始之前我们需要确保开发环境满足基本要求。推荐使用物理机安装的Ubuntu 22.04系统虚拟机虽然可行但可能面临性能瓶颈。系统需要至少8GB内存和50GB可用磁盘空间因为编译过程会产生大量中间文件。首先安装基础依赖包sudo apt update sudo apt install -y git python3.8 python3-pip ninja-build scons gcc-multilib特别注意Python版本的选择——虽然Ubuntu 22.04默认使用Python 3.10但部分工具链对3.8兼容性更好。建议通过update-alternatives管理多版本sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1 sudo update-alternatives --config python3接下来配置QEMU模拟环境。我们需要专门支持RISC-V架构的QEMU版本sudo apt install -y qemu-system-riscv64验证安装是否成功qemu-system-riscv64 --version提示如果遇到图形界面相关错误可能需要额外安装SDL2开发库sudo apt install -y libsdl2-dev2. 获取与准备OpenHarmony源码OpenHarmony的代码管理采用repo工具这是Google为Android项目开发的版本控制工具。首先安装repo命令行工具mkdir ~/bin curl https://storage.googleapis.com/git-repo-downloads/repo ~/bin/repo chmod ax ~/bin/repo将repo加入PATH环境变量echo export PATH$HOME/bin:$PATH ~/.bashrc source ~/.bashrc现在可以开始拉取源代码。建议创建一个专门的工作目录mkdir ~/openharmony cd ~/openharmony初始化仓库并同步代码这里使用4.0 Release版本repo init -u https://gitee.com/openharmony/manifest.git -b OpenHarmony-4.0-Release --no-repo-verify repo sync -c -j8代码同步过程可能需要较长时间取决于网络状况完成后目录结构应包含以下关键部分openharmony/ ├── kernel/liteos_m # 轻量系统内核 ├── device/qemu # QEMU相关配置 ├── vendor # 厂商特定代码 └── build # 构建系统3. 构建工具链配置OpenHarmony使用hbHarmonyOS Build作为构建工具。这个Python工具需要从源码编译安装cd ~/openharmony python3 -m pip install --user build/hb安装完成后常见的两个问题及解决方案hb命令找不到 确保~/.local/bin在PATH中echo export PATH$HOME/.local/bin:$PATH ~/.bashrc source ~/.bashrcPython 3.10兼容性问题 如果遇到cannot import name Mapping错误修改sed -i s/from collections import Mapping/from collections.abc import Mapping/g ~/.local/lib/python3.10/site-packages/prompt_toolkit/styles/from_dict.py验证hb工具是否正常工作hb --version4. 编译与运行轻量系统4.1 配置构建目标在源码根目录执行hb set交互式菜单中选择mini → qemu_riscv_mini_system_demo这会生成ohos_config.json配置文件内容应该类似于{ product: qemu_riscv_mini_system_demo, product_path: device/qemu/riscv_mini_system_demo, device_path: device/qemu/riscv_mini_system_demo, device_company: qemu, target_cpu: riscv, target_os: ohos }4.2 开始编译执行完整构建命令hb build -f编译过程可能需要1-2小时取决于硬件性能成功后会输出类似信息[OHOS INFO] qemu_riscv_mini_system_demo build success [OHOS INFO] cost time: 68:12生成的镜像文件位于out/qemu_riscv_mini_system_demo/OHOS_Image4.3 在QEMU中运行使用以下命令启动模拟器./qemu-run -m 128M -smp 1关键参数说明参数说明-m设置内存大小建议至少128MB-smp设置CPU核心数成功启动后终端会显示OpenHarmony的启动日志最终进入shell提示符OHOS #5. 深度问题排查指南5.1 编译时内存不足如果遇到编译过程中被kill可能是内存不足。解决方案增加swap空间sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile限制并行编译任务数hb build -f -j45.2 QEMU启动黑屏如果QEMU窗口出现但保持黑屏尝试检查SDL2支持sudo apt install -y libsdl2-dev使用非图形模式./qemu-run -nographic5.3 网络功能异常默认配置可能不包含网络支持。要启用网络编译时包含网络组件hb set # 选择qemu_riscv_mini_system_demo_net hb build -f启动时添加网络参数./qemu-run -netdev user,idnet0 -device virtio-net-device,netdevnet06. 进阶开发技巧6.1 调试内核要使用GDB调试内核首先在编译时启用调试符号hb build -f --target debug然后启动QEMU并等待GDB连接./qemu-run -s -S在另一个终端中riscv64-unknown-elf-gdb out/qemu_riscv_mini_system_demo/unstripped/bin/liteos (gdb) target remote :12346.2 添加自定义组件在applications/sample目录下创建新组件my_app/ ├── BUILD.gn └── src └── main.c示例BUILD.gn内容executable(my_app) { sources [ src/main.c ] include_dirs [ //utils/native/lite/include ] cflags [ -Wall ] }然后在产品配置中添加你的组件// device/qemu/riscv_mini_system_demo/config.json { subsystems: [ { subsystem: applications, components: [ { component: sample, features:[] }, { component: my_app, features:[] } ] } ] }6.3 性能优化建议ccache加速编译sudo apt install ccache export USE_CCACHE1 ccache -M 10G选择性编译hb build --build-target my_app并行编译根据CPU核心数调整hb build -f -j$(nproc)在实际项目中我发现最耗时的往往是第一次完整编译。后续增量编译时合理使用ccache可以节省90%以上的编译时间。另外保持源码目录在SSD上也能显著提升构建速度。

相关文章:

在Ubuntu 22.04上,用QEMU模拟RISC-V芯片跑起开源鸿蒙轻量系统(保姆级避坑指南)

在Ubuntu 22.04上,用QEMU模拟RISC-V芯片跑起开源鸿蒙轻量系统(保姆级避坑指南) RISC-V架构的兴起为开发者带来了全新的可能性,而OpenHarmony作为国产开源操作系统,其轻量系统版本尤其适合嵌入式场景。本文将手把手带你…...

保姆级教程:用Python requests库模拟pip重试逻辑,彻底搞懂网络错误处理机制

深入解析Python网络请求重试机制:用requests模拟pip的Retry逻辑 每次看到终端里跳出WARNING: Retrying (Retry(total4...))这样的提示时,你有没有好奇过pip背后究竟是如何处理网络请求失败的?作为Python开发者,理解这套重试机制不…...

如何高效使用智能刷课工具:Autovisor全面实战指南

如何高效使用智能刷课工具:Autovisor全面实战指南 【免费下载链接】Autovisor 2025智慧树刷课脚本 基于Python Playwright的自动化程序 [有免安装版] 项目地址: https://gitcode.com/gh_mirrors/au/Autovisor 在现代在线教育时代,智慧树等平台的课…...

戴尔G15散热控制终极指南:开源AWCC替代方案深度解析

戴尔G15散热控制终极指南:开源AWCC替代方案深度解析 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 还在为戴尔G15笔记本散热性能不足而困扰吗&…...

揭秘CudaText三大高效编辑功能:代码树、多光标与智能查找替换

揭秘CudaText三大高效编辑功能:代码树、多光标与智能查找替换 【免费下载链接】CudaText Cross-platform text editor, written in Free Pascal 项目地址: https://gitcode.com/gh_mirrors/cu/CudaText CudaText作为一款跨平台文本编辑器,凭借其轻…...

Android PDFView性能优化10个技巧:内存管理与渲染效率终极指南

Android PDFView性能优化10个技巧:内存管理与渲染效率终极指南 【免费下载链接】android-pdfview [DEPRECATED] A fast PDF reader component for Android development 项目地址: https://gitcode.com/gh_mirrors/an/android-pdfview Android PDFView是一款专…...

【紧急预警】Laravel 12.1+默认启用OpCache JIT后,AI中间件响应延迟飙升300%?附5行配置回滚+3种兼容性加固方案

更多请点击: https://intelliparadigm.com 第一章:Laravel 12 AI集成性能危机的底层根源与现象复现 当 Laravel 12 引入原生协程支持(基于 Swoole v5.1 或 OpenSwoole)并默认启用异步 HTTP 客户端时,大量开发者在集成…...

终极STL文件缩略图生成工具:3D打印爱好者的文件管理革命

终极STL文件缩略图生成工具:3D打印爱好者的文件管理革命 【免费下载链接】stl-thumb Thumbnail generator for STL files 项目地址: https://gitcode.com/gh_mirrors/st/stl-thumb 想要在文件管理器中快速预览3D打印模型吗?STL文件缩略图生成工具…...

如何用Python脚本实现百度网盘高速下载?完整实战指南

如何用Python脚本实现百度网盘高速下载?完整实战指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 你是不是经常被百度网盘的下载速度折磨?看着几十K…...

Linux 5.19内核新特性解析:ARM64、LoongArch与BIG TCP

1. Linux 5.19版本概述Linux内核5.19版本于2022年7月31日正式发布,这是Linus Torvalds领导下的最后一个5.x系列版本。这个版本最引人注目的特点是Linus本人首次在arm64架构的笔记本电脑上完成了内核发布工作,他使用的是Asahi团队提供的Apple M1设备。这标…...

Python Ursina引擎避坑指南:安装、灰色窗口、实体缩放,新手常踩的5个坑我都帮你填平了

Python Ursina引擎实战避坑指南:从安装异常到模型渲染的深度解决方案 第一次接触Ursina引擎时,我像大多数开发者一样被它简洁的API所吸引——只需几行代码就能创建3D场景。但真正开始项目开发后,各种意想不到的问题接踵而至:安装失…...

BetterGI:3分钟配置终极自动化,让你的原神体验效率提升500%

BetterGI:3分钟配置终极自动化,让你的原神体验效率提升500% 【免费下载链接】better-genshin-impact 📦BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙…...

Open UI5 源代码解析之1157:ElementDesignTimeMetadata.js

源代码仓库: https://github.com/SAP/openui5 源代码位置:src\sap.ui.dt\src\sap\ui\dt\ElementDesignTimeMetadata.js ElementDesignTimeMetadata.js 详细解析 文件定位与核心结论 ElementDesignTimeMetadata.js 位于 src/sap.ui.dt/src/sap/ui/dt 目录下,属于 sap.ui…...

【Unity万人同屏插件】使用手册 保姆级教程 GPU动画 Jobs多线程渲染

【万人同屏插件】已经重构、重磅升级!新版使用手册: 最新版万人同屏插件使用手册https://blog.csdn.net/final5788/article/details/160112516 【跨代升级:万人寻路导航、3D地形Terrain,全新GPUSpine,自动合并网格图集&#xff…...

别再只盯着Log4j了:盘点5种容易被忽略的DNSlog攻击利用场景与排查清单

超越Log4j:DNSlog攻击的五大隐蔽战场与实战防御手册 当大多数安全团队还在为Log4j漏洞疲于奔命时,黑客早已将目光转向更隐蔽的数据外带通道。DNSlog攻击就像网络世界的"暗网快递",利用最基础的域名解析协议,悄无声息地搬…...

如何用LlamaDeploy构建企业级AI系统:核心架构深度解析

如何用LlamaDeploy构建企业级AI系统:核心架构深度解析 【免费下载链接】llama-agents Deploy your agentic worfklows to production 项目地址: https://gitcode.com/gh_mirrors/ll/llama-agents LlamaDeploy是一款强大的企业级AI工作流部署工具,…...

PathLayoutManager实战:打造J20战机飞行轨迹特效

PathLayoutManager实战:打造J20战机飞行轨迹特效 【免费下载链接】PathLayoutManager RecyclerView的LayoutManager,轻松实现各种炫酷、特殊效果,再也不怕产品经理为难! 项目地址: https://gitcode.com/gh_mirrors/pa/PathLayo…...

信奥赛CSP-J复赛集训(DP专题)(4):[USACO11JAN] Profits S

信奥赛CSP-J复赛集训(DP专题)(4):[USACO11JAN] Profits S 题目描述 The cows have opened a new business, and Farmer John wants to see how well they are doing. The business has been running for N (1 <= N <= 100,000) days, and every day i the cows rec…...

JDspyder终极指南:3步实现京东茅台自动化抢购的完整方案

JDspyder终极指南&#xff1a;3步实现京东茅台自动化抢购的完整方案 【免费下载链接】JDspyder 京东预约&抢购脚本&#xff0c;可以自定义商品链接 项目地址: https://gitcode.com/gh_mirrors/jd/JDspyder 你是否在京东抢购茅台时总是慢人一步&#xff1f;面对秒杀时…...

信奥赛CSP-J复赛集训(DP专题)(3):魔族密码

信奥赛CSP-J复赛集训(DP专题)(3):魔族密码 题目背景 风之子刚走进他的考场,就…… 花花:当当当当~~偶是魅力女皇——花花!!^^(华丽出场,礼炮,鲜花) 风之子:我呕……(杀死人的眼神)快说题目!否则……-_-### 题目描述 花花:……咦好冷我们现在要解决的是魔…...

BepInEx框架深度解析:游戏运行时注入的架构哲学与实践范式

BepInEx框架深度解析&#xff1a;游戏运行时注入的架构哲学与实践范式 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx不仅仅是一个Unity/XNA游戏的插件框架&#xff0c;它…...

飞书文档批量迁移终极方案:3步完成企业知识库完整备份

飞书文档批量迁移终极方案&#xff1a;3步完成企业知识库完整备份 【免费下载链接】feishu-doc-export 飞书文档导出服务 项目地址: https://gitcode.com/gh_mirrors/fe/feishu-doc-export 当企业决定从飞书迁移到其他协作平台时&#xff0c;技术团队面临的最大挑战是什…...

BetterGI:3分钟解锁原神自动化,告别重复劳动的智能助手

BetterGI&#xff1a;3分钟解锁原神自动化&#xff0c;告别重复劳动的智能助手 【免费下载链接】better-genshin-impact &#x1f4e6;BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙 | …...

Arylic H50无线Hi-Fi放大器评测:高解析音频与多房间体验

1. Arylic H50无线立体声放大器深度评测作为一名音响设备评测博主&#xff0c;我最近花了三周时间深度体验了Arylic H50这款支持TIDAL Music的无线立体声放大器。这款设备最吸引我的地方在于它同时兼顾了无线流媒体的便利性和Hi-Fi级别的音质表现。相比市面上同价位的产品&…...

从零开始使用 Python 在五分钟内接入 Taotoken 并完成第一次对话

从零开始使用 Python 在五分钟内接入 Taotoken 并完成第一次对话 1. 环境准备 开始前请确保已安装 Python 3.7 或更高版本。推荐使用虚拟环境管理依赖&#xff0c;可通过以下命令创建并激活虚拟环境&#xff1a; python -m venv taotoken-env source taotoken-env/bin/activ…...

leetcode:最小覆盖字符串

1笨方法对于算法题目&#xff0c;自己能想到的往往是最基础的笨方法。代码如下&#xff1a;如果t的长度是len1&#xff0c;s的长度是len2&#xff0c;那么最小窗口是len1&#xff0c;最大窗口是len2。所以可以从len1到len2&#xff0c;遍历窗口大小&#xff0c;对于每个窗口大小…...

如何解锁NVIDIA显卡隐藏性能:NVIDIA Profile Inspector完整配置指南

如何解锁NVIDIA显卡隐藏性能&#xff1a;NVIDIA Profile Inspector完整配置指南 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 你是否遇到过游戏画面撕裂、帧率不稳或输入延迟过高的问题&#xff1f;N…...

PowerShell 第11章:过滤和比较(下)Where-Object、迭代命令行模型、$_作用域与实战练习

&#x1f525;个人主页&#xff1a;杨利杰YJlio❄️个人专栏&#xff1a;《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》 《那些年未解决的Windows疑难杂症》&#x1f31f; 让复杂的事情更…...

Pytorch图像去噪实战(十六):YCbCr颜色空间图像去噪,解决RGB去噪后的色偏问题

Pytorch图像去噪实战(十六):YCbCr颜色空间图像去噪,解决RGB去噪后的色偏问题 一、问题场景:RGB模型降噪了,但颜色变脏了 上一篇我们实现了RGB图像去噪。 模型能正常训练,也能处理彩色图片,但在真实测试中我遇到一个非常明显的问题: 噪声确实少了,但颜色变灰、变暗,…...

Mac鼠标滚轮优化终极指南:如何用Mos解决外设滚动冲突并提升工作效率

Mac鼠标滚轮优化终极指南&#xff1a;如何用Mos解决外设滚动冲突并提升工作效率 【免费下载链接】Mos 一个用于在 macOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板 | A lightweight tool used to smooth scrolling and set scroll direction in…...