颜渊问仁。子曰:“克己复礼为仁。一日克己复礼,天下归仁焉。为仁由己,而由人乎哉?”颜渊曰:“请问其目。”子曰:“非礼勿视,非礼勿听,非礼勿言,非礼勿动。”颜渊曰:“回虽不敏,请事斯语矣。” 《论语》:颜渊篇
百篇博客系列篇.本篇为:
v58.xx 鸿蒙内核源码剖析(环境脚本篇) | 编译鸿蒙原来如此简略
本篇用两个脚本完结鸿蒙(L1)的编译环境装置/源码下载/编译进程,让编译,调试鸿蒙从此变的简略.
编译构建相关篇为:
- v50.xx 鸿蒙内核源码剖析(编译环境) | 编译鸿蒙防掉坑攻略
- v57.xx 鸿蒙内核源码剖析(编译进程) | 简略案例窥探编译全进程
- v58.xx 鸿蒙内核源码剖析(环境脚本) | 编译鸿蒙原来如此简略
- v59.xx 鸿蒙内核源码剖析(构建东西) | 顺瓜摸藤调试鸿蒙构建进程
- v60.xx 鸿蒙内核源码剖析(gn使用) | gn语法及在鸿蒙的运用
- v61.xx 鸿蒙内核源码剖析(忍者ninja) | 都忍者了能不快吗
很香的 Docker
-
假如仅仅为了编译鸿蒙,初级的触摸鸿蒙,
docker
是很香的,从第一次触摸docker
就对它爱不释手, 脏活累活它干了,少了太多的费事.docker
编译鸿蒙看编译环境篇就行了,L1
和L2
都编译通过了.- [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
两个脚本文件在 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/
阐明:
- 新环境体系包若没更新过 在 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
脚本内容:
#!/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
阐明:
- 下载源码包并解压在 /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
- 意图是设置编译途径,会在根目录下生成
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
忽然感觉编译鸿蒙好简略 : )
百万汉字注解.精读内核源码
四大码仓同步注解内核源码, >> 查看 gitee 库房
百篇博客剖析.深挖内核地基
给鸿蒙内核源码加注释进程中,整理出以下文章。内容安身源码,常以日子场景打比方尽可能多的将内核知识点置入某种场景,具有画面感,容易理解回忆。说别人能听得懂的话很重要! 百篇博客绝不是百度教条式的在说一堆诘屈聱牙的概念,那没什么意思。更期望让内核变得栩栩如生,倍感亲热.的确有难度,自不量力,但已经出发,回头已是不可能的了。 :P
与代码有bug需不断debug一样,文章和注解内容会存在不少错漏之处,请多包容,但会反复批改,持续更新,.xx
代表修正的次数,精雕细琢,言简意赅,力求打造精品内容。
编译构建 | 基础东西 | 加载运转 | 进程办理 |
---|---|---|---|
编译环境 编译进程 环境脚本 构建东西 gn使用 忍者ninja |
双向链表 位图办理 用栈方式 定时器 原子操作 时间办理 |
ELF格局 ELF解析 静态链接 重定位 进程映像 |
进程办理 进程概念 Fork 特别进程 进程回收 信号生产 信号消费 Shell修改 Shell解析 |
进程通讯 | 内存办理 | 来龙去脉 | 使命办理 |
自旋锁 互斥锁 进程通讯 信号量 事件操控 音讯队列 |
内存分配 内存办理 内存汇编 内存映射 内存规矩 物理内存 |
总目录 调度故事 内存主奴 源码注释 源码结构 静态站点 |
时钟使命 使命调度 使命办理 调度队列 调度机制 线程概念 并发并行 体系调用 使命切换 |
文件体系 | 硬件架构 | ||
文件概念 文件体系 索引节点 挂载目录 根文件体系 字符设备 VFS 文件句柄 管道文件 |
汇编基础 汇编传参 工作模式 寄存器 异常接管 汇编汇总 中止切换 中止概念 中止办理 |
鸿蒙研讨站 | 每天死磕一点点,原创不易,欢迎转载,但请注明出处。