当前位置: 首页 > 科技观察

HarmonyosLightKernelKconfig使用注意事项

时间:2023-03-14 11:12:22 科技观察

更多信息请访问:Harmonyos技术社区https://harmonyos.51cto.com鸿蒙LightKernel使用Kconfig进行图形化配置,本文专门讲解鸿蒙轻内核LiteOS的图形化配置方法-M和LiteOS-A。本文涉及的源代码可以从开源站点https://gitee.com/openharmony/kernel_liteos_a、https://gitee.com/openharmony/kernel_liteos_m获取。本文首先简单介绍一下kconfig的基础知识,然后介绍如何使用图形化配置。一、Kconfig简介Kconfig语言定义了一套完整的规则来描述配置项以及配置项之间的关系。具体可以参考Linux官方文档KconfigLanguage,这里不再赘述。鸿蒙LightKernel使用了Python的开源三方库kconfiglib(menuconfig只是其提供的命令之一,相关命令还有genconfig、savedefconfig等),官方主页为https://pypi.org/project/kconfiglib.1.1Kconfig和.config文件Kconfig是一个配置项的描述文件,支持设置配置项及其默认值、依赖关系等,如kernel\liteos_a\Kconfig,这个文件会继续依赖的Kconfig文件每个模块。产品配置文件,如vendor\hisilicon\hispark_taurus\kernel_configs\debug.config,提供产品中的配置项和这些配置项的设置值,可能与内核配置项的默认值不一致,属于产品对内核配置项的定制。这些配置文件在BUILD.gn或makefile中使用。另外会生成一个C语言头文件,提供配置项的宏定义版本,在C语言程序中使用。1.2操作介绍下载OpenHarmony源码后,使用hbset设置产品解决方案,然后在kernel/liteos_m或liteos_a目录下执行makehelp,得到大致的帮助说明,如下图:其中,xxconfig与Kconfig类target相关,该类target通过args接收附加参数,例如:makemenuconfigargs="--help"通过args="--help",可以了解xxconfig类命令的详细使用说明。支持的参数包括文件类型FSTYPE、版本类型TEE、RELEASE等版本,默认为DEBUG版本。还支持通过CONFIG参数指定产品配置文件路径,优先级更高。注:OpenHarmony支持使用ninja+gn编译构建,内核使用的kconfig配置工具仍然使用makefiles维护。2、配置内核liteos_a使用Kconfig方式配置内核,可以在内核目录kernel/liteos_a中执行makemenuconfig等命令。liteos_m内核类似,以liteos_a为例进行说明。注意:操作前需要使用hbset设置产品,否则会提示:所选产品(None)不是liteos_a内核类型产品。停止。2.1支持的参数上面我们知道makemenuconfig是支持参数的,下面我们具体看代码。文件位置为kernel/liteos_a/Makefile,代码片段如下:如果指定了CONFIG参数,则使用用户指定的产品配置文件。如果启用TEE,将使用产品配置文件的TEE版本。如果启用RELEASE,则使用发布版本产品配置文件,否则使用调试版本产品配置文件。ifeq($(TEE:1=y),y)tee=_teeenfifeq($(RELEASE:1=y),y)CONFIG?=$(PRODUCT_PATH)/kernel_configs/release$(tee).configelseCONFIG?=$(产品路径)/kernel_configs/debug$(tee).configendifKCONFIG_CONFIG?=$(CONFIG)2.2menuconfig内核配置使用makemenuconfig配置内核。Makefile源代码片段如下:update_configmenuconfig:$(HIDE)test-f"$(CONFIG)"&&cp-v"$(CONFIG)".config&&menuconfig$(args)&&savedefconfig--out"$(CONFIG)"它可以看出update_config和menuconfig这两个target的效果是一样的,一般都是用makemenuconfig。需要执行的操作包括以下三个步骤:判断产品配置文件是否存在,如果存在,将配置文件复制到内核根目录下,并命名为.config显示menuconfig用户配置界面,供开发者配置kernel并将最小配置保存到产品product文件中,可以使用makesavedefconfigargs="--help"查看命令的解释。设置好产品后,需要修改产品的.config配置。目前可以在内核目录下执行makemenuconfig。如果没有make参数,这个命令会自动找到你在hbset中选择的产品的debug.config配置,默认配置为menuconfig,如果要修改产品的release.config配置,可以使用参数RELEASE=1。前提是产品有预设的release.config配置。同样可以使用参数TEE=1修改产品tee版本的.config配置。命令如下:makeupdate_configRELEASE=1makeupdate_configTEE=1另外,如果想手动指定产品配置,而不是自动使用hbset时选择的产品配置,可以使用CONFIG=/path/to/the/xx.config参数,如:makeupdate_configCONFIG=../../vendor/hisilicon/hispark_aries/config/release.config3、Kconfig高级语法Kconfig的大部分工程师都知道,赶紧介绍一下鸿蒙使用的几个稍微高级的语法轻内核。osource我们知道kconfig使用source来引用其他的kconfig文件,osource等于optionalsource,也就是可选的意思。如果osource指定的kconfig文件不存在,则不会报错。同样,makefile中include和-include的区别。rsourcersource等于relativesource,后面引用的kconfig文件支持相对路径。路径与包含rsource语句的kconfig相关。orsource等于osource+rsource。kconf的几个命令如下“-oldconfig基于提供的.config文件,根据Kconfig文件修改配置文件--silentoldconfig相当于oldconfig,静默模式,修改deps依赖生成头文件。--olddefconfig等同于silentoldconfig,用于新的symbol默认值--savedefconfig将当前的最小配置保留到文件中华为官方联合建立的鸿蒙技术社区https://harmonyos.51cto.com