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

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

1. 拉取鸿蒙源码

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

1.1 前提条件

1.1.0 更换终端

官方要求使用bash

先看一下:

ls -l /bin/sh

image-20241121153412984

默认为dash

执行以下命令更改:

sudo dpkg-reconfigure dash

然后之后选择“no”

image-20241123113935635

再检查一下

image-20241123114000770

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.9版本,先安装python

sudo apt install python3.9

接下来执行:

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 2
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
sudo update-alternatives --config python3

之后选择 “Python3.9”

验证一下:

image-20241125101820731

1.1.4.2 使用Conda

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

conda create -n <your_nmae> python=3.9

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

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

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

2. 安装依赖

2.1 手动安装依赖

2.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

2.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

2.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

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

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

./build/build_scripts/env_setup.sh

image-20241121180803049

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

 source ~/.bashrc

2.3 安装hb构建工具

参考:安装编译工具

python3 -m pip install --user build/hb

然后添加PATH:

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

然后测试一下:

image-20241121181410288

2.4 获取编译工具

在容器中源码目录执行

bash build/prebuilts_download.sh

出现以下表示成功:

image-20241121162930525

2.5 链接头文件

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/

3. 编译

3.1 创建example

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

链接:编写 Hello World”程序

3.2 开始编译

参考链接:编译

3.2.1 脚本方式编译(推荐)

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

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

3.2.2 hb方式编译

源码根目录执行

image-20241121182100335

hb set

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

image-20241121182126875

之后就可以进行编译了

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

3.3 编译结果

image-20241124185116358

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


http://www.mrgr.cn/news/77968.html

相关文章:

  • Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:电影院后台管理系统(前后端源码 + 数据库 sql 脚本)
  • 免费好用的静态网页托管平台全面对比介绍
  • neo4j图数据库community-5.50创建多个数据库————————————————
  • Android逆向题解-攻防世界- easy-app(太湖杯)
  • 分层架构 IM 系统之 Entry 部署模式
  • 第三课 Textures纹理资源导入设置检查与优化
  • C++设计模式-策略模式-StrategyMethod
  • 分割一切2.0,SAM2详解
  • 接口性能优化宝典:解决性能瓶颈的策略与实践
  • java 二分查找 方法 详解
  • 虚幻引擎---术语篇
  • 4.SynchronousMethodHandler
  • Spring Boot 动态数据源切换
  • 十一、排他思想、window、延时定时器、间歇函数、时间戳、location、navigator、history、本地存储localStorage
  • C++设计模式-享元模式
  • 安装 Docker(使用国内源)
  • 从0开始学PHP面向对象内容之常用设计模式(适配器,桥接,装饰器)
  • 大模型系列11-ray
  • 疑难Tips:NextCloud域名访问登录时卡住,显示违反内容安全策略
  • k8s网络服务
  • C#设计模式——抽象工厂模式(重点)
  • Vue3响应式原理
  • Springboot项目搭建-Maven打包编译
  • 演示如何使用 `nn.CrossEntropyLoss` 来计算交叉熵损失,计算损失值的演示代码,和讲解 ,CrossEntropyLoss 损失数值等于零的原因
  • hugo文章支持数学公式
  • oracle 12c查看执行过的sql及当前正在执行的sql