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

devtools/2024/11/25 9:13:59/

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. 必须空文件夹才可以设置,因此如果你在创建的时候忘记了。那么你就得重新下载源码
fsutil.exe file setCaseSensitiveInfo <your path> enable # 管理员执行

1. 拉取鸿蒙源码

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

1.1 前提条件

1.1.1 安装git和git-lfs
sudo apt install git git-lfs
1.1.2 配置用户信息
git config --global user.name "yourname"
git config --global user.email "your-email-address"
git config --global credential.helper store
1.1.3 安装repo
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

sudo apt install python3.8

接下来执行:

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

image-20241121124632865

之后选择 “2”

验证一下:

image-20241121124710088

1.1.4.2 使用Conda

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

conda create -n <your_nmae> python=3.8

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

conda activate <your_name>

1.2 拉取代码

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

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>...<一段哈希代码>,直接找到目录,删除掉,然后重新执行

repo sync -c

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

1.4 编译工具

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

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

sudo apt install curl wget unzip

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

bash build/prebuilts_download.sh

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

image-20241120183408673

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

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

2.1 修改终端类型

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

先看看自己的类型:

ls -l /bin/sh

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

sudo dpkg-reconfigure dash

选择“NO”

image-20241121132706859

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

image-20241121132613941

2.2 安装必要依赖

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

2.2.1 python包
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有什么版本:

image-20241120130354397

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

sudo snap install cmake

可能会出现如下问题:

image-20241120131125222

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

sudo snap install cmake --classic

以下表示安装成功:

image-20241120131317258

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

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

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,他也会安装。

源码根目录执行:

./build/build_script/env_setup.sh

然后刷新一下PATH

 source ~/.bashrc

2.3 指定include头文件

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

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

aei4zsih.wvp

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

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

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

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

khxrfyjf.vg4

3. 创建example

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

链接:编写 Hello World”程序

4. 安装hb工具

参考:安装编译工具

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

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

hb help

没安装上的话,使用:

python3 -m pip install --user build/hb

然后添加PATH:

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

然后测试一下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5. 设置target

hb set

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

image-20241121182126875

6. 开始编译

hb build

编译结果:

2. 安装DevEco Device Tool

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

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

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

image-20241118111728926

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


http://www.ppmy.cn/devtools/136801.html

相关文章

python基于RSA算法的数字签名生成软件(附源码,文档)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

银行卡OCR 识别 API 接口如何用Java如何调用

银行卡 OCR 识别是利用光学字符识别技术&#xff0c;对银行卡上的卡号、有效期、持卡人姓名等信息进行快速、准确识别的过程。而银行卡 OCR 识别 API 接口则是将这种识别能力以接口的形式提供给开发者&#xff0c;使其能够轻松地集成到各种应用程序中&#xff0c;实现对银行卡信…

20241124 Typecho 视频插入插件

博文免不了涉及到视频插入这些,网上的插件都或多或少的比较重,和Typecho的风格不搭配 后面就有了DPlay插件精简而来的VideoInsertion插件 VideoInsertion: Typecho 视频插入插件 目录结构 rockhinlink-ht2:/var/www/html/typecho/usr/plugins/VideoInsertion$ tree -h [4.…

前端项目支持tailwindcss写样式

安装 npm install -D tailwindcss npx tailwindcss init配置 tailwind.config.js //根据个人需求填写&#xff0c;比如vue简单配置 /** type {import(tailwindcss).Config} */ module.exports {darkMode: "class",corePlugins: {preflight: false},content: [&quo…

Spring—Bean工厂进一步学习

基于xml的spring应用 XML配置方式: 功能描述: bean的id和全限定名配置 通过name设置bean的别名&#xff0c;通过别名也能直接获取到bean实例 bean的作用范围 bean的实例化时机&#xff0c;是否延迟加载 bean实例化后自动执行的初识方法,method指定方法 bean实例销毁前的方法 设…

Python XML 解析

Python XML 解析 XML&#xff08;eXtensible Markup Language&#xff09;是一种用于存储和传输数据的标记语言。它是一种自我描述的语言&#xff0c;允许用户定义自己的标签和文档结构。Python 提供了多种库来解析 XML 数据&#xff0c;其中最常用的是 xml.etree.ElementTree…

Elasticsearch 实战应用:全面解析与实践

Elasticsearch 是一个基于 Lucene 构建的开源分布式搜索引擎,广泛应用于日志分析、全文搜索、实时分析等场景。它的高性能、高可扩展性和强大的查询能力使其成为现代应用中的核心组件之一。在本文中,我们将介绍 Elasticsearch 的基本概念、配置与搭建,并通过一个实际应用案例…

【unity小技巧】unity常用的编辑器扩展

文章目录 1. **自定义 Inspector&#xff08;Inspector 面板&#xff09;**示例&#xff1a; 2. **Editor Window&#xff08;自定义编辑器窗口&#xff09;**示例&#xff1a; 3. **PropertyDrawer&#xff08;自定义属性绘制&#xff09;**示例&#xff1a; 4. **菜单项&…