往期知识点记录:
- 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总
- 轻内核A核源码分析系列一 数据结构-双向循环链表
- 轻内核A核源码分析系列二 数据结构-位图操作
- 轻内核A核源码分析系列三 物理内存(1)
- 轻内核A核源码分析系列三 物理内存(2)
- 轻内核A核源码分析系列四(1)虚拟内存进程空间编号
- 轻内核A核源码分析系列四(2) 虚拟内存
- 轻内核A核源码分析系列四(3) 虚拟内存
- 轻内核A核源码分析系列五 虚实映射(1)基础概念
- 轻内核A核源码分析系列五 虚实映射(2)虚实映射初始化
- 轻内核A核源码分析系列五 虚实映射(3)虚拟物理内存映射
- 轻内核A核源码分析系列五 虚实映射(5)虚实映射解除
- 轻内核A核源码分析系列五 虚实映射(6)虚拟映射修改转移
- 轻内核A核源码分析系列五 虚实映射(7)虚实映射Flag属性
- 轻内核A核源码分析系列六 MMU协处理器(1)
- 轻内核A核源码分析系列六 MMU协处理器(2)
- 轻内核A核源码分析系列七 进程管理 (1)
- 轻内核A核源码分析系列七 进程管理 (2)
- 轻内核A核源码分析系列七 进程管理 (3)
- 鸿蒙轻内核调测-内存调测-内存信息统计
- 鸿蒙轻内核调测-内存调测-内存泄漏检测)
- 鸿蒙轻内核Kconfig使用笔记)
- 持续更新中……
鸿蒙轻内核使用Kconfig进行图形化配置,本文专门讲解下鸿蒙轻内核LiteOS-M和LiteOS-A的图形化配置方法。本文中所涉及的源码,均可以在开源站点 https://gitee.com/openharmony/kernel_liteos_a 、 https://gitee.com/openharmony/kernel_liteos_m 获取。本文首先简单介绍下kconfig的基础知识,接着介绍下如何使用图形化配置。
1、 Kconfig简介
Kconfig语言定义了一套完整的规则来表述配置项及配置项间的关系,详细内容可以参考Linux官方文档 Kconfig Language ,此处不赘述。鸿蒙轻内核使用的是Python的开源三方库kconfiglib(menuconfig只是其提供的命令之一,相关命令还有genconfig, savedefconfig等等),官方主页为https://pypi.org/project/kconfiglib。
1.1 Kconfig和.config文件
Kconfig是配置项的描述文件,支持设置配置项及其默认值,依赖关系等等,比如kernel\liteos_a\Kconfig
,该文件还会继续依赖各个模块的Kconfig文件。
产品配置文件,如vendor\hisilicon\hispark_taurus\kernel_configs\debug.config
,提供配置项及在产品中这些配置项的设置值,可能和内核配置项的默认取值不一致,属于产品对内核配置项的定制。这些配置文件在BUILD.gn或makefile文件中使用。
另外还会生成一个C语言头文件,提供配置项的宏定义版,在C语言程序中使用。
1.2 操作简介
下载OpenHarmony源代码后,使用hb set设置产品解决方案后,然后在kernel/liteos_m或liteos_a目录下执行make help可获得一个总体的帮助说明,如下图所示:
其中与Kconfig有关的为xxconfig
类目标,这类目标通过args接收额外的参数,比如:
make menuconfig args="--help"
通过args="–help"就可以了解xxconfig类命令的使用详细说明。
支持的参数有文件类型FSTYPE
,版本类别TEE
、RELEASE
等版本,默认为DEBUG
版本。还支持通过CONFIG
参数指定产品配置文件路径,该参数优先级较高。
注意:
OpenHarmony支持使用ninja+gn来编译构建,内核使用的kconfig配置工具依旧使用makefile进行维护的。
2、 配置内核
liteos_a内核使用Kconfig方式进行配置,在内核目录kernel/liteos_a下执行make menuconfig等命令即可。liteos_m内核类似,以liteos_a为例进行讲解。
需要注意:
在操作前,需要使用hb set设置产品,否则会提示:The selected product (None) is not a liteos_a kernel type product. Stop。
2.1 支持的参数
上文,我们知道了make menuconfig支持参数,我们详细看下代码。文件位置在kernel/liteos_a/Makefile
,代码片段如下:
如果指定了CONFIG
参数,则使用用户指定的产品配置文件。如果开启了TEE
,则使用TEE
版本的产品配置文件。如果开启了RELEASE
,则使用release版本产品配置文件,否则使用debug版本的产品配置文件。
ifeq ($(TEE:1=y),y)
tee = _tee
endif
ifeq ($(RELEASE:1=y),y)
CONFIG ?= $(PRODUCT_PATH)/kernel_configs/release$(tee).config
else
CONFIG ?= $(PRODUCT_PATH)/kernel_configs/debug$(tee).config
endif
KCONFIG_CONFIG ?= $(CONFIG)
2.2 menuconfig内核配置
使用make menuconfig进行内核配置,Makefile源码片段如下:
update_config menuconfig:
$(HIDE)test -f "$(CONFIG)" && cp -v "$(CONFIG)" .config && menuconfig $(args) && savedefconfig --out "$(CONFIG)"
可以看出,update_config和menuconfig这2个target效果相同,一般使用make menuconfig即可。执行的操作包含如下3个:
-
判断产品配置文件是否存在,如果存在则把配置文件复制到内核根目录并命名为.config
-
展示menuconfig用户配置界面,供开发者进行内核配置
-
保存最小配置到产品产品文件,可以使用make savedefconfig args="–help"查看命令的解释。
设置产品后,要修改产品的.config配置,目前可以在内核目录下执行make menuconfig,没有make参数的情况下该命令默认会自动找到你hb set时所选择的产品的debug.config配置进行menuconfig配置,如果想要修改产品的release.config配置则可以使用参数RELEASE=1。前提是产品有预置release.config配置。同样的,可以使用参数TEE=1来修改产品的tee版本的.config配置。命令如下:
make update_config RELEASE=1
make update_config TEE=1
另外,如果想手动指定产品配置,而不是自动使用hb set时所选择的产品的配置,则可以使用CONFIG=/path/to/the/xx.config
参数,如:
make update_config CONFIG=../../vendor/hisilicon/hispark_aries/config/release.config
3、Kconfig高级语法
Kconfig大部分工程师都了解,快速介绍几个鸿蒙轻内核中使用到的稍微高级的语法。
- osource
我们知道kconfig使用source来引用其他kconfig文件,而osource等于optional source,表示可选的,如果osource指定的kconfig文件不存在,也不报错。类似,makefile中的include和-include的差异。
- rsource
rsource等于 relative source,后面引用的kconfig文件支持相对路径。路径相对于包含rsource语句的kconfig而言。
- orsource
等于osource+rsource。
kconf的几个命令如下“
-
–oldconfig
基于提供的.config文件,根据Kconfig文件修改配置文件
-
–silentoldconfig
等同于oldconfig,静默模式,并修改deps依赖即生成头文件。
-
–olddefconfig
等同于silentoldconfig,对于新符号使用默认值
-
–savedefconfig
把当前最小的配置保持到文件
小结
本文介绍了Kconfig的基础知识,和鸿蒙轻内核的图形化配置。
经常有很多小伙伴抱怨说:不知道学习鸿蒙开发哪些技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?
为了能够帮助到大家能够有规划的学习,这里特别整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、WebGL、元服务、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技术知识点。
《鸿蒙 (Harmony OS)开发学习手册》(共计892页):https://gitcode.com/HarmonyOS_MN/733GH/overview
如何快速入门?
1.基本概念
2.构建第一个ArkTS应用
3.……
开发基础知识:
1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……
基于ArkTS 开发
1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……
鸿蒙开发面试真题(含参考答案):https://gitcode.com/HarmonyOS_MN/733GH/overview
OpenHarmony 开发环境搭建
《OpenHarmony源码解析》:https://gitcode.com/HarmonyOS_MN/733GH/overview
- 搭建开发环境
- Windows 开发环境的搭建
- Ubuntu 开发环境搭建
- Linux 与 Windows 之间的文件共享
- ……
- 系统架构分析
- 构建子系统
- 启动流程
- 子系统
- 分布式任务调度子系统
- 分布式通信子系统
- 驱动子系统
- ……
OpenHarmony 设备开发学习手册:https://gitcode.com/HarmonyOS_MN/733GH/overview