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

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

百篇博客系列篇.本篇为:

v58.xx 鸿蒙内核源码剖析(环境脚本篇) | 编译鸿蒙原来如此简略

本篇用两个脚本完结鸿蒙(L1)的编译环境装置/源码下载/编译进程,让编译,调试鸿蒙从此变的简略.

编译构建相关篇为:

  • v50.xx 鸿蒙内核源码剖析(编译环境) | 编译鸿蒙防掉坑攻略
  • v57.xx 鸿蒙内核源码剖析(编译进程) | 简略案例窥探编译全进程
  • v58.xx 鸿蒙内核源码剖析(环境脚本) | 编译鸿蒙原来如此简略
  • v59.xx 鸿蒙内核源码剖析(构建东西) | 顺瓜摸藤调试鸿蒙构建进程
  • v60.xx 鸿蒙内核源码剖析(gn使用) | gn语法及在鸿蒙的运用
  • v61.xx 鸿蒙内核源码剖析(忍者ninja) | 都忍者了能不快吗

很香的 Docker

  • 假如仅仅为了编译鸿蒙,初级的触摸鸿蒙,docker是很香的,从第一次触摸docker就对它爱不释手, 脏活累活它干了,少了太多的费事. docker 编译鸿蒙看编译环境篇就行了, L1L2 都编译通过了.

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

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

但本篇不是说如何调试去看屁屁,那会在后续华章中趴开了看仔细,这里是要处理调试之前的预备工作.

调试之前的预备

个人喜爱做一了百了的事,假如有试过手动去装置鸿蒙开发环境,下载源码,确保编译成功其实是件非常费事的工作,在翻看大量资料( 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

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

忽然感觉编译鸿蒙好简略 : )

百万汉字注解.精读内核源码

四大码仓同步注解内核源码, >> 查看 gitee 库房

百篇博客剖析.深挖内核地基

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

编译构建 基础东西 加载运转 进程办理
编译环境
编译进程
环境脚本
构建东西
gn使用
忍者ninja
双向链表
位图办理
用栈方式
定时器
原子操作
时间办理
ELF格局
ELF解析
静态链接
重定位
进程映像
进程办理
进程概念
Fork
特别进程
进程回收
信号生产
信号消费
Shell修改
Shell解析
进程通讯 内存办理 来龙去脉 使命办理
自旋锁
互斥锁
进程通讯
信号量
事件操控
音讯队列
内存分配
内存办理
内存汇编
内存映射
内存规矩
物理内存
总目录
调度故事
内存主奴
源码注释
源码结构
静态站点
时钟使命
使命调度
使命办理
调度队列
调度机制
线程概念
并发并行
体系调用
使命切换
文件体系 硬件架构
文件概念
文件体系
索引节点
挂载目录
根文件体系
字符设备
VFS
文件句柄
管道文件
汇编基础
汇编传参
工作模式
寄存器
异常接管
汇编汇总
中止切换
中止概念
中止办理

鸿蒙研讨站 | 每天死磕一点点,原创不易,欢迎转载,但请注明出处。