HarmonyOS 编译系统源码

Posted 王睿丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HarmonyOS 编译系统源码相关的知识,希望对你有一定的参考价值。

一、获取源码

1、准备工作

注意: 【若已安装git和repo可忽略此节】

(1)注册码云gitee账号

(2)注册码云SSH公钥请参考码云帮助中心

(3)安装git客户端git-lfs并配置用户信息

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

(4)安装码云repo工具,可以执行如下命令

curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo  #如果没有权限,可下载至其他目录,并将其配置到环境变量中
chmod a+x /usr/local/bin/repo
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests

2、下载源码

repo init -u https://gitee.com/openharmony/manifest.git  -b OpenHarmony_1.0.1_release --no-repo-verify
repo sync -c  
repo forall -c 'git lfs pull'

成功显示下列分支,则表示下载成功!
在这里插入图片描述

二、搭建系统环境

方式一:Docker 环境

请点击此链接进入

方式二:Ubuntu 环境

本文第三节将详细讲解该环境的搭建步骤。

三、Ubuntu 编译环境准备

1、安装和配置Python

官方要求: Python 在 3.7.4及以上版本,满足可忽略(1)、(2)、(3)步骤

(1)查看当前Python版本 【前提条件需要:Python 3.7.4及以上版本】

python --version

(2)如果低于python3.7版本,不建议直接升级,请按照如下步骤重新安装。以python3.8为例,按照以下步骤安装python。

  1. 运行如下命令,查看Ubuntu版本
cat /etc/issue
  1. 如果 Ubuntu 版本为18+,运行如下命令。
sudo apt-get install python3.8
  1. 如果 Ubuntu版本为16
  • a. 安装依赖包
sudo apt update && sudo apt install software-properties-common
  • b. 添加deadsnakes PPA 源,然后按回车键确认安装。
sudo add-apt-repository ppa:deadsnakes/ppa
  • c. 安装 python3.8
sudo apt upgrade && sudo apt install python3.8

(3)设置python和python3 软链接为python3.8。

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1

(4)安装并升级Python包管理工具(pip3),任选如下一种方式。

  • 命令行方式:
sudo apt-get install python3-setuptools python3-pip -y
sudo pip3 install --upgrade pip
  • 安装包方式:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py

2、创建系统环境目录

在home目录下,创建HarmonyOSDev文件夹,如图:
在这里插入图片描述
该目录作为下面安装环境的根目录

mkdir HarmonyOSDev

3、安装gn

(1)下载gn安装包

sudo wget https://repo.huaweicloud.com/harmonyos/compiler/gn/1717/linux/gn-linux-x86-1717.tar.gz

报错:Unable to establish SSL connection.(无法建立SSL连接
解决:把https改成http

(2)在根目录下创建gn文件夹

mkdir gn

(3)解压ninja安装包至/home/HarmonyOSDev/gn路径下

tar -xvf gn-linux-x86-1717.tar.gz

(4)设置环境变量

sudo gedit ~/.bashrc

将以下命令拷贝到.bashrc文件的最后一行,保存并退出

export PATH=/home/HarmonyOSDev/gn:$PATH

(5)生效环境变量

source ~/.bashrc

4、安装ninja

(1)下载ninja安装包

sudo wget https://repo.huaweicloud.com/harmonyos/compiler/ninja/1.9.0/linux/ninja.1.9.0.tar

报错:Unable to establish SSL connection.(无法建立SSL连接)
解决:把https改成http

(2)在根目录下创建ninja文件夹

mkdir ninja

(3)解压ninja安装包至/home/HarmonyOSDev/ninja路径下

tar -xvf ninja.1.9.0.tar

(4)设置环境变量

sudo gedit ~/.bashrc

将以下命令拷贝到.bashrc文件的最后一行,保存并退出

export PATH=/home/HarmonyOSDev/ninja/ninja:$PATH

(5)生效环境变量

source ~/.bashrc

5、安装hc-gen

(1)下载hc-gen安装包

sudo wget https://repo.huaweicloud.com/harmonyos/compiler/hc-gen/0.65/linux/hc-gen-0.65-linux.tar

报错:Unable to establish SSL connection.(无法建立SSL连接)
解决:把https改成http

(2)在根目录下创建hc-gen文件夹

mkdir hc-gen

(3)解压hc-gen安装包至/home/HarmonyOSDev/hc-gen路径下

tar -xvf hc-gen-0.65-linux.tar

(4)设置环境变量

sudo gedit ~/.bashrc

将以下命令拷贝到.bashrc文件的最后一行,保存并退出

export PATH=/home/HarmonyOSDev/hc-gen/hc-gen:$PATH

(5)生效环境变量

source ~/.bashrc

6、安装llvm

(1)下载llvm安装包

sudo wget https://repo.huaweicloud.com/harmonyos/compiler/clang/9.0.0-36191/linux/llvm-linux-9.0.0-36191.tar

报错:Unable to establish SSL connection.(无法建立SSL连接)
解决:把https改成http

(2)在根目录下创建llvm文件夹

mkdir llvm

(3)解压llvm安装包至/home/HarmonyOSDev/llvm路径下

sudo tar -xvf llvm-linux-9.0.0-36191.tar 

(4)设置环境变量

sudo gedit ~/.bashrc

将以下命令拷贝到.bashrc文件的最后一行,保存并退出

export PATH=/home/HarmonyOSDev/llvm/llvm/bin:$PATH

(5)生效环境变量

source ~/.bashrc

7、安装hb

(1)运行如下命令安装hb

python3 -m pip install --user ohos-build

(2)设置环境变量

sudo gedit ~/.bashrc

将以下命令拷贝到.bashrc文件的最后一行,保存并退出

export PATH=~/.local/bin:$PATH

(3)更新环境变量

source ~/.bashrc

(4)执行"hb -h",有打印以下信息即表示安装成功

	usage: hb

	OHOS build system
	positional arguments:
  	 {build,set,env,clean}
    	  build               Build source code
    	  set                 OHOS build settings
   	  env                 Show OHOS build env
    	  clean               Clean output
	optional arguments:
 	 -h, --help            show this help message and exit

(5)如果装错,卸载命令执行如下:

python3 -m pip uninstall ohos-build

8、升级 jdk

【官方要求:jdk 版本要在1.8以上】

(1)下载 jdk
jdk官网

(2)解压

tar -xzvf jdk-8u144-linux-x64.tar.gz

(3)移到usr/lib/jvm/目录下

sudo mv jdk1.8.0_144/ /usr/lib/jvm/jdk1.8.0_144

(4)查看当前jdk的优先级

sudo update-alternatives --config java
sudo update-alternatives --config javac

状态会有两种:自动模式手动模式

自动模式既默认模式;手动模式需要手动切换,重启后会自动切为自动模式的,而自动模式的只有一个,默认是优先级最高的那个,所以如果想把1.8设置默认的,需要把优先级设为最高

java 和 javac 都要选择
在这里插入图片描述
(5)更新

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_144/bin/java 1072
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_144/bin/javac 1072

(6)配置 JAVA_HOME(选其中一种方式配置即可)

  • profile 配置
JAVA_HOME=/usr/lib/jvm/jdk1.8.0_144/   
source /etc/profile
  • bashrc 配置
sudo vim ~/.bashrc 
source ~/.bashrc

(7)检查一下,jdk版本是否升级成功

java -version

9、常见问题

(1)hb 安装过程中出现乱码、段错误

  • 现象描述
    执行“python3 -m pip install --user ohos-build”出现乱码、段错误

  • 可能原因
    pip版本过低

  • 解决办法
    执行如下命令升级pip

python3 -m pip install -U pip

(2)hb 安装过程中提示"cannot import ‘sysconfig’ from ‘distutils’"

  • 现象描述
    执行 python3 -m pip install --user ohos-build”提示"cannot import ‘sysconfig’ from ‘distutils’

  • 可能原因
    缺少distutils模块。

  • 解决办法

sudo apt-get install python3.8-distutils

(3)hb 安装过程中提示"module ‘platform’ has no attribute ‘linux_distribution’"

  • 现象描述
    执行 python3 -m pip install --user ohos-build”提示"module ‘platform’ has no attribute ‘linux_distribution’

  • 可能原因
    python3 pip安装兼容性问题。

  • 解决办法
    执行如下命令重新安装pip。

sudo apt remove python3-pip
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py

(4)Linux编译服务器终端输入不识别的命令时提示“ImportError: No module named apt_pkg”

  • 现象描述
    Linux编译服务器终端输入不识别的命令时,提示"ImportError: No module named apt_pkg"

  • 可能原因
    python3 apt安装兼容性问题。

  • 解决办法
    执行如下命令重新安装python3-apt。

sudo apt-get remove  python3-apt
sudo apt-get install python3-apt

(5)编译时报错: SOLINK ./libopenssl_shared.so,FAILED: libcjson_shared.so

思路:将 llvm 换成 llvm9 版本

解决办法

  • a. 下载llvm9
sudo wget https://repo.huaweicloud.com/harmonyos/compiler/clang/9.0.0-36191/linux/llvm-linux-9.0.0-36191.tar

报错:Unable to establish SSL connection.(无法建立SSL连接)
解决:把https改成http

  • b. 更改 llvm版本
    一定要更改成 llvm 9的版本
export PATH=/home/HarmonyOSDev/llvm/llvm/bin:$PATH	
  • c. 更改 clang 版本(选其中一种方式即可)
    clang 版本 换成 (llvm9版本)llvm/bin目录下 clang 9

(6)解决:[OHOS ERROR] clang not found, install it please

  • a. 首先确定自己是否安装且配置了llvm和clang
  • b. 一般Ubuntu都会自带llvm和clang,所以我们要更改系统指定的llvm和clang变为我们下载的llvm 9.0版本和clang 9.0版本即可。
    llvm 9下载地址

(7)解决:安装配置好 hb后,hb -h检测不到环境的问题

  • a. 打开配置文件
sudo gedit ~/.bashrc
  • b. 检查bashrc 文件末尾是否有
export PATH=~/.local/bin:$PATH
  • c. 确定好后,切换到 root 账户下
source ~/.bashrc
  • d. Ctrl + d 切换回普通用户

  • e. 执行"hb -h",有打印以下信息即表示安装成功

		usage: hb

		OHOS build system
		positional arguments:
  		 {build,set,env,clean}
    	 	 build               Build source code
    	 	 set                 OHOS build settings
   	 	 env                 Show OHOS build env
    		  clean               Clean output
		optional arguments:
 		 -h, --help            show this help message and exit

(8)Running pip as root will break packages and permissions. You should install packages reliably by using venv: https://pip.pypa.io/warnings/venv

分析原因:
以 root 身份运行 pip 会破坏包和权限

解决办法:

不要以root的身份去执行你的命令
Ctrl + d 退出root模式

四丶编译HarmonyOS 源码

声明:【请按照顺序执行,避免踩坑】

1、在源码根目录下打开终端

在这里插入图片描述

2、在root 下生效环境变量,预防报错

sudo -s
su root
source ~/.bashrc

3、用hb 设置开发环境

hb set
.
这里我们选择:ipcamera_hispark_taurus
ENTER 回车

在这里插入图片描述
完成后,会在根目录显示 ohos_config.json 文件。
在这里插入图片描述

4、执行脚本,开始编译

 python3 build.py

显示:[OHOS INFO] ipcamera_hispark_taurus build success
表示编译成功!
在这里插入图片描述

5、编译结果

编译结果会产生在 out 文件夹
在这里插入图片描述

6、常见问题

  • 情况一:
    在这里插入图片描述
    解决办法:
    按照 步骤3 走一遍。

情况二:
在这里插入图片描述
在这里插入图片描述

解决办法:
请严格按照步骤 2~4,重新走一遍!

以上是关于HarmonyOS 编译系统源码的主要内容,如果未能解决你的问题,请参考以下文章

鸿蒙内核源码分析(ninja应用篇) | 简单而快速的构建系统 | 百篇博客分析HarmonyOS源码 | v61.01

鸿蒙内核源码分析(编译脚本篇) | 如何防编译环境中的牛皮癣 | 百篇博客分析HarmonyOS源码 | v58.01

鸿蒙内核源码分析(源码注释篇) | 鸿蒙必定成功,也必然成功 | 百篇博客分析HarmonyOS源码

鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程 | 百篇博客分析HarmonyOS源码 | v59.01

鸿蒙内核源码分析(静态链接篇) | 完整小项目看透静态链接过程 | 百篇博客分析HarmonyOS源码 | v54.01

鸿蒙内核源码分析(GN应用篇) | GN语法及在鸿蒙的使用 | 百篇博客分析HarmonyOS源码 | v60.01