news 2026/4/27 11:36:01

在Ubuntu 22.04上从源码编译QEMU 6.2.0,并一键运行OpenHarmony轻量系统(RISC-V版)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在Ubuntu 22.04上从源码编译QEMU 6.2.0,并一键运行OpenHarmony轻量系统(RISC-V版)

在Ubuntu 22.04上从源码构建QEMU 6.2.0并运行OpenHarmony轻量系统的完整指南

当RISC-V架构遇上开源鸿蒙系统,会碰撞出怎样的火花?对于想要探索嵌入式系统开发的工程师而言,这无疑是一个绝佳的实践机会。本文将带你从零开始,在Ubuntu 22.04环境中完成QEMU虚拟机的源码编译,并最终成功启动OpenHarmony轻量系统。不同于简单的命令复制粘贴,我们会深入每个环节的技术细节,让你真正理解背后的原理。

1. 环境准备与系统规划

在开始之前,我们需要对开发环境进行合理规划。Ubuntu 22.04 LTS提供了稳定的基础环境,建议使用物理机或分配至少4核CPU、8GB内存的虚拟机。磁盘空间需要预留20GB以上,因为编译过程会产生大量中间文件。

关键组件版本要求

  • GCC ≥ 9.4.0
  • Python ≥ 3.8
  • Make ≥ 4.2.1
  • Ninja ≥ 1.10.0

验证基础工具链是否就位:

gcc --version python3 --version make --version ninja --version

如果缺少任何组件,可以通过以下命令一键安装:

sudo apt update && sudo apt install build-essential python3 ninja-build

提示:建议在用户主目录下创建专门的开发目录,例如~/openharmony_dev,所有后续操作都在此目录中进行,保持环境整洁。

2. QEMU 6.2.0源码编译详解

2.1 依赖库的全面安装

QEMU作为全系统模拟器,其功能模块众多,需要确保所有依赖库完整安装。除了基础编译工具外,这些是关键依赖:

sudo apt install -y \ zlib1g-dev \ libglib2.0-dev \ libpixman-1-dev \ libssl-dev \ libncursesw5-dev \ flex bison \ libcapstone-dev \ libattr1-dev

注:libncursesw5-dev特别重要,缺少它会导致后续运行OpenHarmony时出现终端界面显示问题。

2.2 源码获取与编译优化

从官方镜像下载QEMU源码包:

wget https://download.qemu.org/qemu-6.2.0.tar.xz tar xvf qemu-6.2.0.tar.xz cd qemu-6.2.0

编译配置时,我们可以针对RISC-V架构进行优化:

mkdir build && cd build ../configure \ --target-list=riscv32-softmmu \ --prefix=/opt/qemu-6.2.0 \ --enable-debug \ --enable-sdl \ --enable-capstone

关键参数解析

  • --target-list:限定只编译RISC-V目标,大幅减少编译时间
  • --prefix:指定自定义安装路径,避免污染系统目录
  • --enable-debug:保留调试信息,便于问题排查

启动并行编译(根据CPU核心数调整-j参数):

make -j$(nproc)

编译完成后,安装到指定目录:

sudo make install

最后,将QEMU添加到PATH环境变量:

echo 'export PATH=$PATH:/opt/qemu-6.2.0/bin' >> ~/.bashrc source ~/.bashrc

3. OpenHarmony轻量系统准备

3.1 源码获取与编译环境配置

首先安装必要的工具链:

sudo apt install git python3-pip pip install --user ohos-build

获取OpenHarmony 4.0 Release代码:

repo init -u https://gitee.com/openharmony/manifest.git -b OpenHarmony-4.0-Release repo sync -c

选择RISC-V轻量系统配置:

hb set # 选择 qemu_riscv_mini_system_demo

3.2 系统镜像编译技巧

开始编译前,建议调整一些参数以优化构建过程。编辑build.py文件,添加以下参数:

build_args = { 'jobs': str(multiprocessing.cpu_count()), 'target_cpu': 'riscv32', 'optimize': 'size', 'strip': True }

然后启动完整编译:

hb build -f

编译成功后,输出文件位于:

out/riscv32_virt/qemu_riscv_mini_system_demo/OHOS_Image

4. QEMU运行OpenHarmony实战

4.1 自定义启动脚本分析

OpenHarmony提供的qemu-run脚本实际上是一个包装器,我们可以创建自己的增强版本:

#!/bin/bash QEMU_BIN="/opt/qemu-6.2.0/bin/qemu-system-riscv32" KERNEL_IMAGE="out/riscv32_virt/qemu_riscv_mini_system_demo/OHOS_Image" "$QEMU_BIN" \ -machine virt \ -nographic \ -kernel "$KERNEL_IMAGE" \ -append "console=ttyS0" \ -smp 2 \ -m 128M \ -drive file=fs.img,if=none,format=raw,id=fs \ -device virtio-blk-device,drive=fs

参数深度解析

  • -machine virt:指定RISC-V虚拟平台类型
  • -nographic:禁用图形界面,纯控制台模式
  • -smp 2:设置2个CPU核心
  • -m 128M:分配128MB内存
  • -drive:挂载文件系统镜像

4.2 系统运行与交互

赋予脚本执行权限并运行:

chmod +x qemu_custom_run ./qemu_custom_run

成功启动后,你将看到OpenHarmony的启动日志,最终进入系统shell。要退出QEMU,使用组合键:

Ctrl+A 松开后按 X

4.3 常见问题排查指南

问题1libncursesw.so.5: cannot open shared object file

sudo apt install libncursesw5

问题2:QEMU启动后立即退出 检查内核镜像路径是否正确,确认编译过程没有错误。

问题3:终端显示乱码 确保安装了libncursesw5-dev并重新编译QEMU。

5. 进阶配置与调试技巧

5.1 网络功能扩展

要让OpenHarmony具备网络功能,首先在主机上配置TAP设备:

sudo ip tuntap add dev tap0 mode tap sudo ip link set tap0 up sudo ip addr add 192.168.100.1/24 dev tap0

然后在QEMU启动参数中添加:

-netdev tap,id=net0,ifname=tap0,script=no,downscript=no \ -device virtio-net-device,netdev=net0

5.2 调试模式启动

对于开发者,可以使用GDB调试模式:

"$QEMU_BIN" -s -S ...

在另一个终端中:

riscv32-unknown-elf-gdb \ -ex "target remote localhost:1234" \ -ex "symbol-file out/riscv32_virt/qemu_riscv_mini_system_demo/OHOS_Image"

5.3 性能优化参数

hb build时添加以下选项可优化系统性能:

hb build --target-cpu riscv32 --compile-mode release --strip

对于QEMU,这些参数能提升运行效率:

-accel tcg,thread=multi \ -cpu rv32,x-j=on

在实际项目中,我发现最耗时的往往是依赖库的版本冲突问题。建议使用virtualenv创建隔离的Python环境来管理hb工具链。当遇到编译错误时,先检查所有依赖库的版本是否匹配官方要求,这能节省大量排查时间。

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

手把手教你用Python+热风枪,自己测芯片温漂(以ADR445等为例)

低成本DIY方案:用Python与热风枪精准测量芯片温漂特性 在电子设计与元器件选型中,电压基准源的温漂参数直接影响系统精度。专业实验室通常使用恒温箱进行测试,但对于个人开发者和小团队,动辄上万元的设备投入显然不现实。本文将演…

作者头像 李华
网站建设 2026/4/27 11:35:09

深入高通Camera HAL3:手把手教你为SM8550平台定制一个自定义Node

深入高通Camera HAL3:SM8550平台自定义Node开发实战指南 在移动影像技术快速迭代的今天,骁龙8 Gen 3(SM8550)平台搭载的Camera HAL3框架为开发者提供了前所未有的算法集成自由度。本文将带您深入CHI-CDK架构核心,从零构…

作者头像 李华
网站建设 2026/4/27 11:35:06

中级工作者历年真题及答案解析PDF电子版(2010-2025年)

2026年中级社会工作者考试将于5月23日举行!2010-2025年的中级社会工作者历年真题及答案解析,包含《社会工作实务》、《社会工作综合能力》和《法律与政策》三科真题,高清PDF电子。真题下载链接:https://pan.quark.cn/s/77ae47fd28…

作者头像 李华
网站建设 2026/4/27 11:34:51

保姆级教程:用示波器抓取SATA硬盘OOB信号(COMRESET/COMWAKE)实战

保姆级教程:用示波器抓取SATA硬盘OOB信号(COMRESET/COMWAKE)实战 当一块SATA硬盘突然"消失"在系统设备列表中时,大多数工程师的第一反应往往是检查电源和数据线连接。但如果你已经更换过线缆、尝试不同端口甚至更换主机…

作者头像 李华