【开源鸿蒙】编译OpenHarmony轻量系统QEMU RISC-V版

文章目录

    • 一、背景介绍
    • 二、准备OpenHarmony源代码
    • 三、准备hb命令
      • 3.1 安装hb命令
      • 3.2 检查hb命令
    • 四、编译RISC-V架构的OpenHarmony轻量系统
      • 4.1 设置hb构建目标
      • 4.2 启动hb构建过程
    • 五、问题解决
      • 5.1 hb set 报错问题解决
    • 六、参考链接

开源鸿蒙坚果派,学习鸿蒙一起来!

本文将介绍如何编译OpenHarmony轻量系统的QEMU RISC-V虚拟平台版。得益于QEMU的CPU指令模拟执行能力,该方法可以在没有实际开发板硬件的情况下,调试和运行OpenHarmony轻量系统。另外,本文介绍的该方法,可以用于OpenHarmony操作系统源码的学习和研究,也可以用于其他操作系统源代码的学习和研究。

一、背景介绍

QEMU是一个开源的虚拟化平台,它可以实现目标平台的CPU指令级别的模拟。因此,可以使用QEMU进行操作系统的学习和研究,也可以在没有硬件的情况下对开发板进行模拟。

QEMU是一款开源的虚拟机监控程序,可模拟多种硬件环境,并支持多种处理器架构。它能够在不同平台上实现虚拟化,运行各种操作系统。QEMU具有高度的灵活性和可移植性,被广泛用于开发、测试和部署虚拟化环境。

二、准备OpenHarmony源代码

开始之前,需要准备:

  • Ubuntu 系统的开发环境(可以是物理主机也可以是虚拟机);
  • 下载OpenHarmony 4.0 Release源代码,参考上一篇文章:
    • 【开源鸿蒙】下载 OpenHarmony 4.0 源代码和工具链

三、准备hb命令

3.1 安装hb命令

编译OpenHarmony源码之前,需要先安装hb命令。

# 跳转到OpenHarmony源码目录,例如上一篇文章介绍的 OpenHarmony 4.0 Release
cd ohos/openharmony# 如果没有 pip 命令,则需要先安装 python3-pip
# sudo apt install python3-pip# 安装 hb 命令:
pip install build/hb

安装成功如下图所示:

Untitled

3.2 检查hb命令

安装完成后,可以通过 hb help命令测试是否可以正常使用。

如果报告 command not found,如下图所示:

Untitled

则表明hb所在目录没有加到PATH环境变量中,如果是Ubuntu系统,需要先检查~/.profile文件是否存在,并检查其中是否有如下代码:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; thenPATH="$HOME/.local/bin:$PATH"
fi

如果有以上代码,关闭当前shell会话,重新打开,就可以正常使用hb命令了。

如果没有~/.profile文件,则可以将以上代码添加到 ~/.bashrc 文件中。

如果报告Please call hb utilities inside ohos source directory,则是正常的,需要在ohos源码目录下执行hb命令。

Untitled

四、编译RISC-V架构的OpenHarmony轻量系统

4.1 设置hb构建目标

开始编译之前,首先需要设置hb构建的目标产品或开发板是什么。使用hb set命令,进行交互式设置。

依次选择 mini → qemu_riscv_mini_system_demo

Untitled

Untitled

设置完成后,会在源码目录的顶层生成 ohos_config.json 文件,内容如下:

Untitled

4.2 启动hb构建过程

使用hb set设置完目标平台后,就可以使用hb build命令进行编译了。

构建完成后,输出如下:

Untitled

五、问题解决

5.1 hb set 报错问题解决

如果遇到报错:cannot import name ‘Mapping’ from 'collections’

Untitled

这个报错是因为Python 3.10中,Mapping已经不在collections包中了。

解决方法,修改文件: ~/.local/lib/python3.10/site-packages/prompt_toolkit/styles/from_dict.py

手动将 collections 改为 collections.abc 即可。

六、参考链接

  1. OpenHarmony官网: https://www.openharmony.cn/
  2. OpenHarmony编译形态整体说明: https://docs.openharmony.cn/pages/v4.0/zh-cn/device-dev/quick-start/quickstart-appendix-compiledform.md
  3. OpenHarmony代码仓: https://gitee.com/openharmony/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/751967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue.js+SpringBoot开发农家乐订餐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户2.2 管理员 三、系统展示四、核心代码4.1 查询菜品类型4.2 查询菜品4.3 加购菜品4.4 新增菜品收藏4.5 新增菜品留言 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的农家乐订餐系统&#xff0c…

ISIS接口MD5 算法认证实验简述

默认情况下,ISIS接口认证通过在ISIS协议数据单元(PDU)中添加认证字段,例如:MD5 算法,用于验证发送方的身份。 ISIS接口认证防止未经授权的设备加入到网络中,并确保邻居之间的通信是可信的。它可…

Blocks —— 《Objective-C高级编程 iOS与OS X多线程和内存管理》

目录 Blocks概要什么是BlocksOC转C方法关于几种变量的特点 Blocks模式Block语法Block类型 变量截获局部变量值__block说明符截获的局部变量 Blocks的实现Block的实质 Blocks概要 什么是Blocks Blocks是C语言的扩充功能,即带有局部变量的匿名函数。 顾名思义&#x…

八股文打卡day35——数据库(12)

面试题:讲一下MVCC机制? 我的回答: MVCC,是多版本并发控制。 什么意思呢? 数据库会记录每条数据记录的变更情况,也就是说,一条数据记录是有多个版本的。 例如,一条数据,是&#xf…

API安全集成最佳实践:有效应对安全挑战

API集成的重要性正愈发凸显。调查数据显示,83%的受访者表示API集成在其业务战略中起着关键作用,约40%的受访者表示企业数字化转型的深入发展是推动API集成的关键推动力。对于现代企业而言,API集成的重要性主要体现在以下方面: 提…

数据结构与算法Bonus-KNN问题的代码求解过程

一、问题提出 (一)要求 1.随机生成>10万个三维点的点云,并以适当方式存储 2.自行实现一个KNN算法,对任意Query点,返回最邻近的K个点 3.不允许使用第三方库(e.g.flann,PCL,opencv)! 4.语言任选(推荐…

ChatGPT编程实现简易聊天工具

ChatGPT编程实现简易聊天工具 今天借助[[小蜜蜂]][https://zglg.work]网站的ChatGPT练习socket编程,实现一个简易聊天工具软件。 环境:Pycharm 2021 系统:Mac OS 向ChatGPT输入如下内容: ChatGPT收到后,根据返回结…

深度学习设计-基于机器学习的心血管疾病分析与预测

概要 在国富民强的今天,医疗卫生事业快速发展,平均人口寿命也逐年上升,随之而来的是人口老龄化问题,而心 血管疾病是近年来发病率极高的老年性疾病。其发病率和死亡率均有所上升,已然成为当今威胁人类健康的重大疾 病之…

配置lvs(DR)

配置lvs(DR) 主机名主机IP地址lvs1lvs192.168.88.38web1nginx192.168.88.10web2nginx192.168.88.20 lvs1上操作 #安装ipvsadm [rootlvs1 ~]# yum -y install ipvsadm [rootlvs1 ~]# ipvsadm -A -t 192.168.88.100:80 -s rr [rootlvs1 ~]# ipvsadm -a -t 192.168.88.100:80 -…

【记录搭建elk 如何在linux共享文件】

『如何在linux共享文件 ,搭建elk直接看第二部分』 新增用户a b c adduser a adduser b adduser c新增用户组 A groupadd developteam将用户a b c 加入 组 usermod -a -G developteam hadoop usermod -a -G developteam hbase usermod -a -G developteam hive设置um…

【学习笔记】云原生的关键技术初步

云原生(Cloud Native)作为云计算领域的一种新型技术体系,旨在提高应用程序的可靠性、性能和响应速度。它通过整合容器、微服务、DevOps等一系列关键技术,使得应用从设计开发到部署上线和运营维护的各个环节都基于云平台构建&#…

【GPT-SOVITS-06】特征工程-HuBert原理

说明:该系列文章从本人知乎账号迁入,主要原因是知乎图片附件过于模糊。 知乎专栏地址: 语音生成专栏 系列文章地址: 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…

microk8s使用本地私服registry的镜像http协议

开发环境为了能部署服务到microk8s,我们开启了一个本地私库,地址为:http://localhost:5000,那么如何在microk8s中能拉取本地私库中的镜像呢? 直接部署的话,microk8s会用https协议去拉取镜像,所以必须要配置…

springboot/ssm电子印章管理系统Java印章审批信息管理系统web

springboot/ssm电子印章管理系统Java印章审批信息管理系统web 基于springboot(可改ssm)vue项目 开发语言:Java 框架:springboot/可改ssm vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:…

Unity游戏项目接广告

Unity游戏项目中接入GoogleAdMob 先看效果图 接入测试横幅广告,代码如下: using System.Collections; using System.Collections.Generic; using UnityEngine; using GoogleMobileAds.Api; using System;public class GoogleAdMobManager : MonoBehavi…

面试算法-38-最小覆盖子串

题目 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。 注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。 如果…

Godot 学习笔记(1):环境配置

文章目录 前言Godot 环境配置相关链接最简单的按钮项目Sence打包最简单的按钮事件 总结 前言 我从小就有个梦想,我想做游戏。虽然我大学的时候选择了计算机,工作也是计算机,但是我一直没有时间去学游戏引擎。原因有二:第一&#…

问题解决:关于tomcat无法连接问题的解决

安装tomcat并配置环境变量 下载tomcat并安装 首先去tomcat官方网站,下载tomcat 进入tomcat官方网站之后,查看jdk应该对应的tomcat版本,点击图示的按钮 点击完毕之后,可以看到下述的页面 图中的表格可以看到对应的jdk版本与tomcat的版本之…

docker基础用法-2

文章目录 什么是dockerOCI&OCFOCIOCF docker架构docker镜像与镜像仓库docker对象安装及使用dockerdocker安装docker加速docker常用操作docker event state防火墙状态及规则 什么是docker docker中的容器: lxc --> libcontainer --> runC docker最开始是…

Qt for Mac阻止MacOS系统休眠

Qt开发的应用程序如果电脑休眠了会影响软件的使用,因此在软件的使用过程中需要防止电脑休眠,在Win上有专门的API进行处理,在Mac上也必需使用Mac平台自身的API,本篇介绍在Mac平台下使用Qt阻止Mac系统休眠。 要调用Mac系统的API&am…