欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 在Ubuntu22.04 jammy下用qemu模型riscv32环境装鸿蒙(未完成,待续)

在Ubuntu22.04 jammy下用qemu模型riscv32环境装鸿蒙(未完成,待续)

2025/7/14 21:39:57 来源:https://blog.csdn.net/skywalk8163/article/details/144276018  浏览:    关键词:在Ubuntu22.04 jammy下用qemu模型riscv32环境装鸿蒙(未完成,待续)

在使用实体ESP32C3 安装鸿蒙失败后,就是这个:完全按照手册win10里装Ubuntu 虚拟机然后编译ESP32(主要是想针对ESP32C3和S3)开发板的鸿蒙系统(失败)-CSDN博客转向用qemu模拟环境装鸿蒙

学习手册riscv32_virt/README_zh.md · OpenHarmony/device_qemu - Gitee.com

Qemu RISC-V virt 教程

1. 简介

riscv32_virt/ 子目录包含部分Qemu RISC-V虚拟化平台验证的OpenHarmony kernel_liteos_m的代码,目录名为riscv32_virt。 RISC-V 虚拟化平台是一个 qemu-system-riscv32 的目标设备,通过它来模拟一个通用的、基于RISC-V架构的单板。

这次模拟的配置是:RISC-V架构,1个CPU,128M内存。

提示: 系统内存硬编码为128MB。

2. 环境搭建

环境搭建

编译器安装:gcc_riscv32, 提示: 可直接下载

3. 获取源码

代码获取

提示: 可以使用 repo 命令来获取源码。

4. 源码构建

在已经获取的源码根目录,请输入:

hb set

选择ohemu下的qemu_riscv_mini_system_demo选项。

然后执行构建命令如下:

hb build

这个命令构建会产生 OHOS_Image 的镜像文件。

在构建完成之后,对应的镜像文件在如下目录:

out/riscv32_virt/qemu_riscv_mini_system_demo/

5. 在Qemu中运行镜像

a) 如果没有安装 qemu-system-riscv32 ,安装请参考链接:Qemu安装指导

b) 运行

(1). qemu 版本 < 5.0.0

cd device/qemu/riscv32_virt
qemu-system-riscv32 -machine virt -m 128M -kernel ../../../out/riscv32_virt/qemu_riscv_mini_system_demo/OHOS_Image -nographic -append "root=dev/vda or console=ttyS0"

(2). qemu 版本 >= 5.0.0

执行./qemu-run --help提示如下:

Usage: qemu-run [OPTION]...
Run a OHOS image in qemu according to the options.Options:-e, --exec file_name     kernel exec file name-n, --net-enable         enable net-l, --local-desktop      no VNC-g, --gdb                enable gdb for kernel-t, --test               test mode, exclusive with -g-h, --help               print help infoBy default, the kernel exec file is: out/riscv32_virt/qemu_riscv_mini_system_demo/OHOS_Image,and net will not be enabled, gpu enabled and waiting for VNC connection at port 5920.

默认不加参数的情况下,网络不会自动配置,并使用默认镜像文件,若需更改默认镜像文件,可以利用 ./qemu-run -e [file_name] 指定

6. gdb调试

cd device/qemu/riscv32_virt
vim liteos_m/config.gni

将 board_opt_flags 中的

board_opt_flags = []

编译选项修改为:

board_opt_flags = [ "-g" ]

保存并退出,在OHOS根目录重新编译:

hb build -f

在一个窗口中输入命令:

./qemu-run -g

在另一个窗口中输入命令:

riscv32-unknown-elf-gdb out/riscv32_virt/qemu_riscv_mini_system_demo/OHOS_Image
(gdb) target remote localhost:1234
(gdb) b main

更多gdb相关的调试可以查阅:gdb指导手册。

7. 用法示例

  • 用FAT映像传递文件

实践

安装python库

pip3 install setuptools scons kconfiglib pycryptodome ecdsa six

pip install 

安装gcc-riscv32

安装apt库

下载源码:

wget https://gitee.com/openharmony/docs/blob/HEAD/zh-cn/device-dev/get-code/sourcecode-acquire.md

获取源码这块就晕了,竟然好几G,我就想装个riscv32的鸿蒙啊

下载这个试试

git clone https://gitee.com/openharmony/kernel_liteos_a

kernel_liteos_a: LiteOS kernel for embedded devices with rich resources | 适用于资源较丰富嵌入式设备的LiteOS内核

直接下载编译器

wget https://gitee.com/link?target=https%3A%2F%2Frepo.huaweicloud.com%2Fharmonyos%2Fcompiler%2Fgcc_riscv32%2F7.3.0%2Flinux%2Fgcc_riscv32-linux-7.3.0.tar.gz

 安装qemu-system-misc试试

apt install qemu-system-misc

中间一度碰到清华源报错的问题,改为山大源

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.sdu.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.sdu.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.sdu.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.sdu.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.sdu.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.sdu.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse# 以下安全更新软件源包含了官方源与镜像站配置,如有需要可自行修改注释切换
# deb https://mirrors.sdu.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# # deb-src https://mirrors.sdu.edu.cn/ubuntu/ jammy-security main restricted universe multiversedeb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse# 预发布软件源,不建议启用
# deb https://mirrors.sdu.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# # deb-src https://mirrors.sdu.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse

设置环境变量

将gcc_riscv32目录放置到/opt目录,设置环境变量:

export PATH=/opt/gcc_riscv32/bin:$PATH

 这是至少命令是可以执行了

hb工具是啥

hb是HarmonyOS2.0里新增加的编译构建命令行工具。需要Python 3.7.4及以上版本的支持,建议安装3.8.x。源码在OpenHarmony\build\lite\hb这个目录下。
安装方法,可以直接使用pip安装打包好的工具。但是我们为了方便调试,我们直接使用源码进行单步调试。

python3 -m pip install --user ohos-build

源码构建

在已经获取的源码根目录,请输入:

hb set

选择ohemu下的qemu_riscv_mini_system_demo选项。

然后执行构建命令如下:

hb build
git clone https://gitee.com/openharmony/kernel_liteos_a

进入目录后,hb报错:

hb
Traceback (most recent call last):File "/usr/local/bin/hb", line 8, in <module>sys.exit(main())File "/usr/local/lib/python3.10/dist-packages/hb/__main__.py", line 49, in maintopdir = find_top()File "/usr/local/lib/python3.10/dist-packages/hb/__main__.py", line 37, in find_topraise Exception("Please call hb utilities inside source root directory")
Exception: Please call hb utilities inside source root directory

下载这个包试试:

git clone https://gitee.com/openharmony/device_qemu

 hb还是报错,先搁置

尝试编译qemu_riscv

device_qemu: Hardware platforms emulation by QEMU | QEMU模拟不同的硬件单板

首先下载源代码

git clone https://gitee.com/openharmony/device_qemu

hb还是报错:raise Exception("Please call hb utilities inside source root directory")
Exception: Please call hb utilities inside source root directory
 

查看issue:riscv32_virt hb build failed · Issue #I49QL2 · OpenHarmony/device_qemu - Gitee.com,发现:目前所有QEMU项目都已统一到OHOS根目录下构建运行,不再支持单独目录编译。请用新版本再试试,这个issue先关闭了a

下载这个库

git clone https://gitee.com/openharmony/build_lite

把里面的hb_internal目录,cp到要编译的device_qemu 包的build/lite目录,当然这个目录是我手工创建的。好吧,原来有build这个库

https://gitee.com/openharmony/build

下载: 

git clone https://gitee.com/openharmony/build

下载好后,先执行./build/prebuilts_download.sh

耗时较长,耐心等待。

调试

看到有人提到需要改鸿蒙里的raise代码

OpenHarmony 4.1版本代码下载之后,请修改文件:

build\hb\util\loader\load_ohos_build.py,使用VScode打开该文件,使用Ctrl+F搜索

raise OHOSException 将其批量替换成print

参考:ESP32移植Openharmony设备开发---(1)环境搭建_esp32 openharmony-CSDN博客

hb编译报错:

hb
Traceback (most recent call last):File "/usr/local/bin/hb", line 8, in <module>sys.exit(main())File "/usr/local/lib/python3.10/dist-packages/hb/__main__.py", line 49, in maintopdir = find_top()File "/usr/local/lib/python3.10/dist-packages/hb/__main__.py", line 37, in find_topraise Exception("Please call hb utilities inside source root directory")
Exception: Please call hb utilities inside source root directory

百度AI探索版说:

这个错误信息表明你在使用 hb 这个工具时没有在正确的目录下执行。hb 工具要求你必须在源代码的根目录下运行它。这个根目录通常是包含项目所有源代码和配置文件的顶层目录。

hb版本问题

 hd -V
hd from util-linux 2.37.2

终于明白为什么手册里写着要先删除hd了 

。。。看错了,应该是hb,估计是有重名的python包,所以要先uninstall hb,然后再重新安装hb,也就是

尝试解决hb目录报错问题

查看hb源代码:"/usr/local/lib/python3.10/dist-packages/hb/__main__.py"

 vi /home/skywalk/.local/lib/python3.10/site-packages/hb/__main__.py
 

VERSION = "0.4.6"def find_top():cur_dir = os.getcwd()while cur_dir != "/":hb_internal = os.path.join(cur_dir, 'build/lite/hb_internal')if os.path.exists(hb_internal):return cur_dircur_dir = os.path.dirname(cur_dir)raise Exception("Please call hb utilities inside source root directory")

这段代码的目的是在文件系统中向上遍历目录,寻找一个特定的目录(build/lite/hb_internal)。这种操作通常用于确保某个工具或脚本是在特定的源代码根目录下被调用的,这个根目录包含了一些必要的构建文件或工具。如果找不到这个特定的目录,就通过抛出异常来通知用户他们可能在错误的目录下执行了这个工具或脚本。

百度搜索,原来需要这个库:

https://gitee.com/openharmony/build_lite

下载这个库

git clone https://gitee.com/openharmony/build_lite

把里面的hb_internal目录,cp到要编译的device_qemu 包的build/lite目录,当然这个目录是我手工创建的

执行:

 hb set
please execute build/prebuilts_download.sh
终于没有原来报错了。

解决报错please execute build/prebuilts_download.sh

问题是build目录是我创建的,根本就没有prebuilts_download.sh这个文件啊

终于找到了,原来有build这个库

https://gitee.com/openharmony/build

 下载:

git clone https://gitee.com/openharmony/build

下载好后,先执行./build/prebuilts_download.sh

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词