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

F. 前言

教程基于OpenHarmony5.0 Release(以下简称OHS_5),WSL2,Ubuntu22.04

为什么做这个教程?官方的文档写的比较乱,个人也是试了好久才搞出来环境。这里记录一下。

为什么用WSL?因为官方的DevDec Device Tool是Windows + Ubuntu联合开发的,自然想到WSL子系统方便不少。

Docker. Docker镜像获取

如果你需要我打包好的Docker镜像环境,那么去看下面这篇博客

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

0. 修改文件系统

Windows文件系统为NTFS,对大小写不敏感,而Linux文件系统为EXT4,对大小写敏感。由于Linux内核中存在大小写敏感文件,并且Harmony源码较大,个人选择外挂Windows硬盘来同步代码。

这也导致了一个问题,Linux中正常的大小写敏感的文件,在Windows中则被合并。这也导致了编译的时候产生丢失文件的错误。

这个坑我其实没想到。也是搞了好几天。解决了很多报错,最后发现丢失了很多文件,以为是同步问题。最后慢慢才想到这个问题,只能说常在河边走,哪有不湿鞋

解决这个有两种方式,以下来进行介绍:

0.1 迁移WSL2 Ubuntu

默认在C盘,在WSL环境下的文件夹其跟文件系统跟随子系统。但是你要是同步源码,光源码就40多G,还有编译工具链等等,所以。。。

这里直接参考我的博客,比较简单:

[WSL][教程]WSL2系统迁移到其他盘以及其他电脑教程

0.2 修改文件夹属性(不推荐)

极力不推荐,小项目可以,但是像这种大项目。用解压在NTFS下面,即使大小写不敏感了,但是所有的软连接都会消失。最后就会发现各种各样的确实文件的问题!!!

NTFS默认为大小写不敏感,我们给他改成敏感的。

参考链接:区分大小写

会有以下问题:

  1. WSL1上不能递归
  2. 必须空文件夹才可以设置,因此如果你在创建的时候忘记了。那么你就得重新下载源码
power 复制代码
fsutil.exe file setCaseSensitiveInfo <your path> enable # 管理员执行

1. 拉取鸿蒙源码

参考链接:开源鸿蒙5.0发布文档 ,推荐使用镜像站的方式。但是下面用repo方式做介绍。

1.1 前提条件

1.1.1 安装git和git-lfs
bash 复制代码
sudo apt install git git-lfs
1.1.2 配置用户信息
bash 复制代码
git config --global user.name "yourname"
git config --global user.email "your-email-address"
git config --global credential.helper store
1.1.3 安装repo
bash 复制代码
curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > ~/repo
chmod a+x ~/repo
vim ~/.bashrc
export PATH=~/:$PATH # 加到最后一行
source ~/.bashrc
1.1.4 指定python版本

以下方式二选一

1.1.4.1 python安装包

最好使用python3.8版本,先安装python

bash 复制代码
sudo apt install python3.8

接下来执行:

bash 复制代码
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 2 
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1
sudo update-alternatives --config python3

之后选择 "2"

验证一下:

1.1.4.2 使用Conda

使用Conda直接新建环境的时候直接指定版本即可

bash 复制代码
conda create -n <your_nmae> python=3.8

然后激活即可,记得每次编译之类的执行相关操作都要激活这个环境,比较麻烦

bash 复制代码
conda activate <your_name>

1.2 拉取代码

(建议使用镜像的方式)这里介绍的是repo方式,需要镜像方式去开源鸿蒙5.0发布文档

bash 复制代码
repo init -u https://gitee.com/openharmony/manifest -b OpenHarmony-5.0.0-Release --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'

1.3 问题解决

如果拉取途中出现checkout...<folder>...<一段哈希代码>,直接找到目录,删除掉,然后重新执行

bash 复制代码
repo sync -c

之后再进行继续进行上一步中下面的步骤。

1.4 编译工具

参考:https://device.harmonyos.com/cn/docs/documentation/guide/ide-rk3568-compile-0000001238957517

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

ba 复制代码
sudo apt install curl wget unzip

源码根目录执行:(注意先进入源码根目录)

bash 复制代码
bash build/prebuilts_download.sh

**如果途中出现npm install error那么就是网络问题,多试几次就好了。我大概试了六次左右才安装好,我还以为一直是其他的问题。。浪费挺多时间。**就是下面这个

2. 搭建编译环境(重头戏)

前提是你已经通过上一节,准备好了前提条件。以及拿到了5.0源码

2.1 修改终端类型

官方要求使用bash,WSL默认为dash

先看看自己的类型:

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

如果你是dash或者其他类型,运行如下进行切换:

bash 复制代码
sudo dpkg-reconfigure dash

选择"NO"

之后再看一下,确实是bash就行。

2.2 安装必要依赖

这里一定要按照我这个顺序来,**也不要合并、拆分!**这里的依赖和官网给的不一样,有很多我自己试错的结果!!!

2.2.1 python包
bash 复制代码
sudo apt install python3-pip python3.8-distutils
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple json5
1.1.4 安装cmake

OHS_5需要最低的cmake版本为3.28.2。

我们先看看目前直接安装的cmake有什么版本:

可以看到apt版本有点老了,所以我们选择snap安装

bash 复制代码
sudo snap install cmake

可能会出现如下问题:

这是因为其是普通的包封装,无所谓。直接执行:

bash 复制代码
sudo snap install cmake --classic

以下表示安装成功:

1.1.6 安装Ninja
bash 复制代码
sudo apt install ninja-build
1.1.7 其他必要依赖
1.1.7.2 手动安装

如果你不使用qemu这类的,可以试试下面的

bash 复制代码
sudo apt update && sudo apt install binutils binutils-dev git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib gcc-multilib libc6-dev-i386 libc6-dev lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip ruby genext2fs device-tree-compiler make libffi-dev e2fsprogs pkg-config perl openssl libssl-dev libelf-dev libdwarf-dev u-boot-tools mtd-utils cpio doxygen liblz4-tool openjdk-8-jre gcc g++ texinfo dosfstools mtools default-jre default-jdk libncurses5 apt-utils wget scons python3.8-distutils tar rsync git-core libxml2-dev lib32z-dev grsync xxd libglib2.0-dev libpixman-1-dev kmod jfsutils reiserfsprogs xfsprogs squashfs-tools pcmciautils quota ppp libtinfo-dev libtinfo5 libncurses5-dev libncursesw5 libstdc++6 gcc-arm-none-eabi vim ssh locales libxinerama-dev libxcursor-dev libxrandr-dev libxi-dev
1.1.7.1 使用官方的脚本( 不推荐)

官方的脚本会安装许多额外的东西,比如如果你不需要qemu,他也会安装。

源码根目录执行:

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

然后刷新一下PATH

bash 复制代码
 source ~/.bashrc

2.3 指定include头文件

如果你在没有链接的情况下编译通过了,那么可以跳过这一节,如果你担心编译不通过,那么建议提前链接。

**先看看你的/usr/include下面有没有sys文件夹,没有的话执行下面的步骤,有的话可以跳过。**下面这个是有的:

没有的话执行下面的步骤:

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

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

使用软链给他链接过来,这里看下软连接之后的结果:

3. 创建example

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

链接:编写 Hello World"程序

4. 安装hb工具

参考:安装编译工具

5.0 版本比较依赖这个工具,所以你逃不开,即使有build.sh

在上面的步骤中,其实已经自动安装了,可以用下面工具检查一下,如果报错,说明没装上,正常现象。

bash 复制代码
hb help

没安装上的话,使用:

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

然后添加PATH:

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

然后测试一下:

5. 设置target

bash 复制代码
hb set

这里我选择的是RK3568,对应DAYU200的板子

6. 开始编译

bash 复制代码
hb build

编译结果:

2. 安装DevEco Device Tool

直接参考这个链接:搭建开发环境

还有导入源码,编译运行等步骤,直接在上面的链接里面往后看就行。了解一下怎么个操作方法。这个时候你如果去尝试编译的话,大概率会出错。

而且我这里这个东西还一直加载不出来。

L. 参考

https://blog.csdn.net/m0_53721382/article/details/128786638

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

https://device.harmonyos.com/cn/docs/documentation/guide/ide-rk3568-compile-0000001238957517

https://www.cnblogs.com/jsxubar/p/17622352.html

0_53721382/article/details/128786638)

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

https://device.harmonyos.com/cn/docs/documentation/guide/ide-rk3568-compile-0000001238957517

https://www.cnblogs.com/jsxubar/p/17622352.html

相关推荐
我好饿142 分钟前
Linux入门教程 第十五章 Linux 系统调优工具
linux·运维·网络
萌虎爱分享1 小时前
Linux 防火墙 (firewalld) 管理完整指南
linux·运维·防火墙·firewalld
mCell5 小时前
Docker 进阶教程
运维·docker·容器
mCell5 小时前
Docker 入门教程
运维·docker·操作系统
祈祷苍天赐我java之术5 小时前
Linux 进阶之性能调优,文件管理,网络安全
java·linux·运维
ajassi20006 小时前
开源 C++ QT Widget 开发(七)线程--多线程及通讯
linux·c++·qt·开源
孤雪心殇6 小时前
如何安全,高效,优雅的提升linux的glibc版本
linux·后端·golang·glibc
潇凝子潇6 小时前
获取服务器指标的信息
linux·运维·服务器
FreeBuf_7 小时前
Chrome高危零日漏洞PoC公开,已被用于野外攻击
linux·运维·服务器·安全·web安全
小白银子9 小时前
零基础从头教学Linux(Day 20)
linux·运维·服务器·php·国安工程师