Green 发表于 2021-7-21 12:31:09

鸿蒙内核源码分析(环境脚本篇) | 有了它编译鸿蒙好简单 | 百篇博客分析HarmonyOS源码 | v58.01

OpenHarmony | 鸿蒙研究站 | WeHarmony < 国内 | 国外 >

百篇博客系列篇.本篇为:
v58.xx 鸿蒙内核源码分析(环境脚本篇) | 有了它编译鸿蒙好简单| 51 .c .h .o 本篇用两个脚本完成鸿蒙(L1)的 编译环境安装/源码下载/编译过程,让编译,调试鸿蒙从此变的简单.
编译模块相关篇为:

[*]v60.xx 鸿蒙内核源码分析(GN应用篇) | GN语法及在鸿蒙的使用| 51 .c .h .o
[*]v59.xx 鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程| 51 .c .h .o
[*]v57.xx 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视GCC编译全过程| 51 .c .h .o
[*]v50.xx 鸿蒙内核源码分析(编译环境篇) | docker编译鸿蒙真的很香| 51 .c .h .o
很香的 Docker


[*]如果只是为了编译鸿蒙,初级的接触鸿蒙,docker是很香的,从第一次接触docker就对它爱不释手, 脏活累活它干了,少了太多的麻烦. docker 编译鸿蒙看编译环境篇就行了, L1 和 L2 都编译通过了.
   
[*]v50.xx 鸿蒙内核源码分析(编译环境篇) | docker编译鸿蒙真的很香| 51 .c .h .o   
   
[*]如果要深入的了解鸿蒙,比如调试鸿蒙的代码或编译工具,就需要另辟蹊径了. 下图为调试编译工具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
两个脚本文件在 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

# 下载源码包,目前鸿蒙轻量级内核最新源码包为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

# 安装编译环境
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/

说明:

[*]新环境系统包若没更新过 在 apt-get update -y 阶段会耗时较久
[*]下载 llvm 和 源码阶段 因包较大,会有一定的耗时
[*]源码解压在 /home/openharmony 目录下
[*]总之这里拼网速,网速好的情况下一般不会卡壳.
脚本2: ./path.sh
注意执行这个脚本不要用 sudo
turing@ubuntu:~$./path.sh
如果出现 bash: ./path.sh: Permission denied 加上用户执行脚本的权限后再执行
turing@ubuntu:~$sudo chmod a+x ./path.sh
脚本内容:
#!/bin/bash

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

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
说明:

[*]很方面的看出鸿蒙需要配置哪些环境变量.
[*]如果验证失败可以去 ~/.bashrc 看下是否 环境变量写入成功
编译鸿蒙轻量版(L0~L1/LiteOS)
hb set
turing@ubuntu:/home/openharmony/code-v1.1.1-LTS$# hb set
Input code path: .
OHOS Which product do you need?(Use arrow keys)

hisilicon
❯ ipcamera_hispark_aries
wifiiot_hispark_pegasus
ipcamera_hispark_taurus


[*]目的是设置编译路径,会在根目录下生成 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
}

[*]有了这些路径就为后续的编译过程铺好了路.
hb build 一气呵成
turing@ubuntu:/home/openharmony/code-v1.1.1-LTS$# hb build

突然感觉编译鸿蒙好简单 : )
百篇博客.往期回顾
在加注过程中,整理出以下文章。内容立足源码,常以生活场景打比方尽可能多的将内核知识点置入某种场景,具有画面感,容易理解记忆。说别人能听得懂的话很重要! 百篇博客绝不是百度教条式的在说一堆诘屈聱牙的概念,那没什么意思。更希望让内核变得栩栩如生,倍感亲切.确实有难度,自不量力,但已经出发,回头已是不可能的了。:P
与代码有bug需不断debug一样,文章和注解内容会存在不少错漏之处,请多包涵,但会反复修正,持续更新,.xx代表修改的次数,精雕细琢,言简意赅,力求打造精品内容。

[*]v60.xx 鸿蒙内核源码分析(GN应用篇) | GN语法及在鸿蒙的使用| 51 .c .h .o

[*]v59.xx 鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程| 51 .c .h .o

[*]v58.xx 鸿蒙内核源码分析(环境脚本篇) | 有了它编译鸿蒙好简单| 51 .c .h .o

[*]v57.xx 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视GCC编译全过程| 51 .c .h .o

[*]v56.xx 鸿蒙内核源码分析(进程映像篇) | ELF是如何被加载运行的?| 51 .c .h .o

[*]v55.xx 鸿蒙内核源码分析(重定位篇) | 与国际接轨的对外部发言人| 51 .c .h .o

[*]v54.xx 鸿蒙内核源码分析(静态链接篇) | 完整小项目看透静态链接过程| 51 .c .h .o

[*]v53.xx 鸿蒙内核源码分析(ELF解析篇) | 你要忘了她姐俩你就不是银| 51 .c .h .o

[*]v52.xx 鸿蒙内核源码分析(静态站点篇) | 五一哪也没去就干了这事| 51 .c .h .o

[*]v51.xx 鸿蒙内核源码分析(ELF格式篇) | 应用程序入口并不是main| 51 .c .h .o

[*]v50.xx 鸿蒙内核源码分析(编译环境篇) | docker编译鸿蒙真的很香| 51 .c .h.o

[*]v49.xx 鸿蒙内核源码分析(信号消费篇) | 谁让CPU连续四次换栈运行| 51 .c .h.o

[*]v48.xx 鸿蒙内核源码分析(信号生产篇) | 年过半百,依然活力十足| 51 .c .h.o

[*]v47.xx 鸿蒙内核源码分析(进程回收篇) | 临终前如何向老祖宗托孤| 51 .c .h.o

[*]v46.xx 鸿蒙内核源码分析(特殊进程篇) | 龙生龙凤生凤老鼠生儿会打洞| 51 .c .h.o

[*]v45.xx 鸿蒙内核源码分析(Fork篇) | 一次调用,两次返回| 51 .c .h.o

[*]v44.xx 鸿蒙内核源码分析(中断管理篇) | 江湖从此不再怕中断| 51 .c .h.o

[*]v43.xx 鸿蒙内核源码分析(中断概念篇) | 海公公的日常工作| 51 .c .h.o

[*]v42.xx 鸿蒙内核源码分析(中断切换篇) | 系统因中断活力四射 | 51 .c .h.o

[*]v41.xx 鸿蒙内核源码分析(任务切换篇) | 看汇编如何切换任务| 51 .c .h.o

[*]v40.xx 鸿蒙内核源码分析(汇编汇总篇) | 汇编可爱如邻家女孩| 51 .c .h.o

[*]v39.xx 鸿蒙内核源码分析(异常接管篇) | 社会很单纯,复杂的是人| 51 .c .h.o

[*]v38.xx 鸿蒙内核源码分析(寄存器篇) | 小强乃宇宙最忙存储器| 51 .c .h.o

[*]v37.xx 鸿蒙内核源码分析(系统调用篇) | 开发者永远的口头禅| 51 .c .h.o

[*]v36.xx 鸿蒙内核源码分析(工作模式篇) | CPU是韦小宝,七个老婆| 51 .c .h.o

[*]v35.xx 鸿蒙内核源码分析(时间管理篇) | 谁是内核基本时间单位| 51 .c .h.o

[*]v34.xx 鸿蒙内核源码分析(原子操作篇) | 谁在为原子操作保驾护航| 51 .c .h.o

[*]v33.xx 鸿蒙内核源码分析(消息队列篇) | 进程间如何异步传递大数据| 51 .c .h.o

[*]v32.xx 鸿蒙内核源码分析(CPU篇) | 整个内核就是一个死循环| 51 .c .h.o

[*]v31.xx 鸿蒙内核源码分析(定时器篇) | 哪个任务的优先级最高| 51 .c .h.o

[*]v30.xx 鸿蒙内核源码分析(事件控制篇) | 任务间多对多的同步方案| 51 .c .h.o

[*]v29.xx 鸿蒙内核源码分析(信号量篇) | 谁在负责解决任务的同步| 51 .c .h.o

[*]v28.xx 鸿蒙内核源码分析(进程通讯篇) | 九种进程间通讯方式速揽| 51 .c .h.o

[*]v27.xx 鸿蒙内核源码分析(互斥锁篇) | 比自旋锁丰满的互斥锁| 51 .c .h.o

[*]v26.xx 鸿蒙内核源码分析(自旋锁篇) | 自旋锁当立贞节牌坊| 51 .c .h.o

[*]v25.xx 鸿蒙内核源码分析(并发并行篇) | 听过无数遍的两个概念| 51 .c .h.o

[*]v24.xx 鸿蒙内核源码分析(进程概念篇) | 进程在管理哪些资源| 51 .c .h.o

[*]v23.xx 鸿蒙内核源码分析(汇编传参篇) | 如何传递复杂的参数| 51 .c .h.o

[*]v22.xx 鸿蒙内核源码分析(汇编基础篇) | CPU在哪里打卡上班| 51 .c .h.o

[*]v21.xx 鸿蒙内核源码分析(线程概念篇) | 是谁在不断的折腾CPU| 51 .c .h.o

[*]v20.xx 鸿蒙内核源码分析(用栈方式篇) | 程序运行场地由谁提供| 51 .c .h.o

[*]v19.xx 鸿蒙内核源码分析(位图管理篇) | 谁能一分钱分两半花| 51 .c .h.o

[*]v18.xx 鸿蒙内核源码分析(源码结构篇) | 内核每个文件的含义| 51 .c .h.o

[*]v17.xx 鸿蒙内核源码分析(物理内存篇) | 怎么管理物理内存| 51 .c .h.o

[*]v16.xx 鸿蒙内核源码分析(内存规则篇) | 内存管理到底在管什么| 51 .c .h.o

[*]v15.xx 鸿蒙内核源码分析(内存映射篇) | 虚拟内存虚在哪里| 51 .c .h.o

[*]v14.xx 鸿蒙内核源码分析(内存汇编篇) | 谁是虚拟内存实现的基础| 51 .c .h.o

[*]v13.xx 鸿蒙内核源码分析(源码注释篇) | 鸿蒙必定成功,也必然成功| 51 .c .h.o

[*]v12.xx 鸿蒙内核源码分析(内存管理篇) | 虚拟内存全景图是怎样的| 51 .c .h.o

[*]v11.xx 鸿蒙内核源码分析(内存分配篇) | 内存有哪些分配方式| 51 .c .h.o

[*]v10.xx 鸿蒙内核源码分析(内存主奴篇) | 皇上和奴才如何相处| 51 .c .h.o

[*]v09.xx 鸿蒙内核源码分析(调度故事篇) | 用故事说内核调度过程| 51 .c .h.o

[*]v08.xx 鸿蒙内核源码分析(总目录) | 百万汉字注解 百篇博客分析| 51 .c .h.o

[*]v07.xx 鸿蒙内核源码分析(调度机制篇) | 任务是如何被调度执行的| 51 .c .h.o

[*]v06.xx 鸿蒙内核源码分析(调度队列篇) | 内核有多少个调度队列| 51 .c .h.o

[*]v05.xx 鸿蒙内核源码分析(任务管理篇) | 任务池是如何管理的| 51 .c .h.o

[*]v04.xx 鸿蒙内核源码分析(任务调度篇) | 任务是内核调度的单元| 51 .c .h.o

[*]v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度谁的贡献最大| 51 .c .h.o

[*]v02.xx 鸿蒙内核源码分析(进程管理篇) | 谁在管理内核资源| 51 .c .h.o

[*]v01.xx 鸿蒙内核源码分析(双向链表篇) | 谁是内核最重要结构体| 51 .c .h.o

关于 51 .c .h .o
看系列篇文章会常看到 51 .c .h .o,希望这对大家阅读不会造成影响. 分别对应以下四个站点的首个字符,感谢这些站点一直以来对系列篇的支持和推荐,尤其是 oschina gitee ,很喜欢它的界面风格,简洁大方,让人感觉到开源的伟大!

[*]51cto
[*]csdn
[*]harmony
[*]oschina
而巧合的是.c .h .o是C语言的头/源/目标文件,这就很有意思了,冥冥之中似有天数,将这四个宝贝以这种方式融合在一起. 51 .c .h .o , 我要CHO ,嗯嗯,hin 顺口 : )
百万汉字注解.百篇博客分析
百万汉字注解 >> 精读鸿蒙源码,中文注解分析, 深挖地基工程,大脑永久记忆,四大码仓每日同步更新< gitee | github | csdn | coding >
百篇博客分析 >> 故事说内核,问答式导读,生活式比喻,表格化说明,图形化展示,主流站点定期更新中< 51cto | csdn | harmony| osc >
关注不迷路.代码即人生

热爱是所有的理由和答案 - turing
原创不易,欢迎转载,但麻烦请注明出处.

文档来源:开源中国社区https://my.oschina.net/weharmony/blog/5132725
页: [1]
查看完整版本: 鸿蒙内核源码分析(环境脚本篇) | 有了它编译鸿蒙好简单 | 百篇博客分析HarmonyOS源码 | v58.01