About 11 min

颜渊问仁。子曰:“克己复礼为仁。一日克己复礼,天下归仁焉。为仁由己,而由人乎哉?”颜渊曰:“请问其目。”子曰:“非礼勿视,非礼勿听,非礼勿言,非礼勿动。”颜渊曰:“回虽不敏,请事斯语矣。” 《论语》:颜渊篇

百篇博客分析|本篇为:(环境脚本篇) | 编译鸿蒙原来很简单

本篇用两个脚本完成鸿蒙(L1)的编译环境安装/源码下载/编译过程,让编译,调试鸿蒙从此变的简单。

下载 >> 离线文档.鸿蒙内核源码分析(百篇博客分析.挖透鸿蒙内核).pdf

编译构建相关篇为:

很香的 Docker

  • 如果只是为了编译鸿蒙,初级的接触鸿蒙,docker是很香的,从第一次接触docker就对它爱不释手, 脏活累活它干了,少了太多的麻烦。 docker 编译鸿蒙看编译环境篇就行了, L1L2 都编译通过了。

    • [v50。xx 鸿蒙内核源码分析(编译环境篇) | docker编译鸿蒙真的很香 ]
  • 如果要深入的了解鸿蒙,比如调试鸿蒙的代码或编译工具,就需要另辟蹊径了。 下图为调试编译工具hb 的过程,有了调试环境,鸿蒙很像光着屁屁的小孩,无限风光则尽收眼底。

但本篇不是说如何调试去看屁屁,那会在后续篇章中趴开了看仔细,这里是要解决调试之前的准备工作。

调试之前的准备

个人喜欢做一劳永逸的事,如果有试过手动去安装鸿蒙开发环境,下载源码,确保编译成功其实是件非常麻烦的事情,在翻看大量资料( http://weharmonyos/openharmony ), 在虚拟机和WSL2上都跑通之后,发现其中的坑不少,这些坑本身没有技术含量,知道了也就知道了,但它们却跟牛皮癣一样,遇到了就不容易好老复发真烦人。 如何防止得牛皮癣的最好办法不是去治疗牛皮癣,而是不得牛皮癣,打上牛皮癣的疫苗。 这是本篇存在的意义,让整个过程简单,舒适,一气呵成。

Ubuntu 20。04 LTS

脚本获取方式: 1。直接下载 2。本篇内容 ctrl+c/v

turing@ubuntu: wget http://weharmonyos.com/weharmony/L1/weharmonyos。sh
turing@ubuntu: wget http://weharmonyos.com/weharmony/L1/path。sh
1
2

两个脚本文件在 Ubuntu 20。04 LTS下运行没有问题, 推荐大家统一使用这个版本,尽量不要去折腾其他环境,真的,很容易遇到牛皮癣。

脚本1: sudo ./weharmonyos。sh

#!/bin/bash

#使用版本: ubuntu:20。04
#网站: weharmonyos.com
#作者: turing
#本脚完成以下两件事
#1。 安装脚本编译鸿蒙轻量级内核(L1/liteos)所需各种环境
#2。 下载L1最新全量源码包 code-v1。1。1-LTS。tar。gz 至 /home/openharmony
#在脚本所在目录,执行以下命令即可
#turing@ubuntu:~$sudo ./weharmonyos。sh

apt-get update -y
apt-get install curl wget -y
apt-get install vim -y
apt-get install ssh -y
apt-get install git -y
apt-get install python3。8 -y
apt-get install python3-pip -y
apt-get install dosfstools -y
apt-get install mtools -y
apt-get install scons -y
apt-get install make -y
apt-get install libffi-dev -y
apt-get install zip -y
apt-get install python3-distutils -y
apt-get install binutils -y
apt-get install mtd-utils -y
apt-get install libc6-dev-x32 -y
DEBIAN_FRONTEND="noninteractive" TZ="America/New_York" apt-get -y install tzdata
apt-get install default-jre -y
apt-get install default-jdk -y
apt-get install bison -y
apt-get install flex -y
apt-get install bc -y
apt-get install u-boot-tools -y
apt-get install gcc-arm-linux-gnueabi -y
apt-get install build-essential
apt-get install locales
locale-gen "en_US。UTF-8"
rm -rf /bin/sh /usr/bin/python /usr/bin/python3
ln -s /bin/bash /bin/sh
ln -s /usr/bin/python3。8 /usr/bin/python3
ln -s /usr/bin/python3。8 /usr/bin/python
pip3 install --trusted-host mirrors。aliyun。com -i https://mirrors。aliyun。com/pypi/simple setuptools
pip3 install --trusted-host mirrors。aliyun。com -i https://mirrors。aliyun。com/pypi/simple kconfiglib
pip3 install --trusted-host mirrors。aliyun。com -i http://mirrors。aliyun。com/pypi/simple pycryptodome
pip3 install --trusted-host mirrors。aliyun。com -i https://mirrors。aliyun。com/pypi/simple ecdsa
python3 -m pip install --user ohos-build

# 安装编译环境
mkdir -p /home/tools
wget -P /home/tools https://repo。huaweicloud。com/harmonyos/compiler/clang/9。0。0-36191/linux/llvm-linux-9。0。0-36191。tar
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/v12。20。0/node-v12。20。0-linux-x64。tar。gz
wget -P /home/tools https://repo。huaweicloud。com/harmonyos/develop_tools/hmos_app_packing_tool。jar
wget -P /home/tools https://repo。huaweicloud。com/harmonyos/develop_tools/hapsigntoolv2。jar
tar xvf /home/tools/llvm-linux-9。0。0-36191。tar -C /home/tools
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
tar xvf /home/tools/node-v12。20。0-linux-x64。tar。gz -C /home/tools

#删除下载的压缩包
rm -rf /home/tools/*。tar
rm -rf /home/tools/*。gz
#安装ohos/hpm-cli
npm install -g @ohos/hpm-cli --registry https://mirrors。huaweicloud。com/repository/npm/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72

说明:

  • 新环境系统包若没更新过 在 apt-get update -y 阶段会耗时较久
  • 这里拼网速,网速好的情况下一般不会卡壳。

脚本2: ./path。sh

注意执行这个脚本不要用 sudo 
turing@ubuntu:~$./path。sh
如果出现 bash: ./path。sh: Permission denied 加上用户执行脚本的权限后再执行
turing@ubuntu:~$sudo chmod a+x ./path。sh
1
2
3
4

脚本内容:

#!/bin/bash

#使用版本: ubuntu:20。04
#网站: weharmonyos.com
#作者: turing
#本脚本用于设置用户的环境变量,在 ./weharmonyos。sh 执行成功后执行
#在脚本所在目录,执行以下命令即可,注意不要用 sudo 
#turing@ubuntu:~$./path。sh

# 下载源码包,目前鸿蒙轻量级内核最新源码包为code-v1。1。1-LTS。tar。gz,后续有更新请自行替换 
mkdir -p /home/openharmony
wget -P /home/openharmony https://repo。huaweicloud。com/harmonyos/os/1。1。1/code-v1。1。1-LTS。tar。gz
tar xvf /home/openharmony/code-v1。1。1-LTS。tar。gz -C /home/openharmony

sed -i '$aexport PATH=/home/tools/llvm/bin:$PATH' ~/。bashrc
sed -i '$aexport PATH=/home/tools/hc-gen:$PATH' ~/。bashrc
sed -i '$aexport PATH=/home/tools/gcc_riscv32/bin:$PATH' ~/。bashrc
sed -i '$aexport PATH=/home/tools/ninja:$PATH' ~/。bashrc
sed -i '$aexport PATH=/home/tools/node-v12。20。0-linux-x64/bin:$PATH' ~/。bashrc
sed -i '$aexport PATH=/home/tools:$PATH' ~/。bashrc
sed -i '$aexport PATH=~/。local/bin:$PATH' ~/。bashrc
export PATH=/home/tools/llvm/bin:$PATH
export PATH=/home/tools/hc-gen:$PATH
export PATH=/home/tools/gcc_riscv32/bin:$PATH
export PATH=/home/tools/ninja:$PATH
export PATH=/home/tools/node-v12。20。0-linux-x64/bin:$PATH
export PATH=/home/tools:$PATH
export PATH=~/。local/bin:$PATH
source ~/。bashrc

#输入 hb 或 gn 验证是否成功
#turing@ubuntu:~$ hb
#usage: hb [-h] [-v] {build,set,env,clean,deps} ...
#OHOS Build System version 0。4。2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

说明:

  • 下载源码包并解压在 /home/openharmony 目录下
  • 很方便看出鸿蒙需要配置哪些环境变量。
  • 如果验证失败可以去 ~/。bashrc 看下是否环境变量写入成功

编译鸿蒙轻量版(L0~L1/LiteOS)

hb set

turing@ubuntu:/home/openharmony/code-v1。1。1-LTS$# hb set
[OHOS INFO] Input code path: 。
OHOS Which product do you need?  (Use arrow keys)

hisilicon
❯ ipcamera_hispark_aries
wifiiot_hispark_pegasus
ipcamera_hispark_taurus
1
2
3
4
5
6
7
8
  • 目的是设置编译路径,会在根目录下生成 ohos_config。json文件
  •   {
      "root_path": "/home/openharmony/code-v1。1。1-LTS",
      "board": "hispark_aries",
      "kernel": "liteos_a",
      "product": "ipcamera_hispark_aries",
      "product_path": "/home/openharmony/code-v1。1。1-LTS/vendor/hisilicon/hispark_aries",
      "device_path": "/home/openharmony/code-v1。1。1-LTS/device/hisilicon/hispark_aries/sdk_liteos",
      "patch_cache": null
      }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
  • 有了这些路径就为后续的编译过程铺好了路。

hb build 一气呵成

turing@ubuntu:/home/openharmony/code-v1。1。1-LTS$# hb build
1

突然感觉编译鸿蒙好简单 : )

百文说内核 | 抓住主脉络

  • 百文相当于摸出内核的肌肉和器官系统,让人开始丰满有立体感,因是直接从注释源码起步,在加注释过程中,每每有心得处就整理,慢慢形成了以下文章。内容立足源码,常以生活场景打比方尽可能多的将内核知识点置入某种场景,具有画面感,容易理解记忆。说别人能听得懂的话很重要! 百篇博客绝不是百度教条式的在说一堆诘屈聱牙的概念,那没什么意思。更希望让内核变得栩栩如生,倍感亲切。
  • 与代码需不断debug一样,文章内容会存在不少错漏之处,请多包涵,但会反复修正,持续更新,v**.xx 代表文章序号和修改的次数,精雕细琢,言简意赅,力求打造精品内容。
  • 百文在 < 鸿蒙研究站 | 开源中国 | 博客园 | 51cto | csdn | 知乎 | 掘金 > 站点发布,公众号回复 百文 可方便阅读。

按功能模块:

百万注源码 | 处处扣细节

  • 百万汉字注解内核目的是要看清楚其毛细血管,细胞结构,等于在拿放大镜看内核。内核并不神秘,带着问题去源码中找答案是很容易上瘾的,你会发现很多文章对一些问题的解读是错误的,或者说不深刻难以自圆其说,你会慢慢形成自己新的解读,而新的解读又会碰到新的问题,如此层层递进,滚滚向前,拿着放大镜根本不愿意放手。

  • < gitee | github | coding | codechina > 四大码仓推送 | 同步官方源码,公众号中回复 百万 可方便阅读。

关注不迷路 | 代码即人生