news 2026/5/2 8:11:14

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在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-dev

2. 获取与准备OpenHarmony源码

OpenHarmony的代码管理采用repo工具,这是Google为Android项目开发的版本控制工具。首先安装repo命令行工具:

mkdir ~/bin curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/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使用hb(HarmonyOS Build)作为构建工具。这个Python工具需要从源码编译安装:

cd ~/openharmony python3 -m pip install --user build/hb

安装完成后常见的两个问题及解决方案:

  1. hb命令找不到: 确保~/.local/bin在PATH中:

    echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc source ~/.bashrc
  2. Python 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 --version

4. 编译与运行轻量系统

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_Image

4.3 在QEMU中运行

使用以下命令启动模拟器:

./qemu-run -m 128M -smp 1

关键参数说明:

参数说明
-m设置内存大小(建议至少128MB)
-smp设置CPU核心数

成功启动后,终端会显示OpenHarmony的启动日志,最终进入shell提示符:

OHOS #

5. 深度问题排查指南

5.1 编译时内存不足

如果遇到编译过程中被kill,可能是内存不足。解决方案:

  1. 增加swap空间:

    sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
  2. 限制并行编译任务数:

    hb build -f -j4

5.2 QEMU启动黑屏

如果QEMU窗口出现但保持黑屏,尝试:

  1. 检查SDL2支持:

    sudo apt install -y libsdl2-dev
  2. 使用非图形模式:

    ./qemu-run -nographic

5.3 网络功能异常

默认配置可能不包含网络支持。要启用网络:

  1. 编译时包含网络组件:

    hb set # 选择qemu_riscv_mini_system_demo_net hb build -f
  2. 启动时添加网络参数:

    ./qemu-run -netdev user,id=net0 -device virtio-net-device,netdev=net0

6. 进阶开发技巧

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 :1234

6.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 性能优化建议

  1. ccache加速编译

    sudo apt install ccache export USE_CCACHE=1 ccache -M 10G
  2. 选择性编译

    hb build --build-target my_app
  3. 并行编译(根据CPU核心数调整):

    hb build -f -j$(nproc)

在实际项目中,我发现最耗时的往往是第一次完整编译。后续增量编译时,合理使用ccache可以节省90%以上的编译时间。另外,保持源码目录在SSD上也能显著提升构建速度。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 8:04:26

Open UI5 源代码解析之1169:AnnotationChangeHandlerAPI.js

源代码仓库: https://github.com/SAP/openui5 源代码位置:src\sap.ui.fl\src\sap\ui\fl\apply\api\AnnotationChangeHandlerAPI.js AnnotationChangeHandlerAPI.js 详细分析 文件定位与整体判断 当前文件位于 src/sap.ui.fl/src/sap/ui/fl/apply/api/ 目录下,文件名为 …

作者头像 李华
网站建设 2026/5/2 8:03:24

PlantUML Server核心功能解析:10大实用技巧与最佳实践

PlantUML Server核心功能解析:10大实用技巧与最佳实践 【免费下载链接】plantuml-server PlantUML Online Server 项目地址: https://gitcode.com/gh_mirrors/pl/plantuml-server PlantUML Server是一款强大的在线UML图表生成工具,让用户能够直接…

作者头像 李华
网站建设 2026/5/2 7:59:59

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

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

作者头像 李华
网站建设 2026/5/2 7:57:24

XUnity AutoTranslator终极指南:3步实现Unity游戏无障碍翻译体验

XUnity AutoTranslator终极指南:3步实现Unity游戏无障碍翻译体验 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾因为语言障碍而错过精彩的国外游戏?是否在日文RPG或英文独…

作者头像 李华