[openharmony]liteos-a系统编译之GN
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[openharmony]liteos-a系统编译之GN相关的知识,希望对你有一定的参考价值。
参考技术A 在 文章 中已经分析openharmony的小型系统(liteos-a)编译过程,最主要的就是调用gn/ninja/makefs三个命令最终生成可烧录的镜像文件从前面文件可以看到hb build调用的gn命令参数如下
这里详细分析一下gn工具在编译过程中的使用
这里简单介绍下GN工具的使用方法,gn语法可以参考 http://weharmonyos.com/openharmony/compile/gn/docs/
,已经熟悉的可以跳过
从上面图中可以看到使用的命令类型为 gn gen <output_dir> [options] ,此命令就是为了将所有需要的BUILD.gn文件生成为*.ninja文件供ninja进行编译; 可以通过 gn help gen 命令查看详细的用法说明, 如下
下面重点说一下gn_cmd中的 [options]
liteos-a编译系统的dotfile内容如下:
liteos-a是嵌入式系统,而编译环境是linux系统,这就需要用到交叉编译方式,这个就可以在环境配置中指定 target_os 、 target_cpu 、 board_cpu 等等信息
这些信息就是 buildconfig 参数指定的 BUILDCONFIG.gn 文件中配置的
除了以上信息,还配置了以下几个重要信息
详细信息可以查看 //build/lite/config/BUILDCONFIG.gn 文件内容
toolchain定义源码编译需要的工具,像编译器、汇编器、连接器等等,一般在.gn所在目录下有一个 toolchain 目录,里面的 BUILD.gn 定义详细的编译工具链信息
这里目录结构如下:
从结构信息中可以看到定义了clang和gcc两种工具链,通过变量 board_toolchain_type 来区分(此变量也是buildconfig中定义的),具体信息参见BUILD.gn文件内容,如下
在.gn文件所在目录下的BUILD.gn就是入口,此文件做了以下几个事情
这里重点说一下target为 ohos 的 group 如下:
这里也比较好理解,里面就是读取一个配置文件,几级循环来处理配置文件中配置的内容。流程如下
到此就将此board下各模块的依赖关系添加好了,然后 GN 会将依赖树中所有的BUILD.gn生成对应的.ninja文件,并且在out的根目录下生成下面几个ninja的入口文件以及配置文件
OpenHarmony内核学习[1]--单独编译OpenHarmony标准系统内核
内核是操作系统的核心,学习掌握OpenHarmony内核对于开发人员至关重要。笔者整理学习OpenHarmony标准系统内核笔记如下:
- 阅读本文大约需要15分钟。 (目录)
OpenHarmony标准系统内核
- OpenHarmony标准系统类设备(参考内存≥128MiB),OpenHarmony选择Linux内核作为标准系统内核。
- OpenHarmony标准系统从
Linux内核LTS版本
中选择合适的版本作为内核的基础版本,目前已完成对Linux-4.19及Linux-5.10的适配及支持。
-
OpenHarmony的Linux内核基于开源Linux内核LTS 4.19.y / 5.10.y 分支演进,在此基线基础上,回合CVE补丁及OpenHarmony特性,作为OpenHarmony Common Kernel基线。针对不同的芯片,各厂商合入对应的板级驱动补丁,完成对OpenHarmony的基线适配。
-
目前OpenHarmony Beta3使用的内核版本为5.10.93,Beta4使用的内核版本为5.10.97
OpenHarmony标准系统内核源码目录
单独编译OpenHarmony标准系统内核(以rk3568为例)
- 笔者编译环境:
wsl2
+Ubuntu18.04
+OpenHarmony Beta3源码
- 首先在out/kernel/src_tmp/linux-5.10目录下打开终端执行如下语句:
# 配置编译环境变量
export PRODUCT_COMPANY=hihope
export DEVICE_COMPANY=rockchip
export DEVICE_NAME=rk3568
export KBUILD_OUTPUT=…/…/OBJ/linux-5.10/
./make-ohos.sh TB-RK3568X0
# ./make-ohos.sh TB-RK3568X10也是可以的,但是笔者不太清楚这个是用来干啥的
单独编译结果
结果是在如下目录下生成resource.img内核镜像和boot_linux.img
-
/home/jiajiahao/ohos3.2beta3/sources/out/kernel/OBJ/linux-5.10/resource.img
-
home\\jiajiahao\\ohos3.2beta3\\sources\\out\\kernel\\src_tmp\\linux-5.10\\boot_linux.img
重新编译OpenHarmony标准系统内核
- 删除源码下out目录
rm -rf out
- 然后重新编译出全部的镜像文件
知识附送
-
编译rk64位: 用DevEco Device Tool工具可以编译64位的镜像
-
安装最新依赖包:
for one_tools in curl -s -k https://gitee.com/landwind/openharmony_oneclick_env_init/raw/master/apt_install.list;do sudo bash -c "apt-get install -y $one_tools"; done
- OpenHarmony环境重置
安装依赖包: unix_time=`date +%s`;for one_tools in `curl -s -k https://gitee.com/landwind/openharmony_oneclick_env_init/raw/master/apt_install.list`;do echo "apt-get install -y $one_tools">>/tmp/openharmony_deps_$unix_time.sh; done;sudo apt-get update;sudo bash -x /tmp/openharmony_deps_$unix_time.sh
删除out: rm -rf out
重置工作区,删除所有修改(记得备份你的代码): repo forall -c "pwd;git reset --hard; git clean -fd"
更新最新代码: repo sync -c -j8; repo forall -c "pwd;git lfs install;git lfs pull"
执行prebuilts下载脚本: bash build/prebuilts_download.sh
本文作者:离北况归
https://ost.51cto.com/#bkwz
以上是关于[openharmony]liteos-a系统编译之GN的主要内容,如果未能解决你的问题,请参考以下文章