百篇博客系列篇.本篇为:
v58.xx 鸿蒙内核源码分析(环境脚本篇) | 编译鸿蒙原来如此简单 | 51.c.h.o
本篇用两个脚本完成鸿蒙(L1)的编译环境安装/源码下载/编译过程,让编译,调试鸿蒙从此变的简单.
编译构建相关篇为:
- v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙防掉坑指南 | 51.c.h.o
- v57.xx 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视编译全过程 | 51.c.h.o
- v58.xx 鸿蒙内核源码分析(环境脚本篇) | 编译鸿蒙原来如此简单 | 51.c.h.o
- v59.xx 鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程 | 51.c.h.o
- v60.xx 鸿蒙内核源码分析(gn应用篇) | gn语法及在鸿蒙的使用 | 51.c.h.o
- v61.xx 鸿蒙内核源码分析(忍者ninja篇) | 都忍者了能不快吗 | 51.c.h.o
很香的 Docker
-
如果只是为了编译鸿蒙,初级的接触鸿蒙,
docker
是很香的,从第一次接触docker
就对它爱不释手, 脏活累活它干了,少了太多的麻烦.docker
编译鸿蒙看编译环境篇就行了,L1
和L2
都编译通过了. 如果要深入的了解鸿蒙,比如调试鸿蒙的代码或编译工具,就需要另辟蹊径了.
下图为调试编译工具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
突然感觉编译鸿蒙好简单 : )
鸿蒙内核源码分析.总目录
v08.xx 鸿蒙内核源码分析(总目录) | 百万汉字注解 百篇博客分析 | 51.c.h .o
百万汉字注解.百篇博客分析
百万汉字注解 >> 精读鸿蒙源码,中文注解分析, 深挖地基工程,大脑永久记忆,四大码仓每日同步更新< gitee| github| csdn| coding >
百篇博客分析 >> 故事说内核,问答式导读,生活式比喻,表格化说明,图形化展示,主流站点定期更新中< 51cto| csdn| harmony| osc >
关注不迷路.代码即人生
QQ群:790015635 | 入群密码: 666
原创不易,欢迎转载,但请注明出处.
鸿蒙内核源码分析(编译脚本篇) | 如何防编译环境中的牛皮癣 | 百篇博客分析OpenHarmony源码 | v58.01的更多相关文章
-
鸿蒙内核源码分析(编译过程篇) | 简单案例窥视GCC编译全过程 | 百篇博客分析OpenHarmony源码| v57.01
百篇博客系列篇.本篇为: v57.xx 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视编译全过程 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙 ...
-
鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙看这篇或许真的够了 | 百篇博客分析OpenHarmony源码 | v50.06
百篇博客系列篇.本篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙防掉坑指南 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙防掉 ...
-
鸿蒙内核源码分析(根文件系统) | 先挂到`/`上的文件系统 | 百篇博客分析OpenHarmony源码 | v66.01
百篇博客系列篇.本篇为: v66.xx 鸿蒙内核源码分析(根文件系统) | 先挂到/上的文件系统 | 51.c.h.o 文件系统相关篇为: v62.xx 鸿蒙内核源码分析(文件概念篇) | 为什么说一 ...
-
鸿蒙内核源码分析(忍者ninja篇) | 都忍者了能不快吗 | 百篇博客分析OpenHarmony源码 | v61.02
百篇博客系列篇.本篇为: v61.xx 鸿蒙内核源码分析(忍者ninja篇) | 都忍者了能不快吗 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙 ...
-
鸿蒙内核源码分析(GN应用篇) | GN语法及在鸿蒙的使用 | 百篇博客分析OpenHarmony源码 | v60.01
百篇博客系列篇.本篇为: v60.xx 鸿蒙内核源码分析(gn应用篇) | gn语法及在鸿蒙的使用 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙 ...
-
鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程 | 百篇博客分析OpenHarmony源码 | v59.01
百篇博客系列篇.本篇为: v59.xx 鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿 ...
-
v72.01 鸿蒙内核源码分析(Shell解析) | 应用窥伺内核的窗口 | 百篇博客分析OpenHarmony源码
子曰:"苟正其身矣,于从政乎何有?不能正其身,如正人何?" <论语>:子路篇 百篇博客系列篇.本篇为: v72.xx 鸿蒙内核源码分析(Shell解析篇) | 应用窥视 ...
-
v75.01 鸿蒙内核源码分析(远程登录篇) | 内核如何接待远方的客人 | 百篇博客分析OpenHarmony源码
子曰:"不学礼,无以立 ; 不学诗,无以言 " <论语>:季氏篇 百篇博客分析.本篇为: (远程登录篇) | 内核如何接待远方的客人 设备驱动相关篇为: v67.03 ...
-
v76.01 鸿蒙内核源码分析(共享内存) | 进程间最快通讯方式 | 百篇博客分析OpenHarmony源码
百篇博客分析|本篇为:(共享内存篇) | 进程间最快通讯方式 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析(互斥锁) | 同样 ...
随机推荐
-
2.简单的Code First例子(EF Code-First系列)
现在假想,我们想要为讴歌学校创建一个应用程序,这个程序需要能够来添加或者更新学生,分数,教师还有课程信息. 代替之前我们的做法:先是创建数据库,现在我们不这么做,我们先来创建领域类,首先我来创建两个简 ...
-
PowerDesigner15在win7-64位系统下对MySQL 进行反向工程以及建立物理模型产生SQL语句步骤图文傻瓜式详解
1.安装PowerDesigner15.MySQL5.不详细讲解了.网上一大把.请各位亲参考去. 2.安MyODBC-standard-3.51.0.7-win.msi.mysql-connector ...
-
smarty3与2的差异导致的小问题
又是一天看视频~ 今天在PHP100上学习smartY教程,视频中讲到了在模板文件中直接写带有“{}”JAVASCRIPT脚本会报错,我照视频上的代码写了下来,如下: <script> f ...
-
JMeter Concurrency Thread Group阶梯式加压
初始使用,做了下总结 1.首先下载Concurrency Thread Group并发线程组插件,选择或者搜索Custom Thread Groups: 下载完成之后,JMeter会自动重启. 2.在 ...
-
APM(pixhawk)飞控疑难杂症解决方法汇总(持续更新)
本文转自下面博主 https://blog.csdn.net/junzixing/article/details/79310159 APM/Pixhawk常用链接汇总(持续更新) https://bl ...
-
在SQL Server中如何进行UPDATE TOP .....ORDER BY?
前言 今天在导入数据到系统后需要根据时间排序对刚导入的TOP N条进行数据更新,之前没遇到过UPDATE TOP...ORDER BY,以此作为备忘录. SQL SERVER之UPDATE TOP.. ...
-
[TC11326]ImpossibleGame
[TC11326]ImpossibleGame 题目大意: 一类字符串仅由'A','B','C','D'四种字母组成.对于这样的一个字符串\(S\),可以用以下两种方式之一修改这个字符串: 交换\(S ...
-
Docker 启动Centos
docker run -d -e "container=docker" --privileged=true -v /sys/fs/cgroup:/sys/fs/cgroup --n ...
-
java中Runtime类和Process类的简单介绍
在java.lang包当中定义了一个Runtime类,在java中对于Runtime类的定义如下: Java code public class Runtime extends Object 每个 J ...
-
转 python中%s与%d
https://blog.csdn.net/SuperCreators/article/details/81393977 pythn print格式化输出. %r 用来做 debug 比较好,因为它会 ...