OpenHarmony—开发环境搭建

news2025/4/8 6:10:12

背景

因为没有实体的开发硬件,且不想破坏原有的Linux环境,所以这里基于 Docker + QEMU 搭建开发环境

  • 宿主机Linux系统
  • 命令行方式
  • Docker
  • QEMU 6.2

Docker环境准备

安装Docker

在Ubuntu中,可以使用下面的命令来安装Docker:

sudo apt install docker.io

获取Docker镜像

#获取小型系统镜像
 docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/docker_oh_small:3.2
 #获取轻量系统镜像
 docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/docker_oh_mini:3.2
 #获取标准系统镜像
 docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/docker_oh_standard:3.2

运行构建环境

# 运行小型系统Docker构建环境
docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/docker_oh_small:3.2
# 运行轻量系统Docker构建环境
docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/docker_oh_mini:3.2
# 运行标准系统Docker构建环境
docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/docker_oh_standard:3.2

其他

  • Docker需要root权限
  • 注意 Docker 的网络模式
  • 其他Docker相关的操作可自行网上查阅

获取OH源码

这里以获取 master 分支为例,如要下载其他分支,-b 换成其他分支名即可

前提条件

1.注册码云gitee帐号,注册码云SSH公钥(不使用ssh的话可省略)

2.安装git和git-lfs并配置用户信息

sudo apt-get update
sudo apt-get install git git-lfs
git config --global user.name "yourname"
git config --global user.email "your-email-address"
git config --global credential.helper store

3.安装repo

下述命令中的安装路径以”~/bin”为例,请用户自行创建所需目录

mkdir ~/bin
curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 -o ~/bin/repo 
chmod a+x ~/bin/repo
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests

将repo添加到环境变量。

vim ~/.bashrc               # 编辑环境变量
export PATH=~/bin:$PATH     # 在环境变量的最后添加一行repo路径信息
source ~/.bashrc            # 应用环境变量

下载

方式一(推荐):通过repo + ssh下载

repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'

方式二:通过repo + https下载

repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'

执行prebuilts

在源码根目录下执行prebuilts脚本,安装编译器及二进制工具,这点很重要,不然会报类似的错误:please execute preload_download.sh

bash build/prebuilts_download.sh

构建编译

通过尝试各种分支,各个demo,最后确定使用OpenHarmony-3.0-LTS 分支,ohemu下的qemu_small_system_demo

命令行方式

#python方式
python3 build.py -p {product_name}@{company}
#Release版本 :
./build.sh --product-name {product_name}
#Debug版本 :
./build.sh --product-name {product_name} --gn-args is_debug=true --build-target {target_name}
./build.sh --product-name qemu-arm-linux-min --ccache --jobs 4

hb方式

hb是OpenHarmony的命令行工具,用来执行编译命令,推荐使用这种方式

安装及卸载

#安装
python3 -m pip install --user ohos-build
#卸载
python3 -m pip uninstall ohos-build  
#以上安装如果还不行,在源码根目录运行如下命令安装hb并更新至最新版本。 有些版本为 build/lite
python3 -m pip install --user build/hb
  • 编译构建
  • #选择对应的构建目标
    hb set
    #查看当前设置信息
    hb env
    #编译
    hb build
    #clean
    hb clean

    QEMU

    QEMU 我没有安装在Docker里,是安装在宿主机上的,Docker里面的环境比较单一,缺少很多组件和包,

    所以这也导致 无法直接使用Openharmony根目录下的qemu-run脚本来运行QEMU

    安装QEMU

    这里是手动安装的openharmony推荐的6.2版本,不同的版本可能会有些问题。

    编译安装QEMU和其他的包的过程都是差不多,具体如下:

    1.安装依赖(Ubuntu 18+)

sudo apt install build-essential zlib1g-dev pkg-config libglib2.0-dev binutils-dev libboost-all-dev autoconf libtool libssl-dev libpixman-1-dev virtualenv flex bison
  • 2.获取源码

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

    3.编译安装

  • #编译
    tar -xf qemu-6.2.0.tar.xz
    cd qemu-6.2.0
    mkdir build && cd build
    ../configure --prefix=qemu_installation_path
    make -j16
    #安装
    make install
    #添加环境变量, 最末尾加入: export PATH=$PATH:qemu_installation_path
    vim ~/.bashrc

    启动QEMU

    每个版本或分支可能启动的脚本的位置不太一样,但大致路径都是差不多的

    例如 qemu_small_system_demo

    Release或master:

    ./vendor/ohemu/qemu_small_system_demo/qemu_run.sh

    OpenHarmony-3.0-LTS:

    ./vendor/ohemu/qemu_small_system_demo/patches/qemu-run

    有些启动脚本需要做点稍微的修改,主要是传入的参数

    退出QEMU

    按下Ctrl-A + x可退出qemu虚拟环境

    各种问题

  • 文档各种不匹配,对不上,未更新;各个分支版本差异较大,错误
  • 提示缺少相关组件或包
apt-get install dosfstools mtools 
  • 运行 sudo + 命令,显示找不到命令
  • sudo默认的配置文件下只是指定三个命令位置,如下:
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin 
  • 分支问题
  • 开始使用 OpenHarmony-v3.2-Release分支,报如下错误:
[ERR][KProcess:SystemInit]Failed to find file system jffs2
[ERR][KProcess:SystemInit]Failed to mount /, rootDev /dev/cfiflash0, errno 19: No such device
[ERR][KProcess:SystemInit]mount rootfs error!

在官方仓库OpenHarmony / device_qemu的 Issues 看到了成员回复:

small模拟系统未跟踪版本release,原因是问题太多,达不到能正式释放的水平。
2  这是个纯粹社区推动的项目,希望、需要共同参与推动
qemu项目是个社区项目,现在最大的问题是缺少开发者和维护者,非常期望参与解决问题~

大致意思就是qemu模拟的small等系统问题太多,达不到release的程度~~

换成 master 分支,报如下错误:

[OHOS ERROR] [606/783] ACTION //kernel/liteos_a:make(//build/lite/toolchain:linux_x86_64_ohos_clang)
[OHOS ERROR] FAILED: obj/kernel/liteos_a/make_build_ext_components.txt 
 ...

换 OpenHarmony-3.0-LTS 分支后,勉强可以使用qemu_small_system_demo了

  • 运行qemu回环设备报错
xxx@xxx-PC:~/WorkSpace/OpenHarmony$ ./vendor/ohemu/qemu_small_system_demo/qemu_run.sh 
Start making out/smallmmc.img...记录了1+0 的读入
记录了1+0 的写出
104857600 bytes (105 MB, 100 MiB) copied, 0.0651924 s, 1.6 GB/s
losetup: out/smallmmc.img:设置回环设备失败: 设备或资源忙

分析qemu_run启动脚本和losetup,这个主要的问题是在第一次运行的时候,使用loop设备后,中间的过程报错退出了,未卸载loop设备,导致下次使用该loop设备一直在占用,手动卸载后OK了

以上的内容主要介绍了OpenHarmony—开发环境搭建知识点,考虑到有想要学习更多的OpenHarmony开发的小伙伴

在这里我特邀了行业的几位大佬,花费好几个星期时间,为大家整理一套《OpenHarmony4.0&Next》思维导图每部分都对应OpenHarmony4.0&Next开发者需要掌握的技术点,并加以PDF总结,希望能帮助到想要技术提升进入大厂的朋友或正在面试大厂的朋友做一个技术上的储备:

其次是现在, 考虑到市场上还没有系统性的学习资料,所以就整理了一份《鸿蒙 (Harmony OS)开发学习手册》我特意整理了PDF文档方式,展现给大家参考:《做鸿蒙应用开发到底学习些啥?》

《鸿蒙 (Harmony OS)开发学习手册》

入门必看

1. 应用开发导读(ArkTS)

2. 应用开发导读(Java)

3.......

  

HarmonyOS 概念

1. 系统定义

2. 技术架构

3. 技术特性

4. 系统安全

5......

  

如何快速入门?《鸿蒙开发学习指南》

1. 基本概念

2. 构建第一个ArkTS应用

3. 构建第一个JS应用

4. ……

  

开发基础知识

1. 应用基础知识

2. 配置文件

3. 应用数据管理

4. 应用安全管理

5. 应用隐私保护

6. 三方应用调用管控机制

7. 资源分类与访问

8. 学习ArkTS语言

9. ……

  

基于ArkTS 开发

1. Ability开发

2. UI开发

3. 公共事件与通知

4. 窗口管理

5. 媒体

6. 安全

7. 网络与链接

8. 电话服务

9. 数据管理

10. 后台任务(Background Task)管理

11. 设备管理

12. 设备使用信息统计

13. DFX

14. 国际化开发

15. 折叠屏系列

16. ……

  

更多了解更多鸿蒙开发的相关知识可以参考:《鸿蒙基础入门开发宝典!》

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

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

相关文章

25计算机考研经验贴之准备篇二

Hello各位小伙伴,今天要分享的是 (1)报班or自学 (2)考研老师 (3)网购平台 (4)平板 【报班or自学】 关于这个问题网友的意见大致分为两类: 一类认为没必要报…

CMake入门教程【核心篇】属性管理set_property和get_property

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「本文的内容」:CMake入门教程 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 1.概述2.设置属性 - …

windows连接ssh并实现上传下载文件

连接ssh 输入:ssh空格用户名ip地址,然后按Enter 有可能出现下图提示,输入yes 回车即可 输入 password ,注意密码是不显示的,输入完,再按回车就行了 以上是端口默认22情况下ssh连接,有些公司它…

c jpeg 编码解码验证数据

1. yuv420p 1616 像素点 384字节全部数据 把上面的384个char从左到右,从上到下的顺序输入文件,就能显示红绿蓝白4个水平条

Qt学习_18_用QtMmlWidget实现界面中显示公式

QtMmlWidget是一个Qt类,可用于呈现用MathML 2.0编写的数学公式。 参考页:QtMmlWidget Class Reference (huihoo.com) 一般MathML 2.0编写的数学公式都保存于一个单独的.xml文件当中,然后QtMmlWidget类去读取这个.xml的内容,就可以…

Oracle导出CSV文件

利用spool spool基本格式: spool 路径文件名 select col1||,||col2||,||col3||,||col4 from tablename; spool off spool常用的设置: set colsep ;    //域输出分隔符 set echo off;    //显示start启动的脚本中的每个sql命令,缺…

【数据采集与预处理】数据接入工具Kafka

目录 一、Kafka简介 (一)消息队列 (二)什么是Kafka 二、Kafka架构 三、Kafka工作流程分析 (一)Kafka核心组成 (二)写入流程 (三)Zookeeper 存储结构 …

源头厂家定制直线度测量仪 在线与离线检测均可

直线度的检测不再局限于直尺法、重力法等人工检测方式,随着自动化的发展,直线度检测也更需要自动化方便快捷的检测仪器。为此,研发了在线直线度测量仪与离线直线度测量仪,根据不同的需要,选择合适的设备即可。 数据计…

Java集合框架和泛型

1.Java集合框架 架构图: Java的集合框架是一组用于存储和操作数据的类和接口。它提供了各种数据结构,如列表、集合、映射等,以及用于操作这些数据结构的算法和工具。Java集合框架位于Java.util包中,并且是Java编程中常用的核心组…

ROS学习笔记(二):话题通信、服务通信的了解和对应节点的搭建(C++)

ROS学习笔记(二):话题通信、服务通信的了解和对应节点的搭建(C和Python) 前言一、Topics话题通信(C)0、自定义msg消息类型文件1、发布者(Publisher)2、订阅者&#xff08…

引导和服务

目录 一、Linux操作系统引导过程 1、引导过程总览图 2、引导过程的详细步骤 二、系统初始化进程 1、init进程(串行启动) 2、Systemd(并行启动) 3、Centos6与Centos7的区别: 4、Systemd单元类型 5、运行级别所…

buuctf 逆向 findkey wp

首先看看怎么个事 点开也就这样了,没有输入的点,感觉和之前的 “刮开有奖” 有一点点相像 winmain长这个样子 看到消息循环了,下一步肯定就是找回调函数了 乍一看还没有,函数一个个点进去看发现sub_401023(hInstance&#xff09…

网站迁移和SEO:损害排名的常见错误

正在规划站点迁移? 迁移是更困难的 - 通常是可怕的 - SEO任务之一。 为了让它发挥作用,你需要避免常见的陷阱,这些陷阱可能会影响你的知名度,并导致流量和收入的损失。 8 月 11 日,我主持了一场赞助的搜索引擎杂志网…

分享10篇优秀论文,涉及图神经网络、大模型优化、表格分析

引言 第38届AAAI人工智能年度会议将于2024年2月在加拿大温哥华举行。今天给大家分享十篇AAAI2024论文,主要涉及图神经网络,大模型幻觉、中文书法文字生成、表格数据分析、KGs错误检测、多模态Prompt、思维图生成等。 论文获取方式,回复&am…

Win32 TEXT()宏学习

之前学习了_T()宏&#xff1b; _T()是MFC的&#xff1b; TEXT()是win32的&#xff1b; _T("")定义于tchar.h&#xff1b; TEXT宏是windows程序设计中经常遇到的宏&#xff0c;定义在 <winnt.h>中&#xff1b; 如果使用UNICODE字符集&#xff0c;则TEXT&…

小兔鲜儿 uniapp - 项目打包

目录 微信小程序端​ 核心步骤​ 步骤图示​ 条件编译​ 条件编译语法​ 打包为 H5 端​ 核心步骤​ 路由基础路径​ 打包为 APP 端​ 微信小程序端​ 把当前 uni-app 项目打包成微信小程序端&#xff0c;并发布上线。 核心步骤​ 运行打包命令 pnpm build:mp-weix…

RK3399平台入门到精通系列讲解(实验篇)IO 多路复用实验之poll实验

🚀返回总目录 文章目录 一、IO 多路复用:poll介绍二、实验源码2.1、Makefile2.2、poll 实验驱动2.3、poll 驱动测试应用程序一、IO 多路复用:poll介绍 IO 多路复用是一种同步的 IO 模型。IO 多路复用可以实现一个进程监视多个文件描述符。 一旦某个文件描述符准备就绪,就通…

三款推荐的 FTP 工具

&#x1f947; 版权: 本文由【墨理学AI】原创、在CSDN首发、各位大佬、敬请查阅&#x1f389; 声明: 作为全网 AI 领域 干货最多的博主之一&#xff0c;❤️ 不负光阴不负卿 ❤️ 文章目录 三款推荐的 FTP 工具filezillawinscpFinalShell SSHXftp❤️ 人生苦短&#xff0c; 欢迎…

Excelize 入选“2023开源创新榜”优秀开源项目

近日&#xff0c;由中国科协科学技术传播中心、中国计算机学会、中国通信学会、中国科学院软件研究所共同主办&#xff0c;CSDN 承办的 2023 开源创新榜专家评审会在国家科技传播中心成功举办。Excelize 电子表格文档开源基础库入选“2023开源创新榜”优秀开源项目。 评审委员…