OpenHarmony开发环境搭建
OpenHarmony开发环境搭建
背景
因为没有实体的开发硬件,且不想破坏原有的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相关的操作可自行网上查阅(Docker相关)
获取OH源码
这里以获取 master 分支为例,如要下载其他分支,-b 换成其他分支名即可
前提条件
注册码云gitee帐号,注册码云SSH公钥(不使用ssh的话可省略)
安装
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
安装
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和其他的包的过程都是差不多,具体如下:
安装依赖(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
获取源码
wget https://download.qemu.org/qemu-6.2.0.tar.xz
编译安装
#编译 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
参考 sudo xx 找不到命令中的方案一,建立到上面3个位置的软链接 解决问题
分支问题
开始使用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,原因是问题太多,达不到能正式释放的水平。 这是个纯粹社区推动的项目,希望、需要共同参与推动
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了
参考
社区文档: