[OpenHarmony5.0][Docker][教程]OpenHarmony5.0编译环境基于WSL2封装Docker镜像教程

F. 前言

请一定注意!16G内存根本不够用!!不够用的情况下当你的内存占用满了,过一会儿就会报没有报错信息但是提示错误的奇怪原因。。。

光编译就要25G左右的内存。。不够就加钱吧。

官网的文档比较老,没更新,这个要注意!!3.2版本16GB还差不多。

这篇记录了开源鸿蒙5.0 Docker编译环境的打包过程。如果不想使用Docker,可以看下面这篇指导教程

链接:[OpenHarmony5.0][环境][教程]OpenHarmony 5.0源码在WSL2 Ubuntu22.04 编译环境搭建教程

0. Docker镜像获取

如果你不想使用Docker,那么请参考这个链接:

如果你想直接用我封装好的镜像,那么参考这个链接,里面还附带有使用方法:

链接:[OpenHarmony5.0][Docker][环境]OpenHarmony5.0 Docker编译环境镜像下载以及使用方式

1. 拉取Ubuntu镜像

bash 复制代码
sudo docker pull ubuntu:20.04

2. 启动Ubuntu 镜像

WARN. 目录说明

启动的时候要顺便把源码通过Volume映射到Ubuntu里面

下面的-v内容一定要特别注意!!!

你的映射必须要到源码的上一级目录,把源码再加一层文件夹,也就是说你要映射为如下结构!!!

bash 复制代码
OHOS_5/(应该映射的是这一层,也就是`-v`参数后面写的东西,映射到Docker里也应该是这个层级)
	├── OHS_5 (源码真正存放的目录)
	├── openharmony_prebuilts (如果你是repo同步源码,这个东西后面才会有)
bash 复制代码
sudo docker run --name ohos_5_v0.1 -ti -v /home/vernon/OpenHarmony-v5.0.0-Release:/mnt/OHOS_5 -p 10022:22 ohos_5_v0.1 /bin/bash

进入之后默认是root用户。

3. 准备编译条件

3.1 更改默认用户

默认用户是root,比较麻烦,我们切换成普通用户。

需要注意的是,每次进入环境之后都要执行su <your user>切换用户。

直接看这篇文章就可以了:[Docker]在Ubuntu容器中创建sudo用户

3.2 安装Dialog

bash 复制代码
sudo apt install dialog

3.3 更改时区

不更改时区你的https通不过。

bash 复制代码
sudo apt install -y tzdata

安装的时候他会让你选择,按如下的方式选择就可以了:

检查一下日期对不对

3.4 更换终端

官方要求使用bash

先看一下:

bash 复制代码
ls -l /bin/sh

默认为dash

执行以下命令更改:

bash 复制代码
sudo dpkg-reconfigure dash

然后之后选择"no"

再检查一下

3.5 安装gxx

bash 复制代码
sudo apt install gcc g++

3.6 配置git,git-lfs

bash 复制代码
sudo apt install git git-lfs curl

配置用户信息

bash 复制代码
git config --global user.name "yourname"
git config --global user.email "your-email-address"
git config --global credential.helper store

3.7 安装repo

bash 复制代码
curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > ~/repo
vim ~/.bashrc
export PATH=~/:$PATH # 加到最后一行
chmod a+x ~/repo
source ~/.bashrc

3.8 安装依赖

3.8.1 手动安装依赖

3.8.1.1 软件包依赖
bash 复制代码
sudo apt-get install -y apt-utils binutils bison flex bc build-essential make mtd-utils u-boot-tools python3.9 python3-pip git zip unzip curl wget gcc g++ ruby dosfstools mtools default-jre default-jdk scons python3-distutils perl openssl libssl-dev cpio git-lfs m4 ccache zlib1g-dev tar rsync liblz4-tool genext2fs binutils-dev device-tree-compiler e2fsprogs git-core gnupg gnutls-bin gperf lib32ncurses5-dev libffi-dev zlib* libelf-dev libx11-dev libgl1-mesa-dev lib32z1-dev xsltproc x11proto-core-dev libc6-dev-i386 libxml2-dev lib32z-dev libdwarf-dev 
bash 复制代码
sudo apt-get install -y grsync xxd libglib2.0-dev libpixman-1-dev kmod jfsutils reiserfsprogs xfsprogs squashfs-tools  pcmciautils quota ppp libtinfo-dev libtinfo5 libncurses5 libncurses5-dev libncursesw5 libstdc++6  gcc-arm-none-eabi vim ssh locales doxygen
bash 复制代码
sudo apt-get install -y libxinerama-dev libxcursor-dev libxrandr-dev libxi-dev
bash 复制代码
sudo apt install gcc-arm-linux-gnueabi

配置Python软连接映射:

bash 复制代码
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1
3.8.1.2 Python包依赖
bash 复制代码
pip3 install --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple requests setuptools pymongo kconfiglib pycryptodome ecdsa ohos-build pyyaml prompt_toolkit==1.0.14 redis json2html yagmail python-jenkins json5 requests
bash 复制代码
pip3 install esdk-obs-python --trusted-host pypi.org
pip3 install six --upgrade --ignore-installed six

这里会出现如下提示:

根据提示,加一个PATH

bash 复制代码
vim ~/.bashrc
export PATH=/home/taxue/.local/bin:$PATH #加到最后一行
source ~/.bashrc
3.8.1.3 工具链依赖

安装之前先下载需要的工具

ba 复制代码
sudo apt install curl wget unzip tar

把下面的文件写成一个脚本文件,我这里写到了~/install.sh

因为官方的env_setup.sh 写的有问题

bash 复制代码
mkdir -p /home/tools
mkdir -p /home/tools/gn
wget -P /home/tools https://repo.huaweicloud.com/harmonyos/compiler/hc-gen/0.65/linux/hc-gen-0.65-linux.tar
wget -P /home/tools https://repo.huaweicloud.com/harmonyos/compiler/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz
wget -P /home/tools https://repo.huaweicloud.com/harmonyos/compiler/ninja/1.9.0/linux/ninja.1.9.0.tar
wget -P /home/tools https://repo.huaweicloud.com/harmonyos/compiler/gn/1717/linux/gn-linux-x86-1717.tar.gz
wget -P /home/tools https://mirrors.huaweicloud.com/nodejs/v14.15.4/node-v14.15.4-linux-x64.tar.xz
wget -P /home/tools https://hm-verify.obs.cn-north-4.myhuaweicloud.com/qemu-5.2.0.tar.xz
tar -xvf /home/tools/hc-gen-0.65-linux.tar -C /home/tools
tar -xvf /home/tools/gcc_riscv32-linux-7.3.0.tar.gz -C /home/tools
tar -xvf /home/tools/ninja.1.9.0.tar -C /home/tools
tar -xvf /home/tools/gn-linux-x86-1717.tar.gz -C /home/tools/gn
tar -xJf /home/tools/node-v14.15.4-linux-x64.tar.xz -C /home/tools
cp /home/tools/node-v14.15.4-linux-x64/bin/node /usr/local/bin
ln -s /home/tools/node-v14.15.4-linux-x64/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm
ln -s /home/tools/node-v14.15.4-linux-x64/lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx
tar -xJf /home/tools/qemu-5.2.0.tar.xz -C /home/tools
sed -i '$aexport PATH=/home/tools/hc-gen:$PATH' /home/taxue/.bashrc
sed -i '$aexport PATH=/home/tools/gcc_riscv32/bin:$PATH' /home/taxue/.bashrc
sed -i '$aexport PATH=/home/tools/ninja:$PATH' /home/taxue/.bashrc
sed -i '$aexport PATH=/home/tools/node-v14.15.4-linux-x64/bin:$PATH' /home/taxue/.bashrc
sed -i '$aexport PATH=/home/tools/gn:$PATH' /home/taxue/.bashrc

给脚本可执行权限,之后执行:

bash 复制代码
chmod a+x ~/install.sh
bash 复制代码
sudo bash ~/install.sh

脚本执行完记的应用一下。

bash 复制代码
source ~/.bashrc

3.8.2 使用官方脚本(不推荐)

官方脚本4.1.1 版本代码编写有问题,而且用这个脚本5.0版本编译也没通过,3.2版本一次编译通过

bash 复制代码
./build/build_scripts/env_setup.sh

官方脚本使用的时候刷新一下PATH

bash 复制代码
 source ~/.bashrc

3.9 安装hb构建工具

参考:安装编译工具

bash 复制代码
python3 -m pip install --user build/hb

然后添加PATH:

bash 复制代码
vim ~/.bashrc
export PATH=~/.local/bin:$PATH
source ~/.bashrc

然后测试一下:

3.10 检查源码

源码下载请参考:OHOS_5.0中的[源码下载]章节,建议使用镜像站点下载。

看看有没有映射过来。

3.11 获取编译工具

在容器中源码目录执行

bash 复制代码
bash build/prebuilts_download.sh

出现以下表示成功:

3.12 链接头文件

bash 复制代码
ls /usr/include

如果你没有图中的sys文件夹

那么创建一个软连接就可以了

参考https://blog.csdn.net/zxy7311074/article/details/129006675

bash 复制代码
sudo ln -s /usr/include/x86_64-linux-gnu/sys /usr/include/

4. 编译

4.1 创建example

这个参考官方的这个就可以了,这里不再赘述,创建完之后再回来

链接:编写 Hello World"程序

4.2 开始编译

参考链接:编译

4.2.1 脚本方式编译(推荐)

推荐的理由是我这个编译通了,而另一个没有

bash 复制代码
sudo bash ./build.sh --product rk3568 --ccache

4.2.2 hb方式编译

源码根目录执行

bash 复制代码
hb set

按照你自己的板子进行选择

之后就可以进行编译了

bash 复制代码
hb build -f # 全量编译
hb build # 增量编译

4.3 编译结果

L. 参考

https://blog.csdn.net/qq_37958727/article/details/135250436

https://blog.csdn.net/zedelei/article/details/90208183

https://www.cnblogs.com/Maker-Liu/p/16550381.html

https://blog.csdn.net/lian740930980/article/details/126620654

相关推荐
Joren的学习记录3 分钟前
【Linux运维大神系列】docker详解(四)
linux·运维·docker
Elastic 中国社区官方博客1 小时前
让我们把这个 expense 工具从 n8n 迁移到 Elastic One Workflow
大数据·运维·elasticsearch·搜索引擎·ai·信息可视化·全文检索
( •̀∀•́ )9202 小时前
GitHub Actions SSH 部署密钥
运维·ssh·github
louqle2 小时前
docker基本知识及常用命令汇总
运维·docker·容器
学烹饪的小胡桃2 小时前
【运维学习】实时性能监控工具 WGCLOUD v3.6.2 更新介绍
linux·运维·服务器·学习·工单系统
叫致寒吧2 小时前
Docker
运维·docker·容器
杨浦老苏3 小时前
现代流媒体聚合播放器冬瓜TV MAX
docker·群晖·多媒体
白露与泡影3 小时前
使用systemd,把服务装进 Linux 心脏里~
linux·运维·python
l1t4 小时前
用docker安装oracle 19c
运维·数据库·docker·oracle·容器
k***92165 小时前
【Linux】进程概念(五):详解环境变量的本质
linux·运维·服务器