当前位置: 首页 > article >正文

[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镜像

sudo docker pull ubuntu:20.04

2. 启动Ubuntu 镜像

WARN. 目录说明

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

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

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

OHOS_5/(应该映射的是这一层,也就是`-v`参数后面写的东西,映射到Docker里也应该是这个层级)
	├── OHS_5 (源码真正存放的目录)
	├── openharmony_prebuilts (如果你是repo同步源码,这个东西后面才会有)
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

sudo apt install dialog

3.3 更改时区

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

sudo apt install -y tzdata

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

image-20241123112530852

image-20241123112549182

检查一下日期对不对

image-20241123112610952

3.4 更换终端

官方要求使用bash

先看一下:

ls -l /bin/sh

image-20241121153412984

默认为dash

执行以下命令更改:

sudo dpkg-reconfigure dash

然后之后选择“no”

image-20241123113935635

再检查一下

image-20241123114000770

3.5 安装gxx

sudo apt install gcc g++

3.6 配置git,git-lfs

sudo apt install git git-lfs curl

配置用户信息

git config --global user.name "yourname"
git config --global user.email "your-email-address"
git config --global credential.helper store

3.7 安装repo

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 软件包依赖
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 
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
sudo apt-get install -y libxinerama-dev libxcursor-dev libxrandr-dev libxi-dev
sudo apt install gcc-arm-linux-gnueabi

配置Python软连接映射:

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包依赖
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
pip3 install esdk-obs-python --trusted-host pypi.org
pip3 install six --upgrade --ignore-installed six

这里会出现如下提示:

image-20241123124322117

根据提示,加一个PATH

vim ~/.bashrc
export PATH=/home/taxue/.local/bin:$PATH #加到最后一行
source ~/.bashrc

image-20241123124513512

3.8.1.3 工具链依赖

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

sudo apt install curl wget unzip tar

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

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

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

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

chmod a+x ~/install.sh
sudo bash ~/install.sh

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

source ~/.bashrc

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

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

./build/build_scripts/env_setup.sh

image-20241121180803049

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

 source ~/.bashrc

3.9 安装hb构建工具

参考:安装编译工具

python3 -m pip install --user build/hb

然后添加PATH:

vim ~/.bashrc
export PATH=~/.local/bin:$PATH
source ~/.bashrc

然后测试一下:

image-20241121181410288

3.10 检查源码

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

看看有没有映射过来。

image-20241123223700213

3.11 获取编译工具

在容器中源码目录执行

bash build/prebuilts_download.sh

出现以下表示成功:

image-20241121162930525

3.12 链接头文件

ls /usr/include

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

image-20241125094422197

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

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

sudo ln -s /usr/include/x86_64-linux-gnu/sys /usr/include/

4. 编译

4.1 创建example

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

链接:编写 Hello World”程序

4.2 开始编译

参考链接:编译

4.2.1 脚本方式编译(推荐)

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

sudo bash ./build.sh --product rk3568 --ccache

4.2.2 hb方式编译

源码根目录执行

image-20241121182100335

hb set

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

image-20241121182126875

之后就可以进行编译了

hb build -f # 全量编译
hb build # 增量编译

4.3 编译结果

image-20241124185116358

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


http://www.kler.cn/a/410174.html

相关文章:

  • 【人工智能】PyTorch、TensorFlow 和 Keras 全面解析与对比:深度学习框架的终极指南
  • C语言菜鸟入门·关键字·union的用法
  • 使用java模拟记录软件免费试用次数
  • JavaScript将至
  • Mysql的加锁情况详解
  • springboot集成shiro和前后端分离配置
  • Matlab 深度学习工具箱 案例学习与测试————求二阶微分方程
  • 基于CNN-LSTM的时序预测MATLAB实战
  • 【C++篇】深度解析 C++ List 容器:底层设计与实现揭秘
  • 类和对象plus版
  • 量化交易系统开发-实时行情自动化交易-4.4.做市策略
  • 蓝桥杯每日真题 - 第22天
  • Wireshark抓取HTTPS流量技巧
  • 量子生成对抗网络
  • docker镜像、容器、仓库介绍
  • Flutter:启动屏逻辑处理01:修改默认APP启动图标
  • 大数据实战——MapReduce案例实践
  • Node.js的http模块:创建HTTP服务器、客户端示例
  • uniapp+vue2重新进入小程序就清除缓存,设备需要重新扫码
  • 实现飞2米高的框架(c语言版)
  • 网络渗透测试工具推荐与简介
  • MySQL获取数据库内所有表格数据总数
  • 解决getSubject is supported only if a security manager is allowed
  • HarmonyOS NEXT应用元服务开发Intents Kit(意图框架服务)习惯推荐方案开发者测试
  • 计算机网络——第3章 数据链路层(自学笔记)
  • 机器学习中数据集Upsampling和Downsampling是什么意思?中英文介绍