幽映每白日,清辉照衣裳。这篇文章主要讲述鸿蒙轻内核Kconfig使用笔记-进阶相关的知识,希望能为你提供帮助。
鸿蒙轻内核Kconfig使用笔记-进阶【#本文正在参与优质创作者激励#】
在《鸿蒙轻内核Kconfig使用笔记》一文介绍了Kconfig的基础知识,和鸿蒙轻内核的图形化配置。本文继续介绍些进阶的使用方法。本文中所涉及的源码,均可以在开源站点https://gitee.com/openharmony/kernel_liteos_m 获取,涉及开发板时以fnlink v200zr为例
, 芯片开发板相关工程路径如下:
https://gitee.com/openharmony/vendor_bestechnic
https://gitee.com/openharmony/device_soc_bestechnic
https://gitee.com/openharmony/device_board_fnlink
本文在前文的基础上,再介绍下
hb set
、Makefile
和kconfig
的关系,然后介绍下如何使用Kconfig图形化配置芯片、设备和产品方案。1、 hb set、Makefile和kconfig的关系我们知道在make menuconfig 之前,必须使用hb set设置产品解决方案,下面看下具体是如何做到的。
在
kernel\\liteos_m\\Makefile
文件中,有如下makefile片段。⑴处使用makefile foreach
命令和shell sed
命令循环处理hb set
输出的每一行,把“key:value”格式去掉多余的[OHOS INFO]
字符,把空格转换为下划线,即转换的格式为“key=value”,然后转换为makefile的变量形式。hb env
的输出、shell命令的输出见下文。ohos_device_path=/home/zhushy/openharmony/device/board/fnlink/v200zr/liteos_m
⑵处判断解析hb set获取的
ohos_kernel
内核是否等于liteos_m
,如果不等于,则说明未使用hb set
设置产品解决解决方案,或者设置的不是liteos_m内核。设置liteos_a\\linux内核时,不能在kernel\\liteos_m目录下执行make menuconfig。除了ohos_kernel
,生成的变量还有ohos_product
、ohos_product_path
、ohos_device_path
、ohos_device_company
等等。⑶处的makefile片段表明,
makefile
还有make help
里面没有提到的参数用法。可以使用make PRODUCT_PATH=XX_Device_Path_XXX
等命令来替代使用hb set
设置的产品解决方案对应的设备路径。⑷处将这些设置导出为环境变量。在kernel\\liteos_m\\Kconfig
文件中会使用这些环境变量。ohos_kernel ?= liteos_m
⑴$(foreach line,$(shell hb env | sed s/\\[OHOS INFO\\]/ohos/g;
s/ /_/g;
s/:_/=/g || true),$(eval $(line)))
⑵ifneq ($(ohos_kernel),liteos_m)
$(error The selected product ($(ohos_product)) is not a liteos_m kernel type product)
endif⑶ifeq ($(PRODUCT_PATH),)
PRODUCT_PATH:=$(ohos_product_path)
endififeq ($(DEVICE_PATH),)
DEVICE_PATH:=$(ohos_device_path)
endififeq ($(BOARD_COMPANY),)
BOARD_COMPANY:=$(ohos_device_company)
endif
...
⑷export BOARD_COMPANY
export DEVICE_PATH
export PRODUCT_PATH
hb env
的输出类似如下:[OHOS INFO] root path: /home/zhushy/openharmony
[OHOS INFO] board: v200zr
[OHOS INFO] kernel: liteos_m
[OHOS INFO] product: iotlink_demo
[OHOS INFO] product path: /home/zhushy/openharmony/vendor/bestechnic/iotlink_demo
[OHOS INFO] device path: /home/zhushy/openharmony/device/board/fnlink/v200zr/liteos_m
[OHOS INFO] device company: fnlink
执行shell命令
hb env | sed s/\\[OHOS INFO\\]/ohos/g;
s/ /_/g;
s/:_/=/g
的输出如下:ohos_root_path=/home/zhushy/openharmony
ohos_board=v200zr
ohos_kernel=liteos_m
ohos_product=iotlink_demo
ohos_product_path=/home/zhushy/openharmony/vendor/bestechnic/iotlink_demo
ohos_device_path=/home/zhushy/openharmony/device/board/fnlink/v200zr/liteos_m
ohos_device_company=fnlink
2、 芯片、单板、扩展板的Kconfig配置在执行
make menuconfig
,进入platform
配置路径后,可以看到如下图所示的配置界面,支持对扩展板、单板、芯片系列等配置。总体感觉这块后续应该还需要继续优化调整。hb set
设置产品解决方案时,已经确定了芯片和开发板,这些也只能在Kconfig
界面上展示,是无法配置的。扩展板倒是可以继续选择。后续等支持的开发板和解决方案丰富起来时,hb set
设置和kconfig
界面设置需要更好的来协作。比如hb set
可以支持一系列开发板和解决方案,具体的选择哪些开发板和解决方案,可以kconfig
界面上来配置,hb set
只提供默认值等等。文章图片
我们来看下对应的
makefile
片段,深入了解下Kconfig配置的规则。⑴处可以在开发板设备下提供下配置选项,如device\\board\\fnlink\\v200zr\\liteos_m
目录下维护Kconfig文件提供可定制的配置项。⑵处提供设备的公司名称用来定位构建路径等,这个配置项config SOC_COMPANY
只提供string类型、prompt提示、help帮助信息等属性。后续在SOC部分的配置里,如device\\soc\\bestechnic\\Kconfig.liteos_m.soc
,继续提供这个配置项的默认值default信息。Kconfig里,运行对同一个config配置项多处出现。⑶处设置扩展板shields、⑷到⑸用于配置开发板信息,⑹到⑺用于配置芯片族和芯片信息。下文分别详细分析。
# Device Kconfig import
⑴osource "$(DEVICE_PATH)/Kconfig"⑵config SOC_COMPANY
string "SoC company name to locate soc build path"
help
This option specifies the SoC company name, used to locate the build path for soc. This option is set by the
SoCs Kconfig file, and should be exactly the same with SoC company path, and the user should generally avoid
modifying it via the menu configuration.⑶orsource "../../device/board/*/Kconfig.liteos_m.shields"⑷orsource "../../device/board/$(BOARD_COMPANY)/Kconfig.liteos_m.defconfig.boards"choice
prompt "Board Selection"orsource "../../device/board/$(BOARD_COMPANY)/Kconfig.liteos_m.boards"⑸endchoice⑹orsource "../../device/soc/*/Kconfig.liteos_m.defconfig"choice
prompt "SoC Series Selection"orsource "../../device/soc/*/Kconfig.liteos_m.series"endchoice⑺orsource "../../device/soc/*/Kconfig.liteos_m.soc"
2.1 扩展板配置上面的小节中
"../../device/board/*/Kconfig.liteos_m.shields"
用于配置扩展板信息,使用*
通配符匹配所有的扩展板,可以将所有扩展板配置信息都加载进来。设计者认为不同单板厂商的扩展板可以兼容使用吧。还比较有意思的是,Kconfig文件采用liteos_m.shields
作为后缀,一方面指明内核类型,又指明是扩展板的配置。fnlink的扩展板设置路径为device\\board\\fnlink\\Kconfig.liteos_m.shields
,其内容如下。可以看到又进一步包含shields目录下面Kconfig.liteos_m.shields
。orsource "shields/Kconfig.liteos_m.shields"
文件
device\\board\\fnlink\\shields\\Kconfig.liteos_m.shields
的内容如下:⑴处为各个开发板的默认配置项取值,界面上不会显示。⑵处用于展示,并让开发者界面上选择需要的开发板。选择开发板时,对应的一些依赖配置项会被打开,可以自行参考文件device\\board\\fnlink\\shields\\v200zr-evb-t1\\Kconfig.liteos_m.shield
。⑴orsource "*/Kconfig.liteos_m.defconfig.shield"choice
prompt "shield Selection"⑵orsource "*/Kconfig.liteos_m.shield"endchoice
下面附上fnlink扩展板目录shields下相关的文件信息:
shields
├── BUILD.gn
├── Kconfig.liteos_m.shields
├── v200zr-evb-t0
│├── BUILD.gn
│├── Kconfig.liteos_m.defconfig.shield
│├── Kconfig.liteos_m.shield
└── v200zr-evb-t1
├── BUILD.gn
├── Kconfig.liteos_m.defconfig.shield
├── Kconfig.liteos_m.shield
2.2 开发板配置文件
"../../device/board/$(BOARD_COMPANY)/Kconfig.liteos_m.defconfig.boards"
提供指定公司的开发板的默认配置项信息,如文件device\\board\\fnlink\\Kconfig.liteos_m.defconfig.boards
内容如下,又进一步引入公司各个开发板的默认配置项信息,可以具体查看文件device\\board\\fnlink\\v200zr\\Kconfig.liteos_m.defconfig.board
了解下公司开发板默认配置项信息。默认配置项信息不会在配置界面上进行展示。orsource "*/Kconfig.liteos_m.defconfig.board"
文件
"../../device/board/$(BOARD_COMPANY)/Kconfig.liteos_m.boards"
提供指定公司开发板的配置项信息,如文件device\\board\\fnlink\\Kconfig.liteos_m.boards
的配置项如下,又进一步引入公司各个开发板的默认配置项信息,可以具体查看文件device\\board\\fnlink\\v200zr\\Kconfig.liteos_m.board
了解下公司开发板配置项信息。这些配置项用于在界面上供开发者选择所需的开发板。因为开发板依赖SoC配置项,SoC在hb set时已经确认,这里的配置在界面上只起到展示作用,开发者并不能进行选择配置,这块预计后续会继续优化。orsource "*/Kconfig.liteos_m.board"
device\\board\\fnlink\\v200zr\\Kconfig.liteos_m.board
内容如下:config BOARD_V200ZR
bool "select board V200Z-R"
depends on SOC_BES2600W
2.3 芯片配置文件
"../../device/soc/*/Kconfig.liteos_m.defconfig"
提供芯片系列的默认配置项信息,如文件device\\soc\\bestechnic\\Kconfig.liteos_m.defconfig
内容如下,又进一步把各个芯片型号的默认配置信息引入进来,如device\\soc\\bestechnic\\bes2600\\Kconfig.liteos_m.defconfig.series
。rsource "*/Kconfig.liteos_m.defconfig.series"config HALS_COMMUCATION_WIFI_LITE
bool "WIFI LITE"
default y
在
"SoC Series Selection"
Soc系列选择项中,使用的"../../device/soc/*/Kconfig.liteos_m.series"
会把SoC各个系列的配置项引入进来,如device\\soc\\bestechnic\\Kconfig.liteos_m.series
,文件内容如下,会进一步把文件device\\soc\\bestechnic\\bes2600\\Kconfig.liteos_m.series
引入进来。细心的同学可能已经注意到,文件Kconfig.liteos_m.series
在目录bestechnic
和目录bestechnic\\bes2600
下都有,属于同名文件。所以,Kconfig中的路径通配符*
只通配了一级目录。rsource "*/Kconfig.liteos_m.series"
SoC和SoC Serial的配置项类似,可以自行查看。
小结本文在前文的基础上,先介绍下
hb set
、Makefile
和kconfig
的关系,然后介绍下如何使用Kconfig图形化配置芯片、设备和产品方案。因为时间关系,仓促写作,或能力限制,若有失误之处,请各位读者多多指正。感谢阅读,有什么问题,请留言。【鸿蒙轻内核Kconfig使用笔记-进阶】【#本文正在参与优质创作者激励#】
想了解更多关于鸿蒙的内容,请访问:
51CTO和华为官方合作共建的鸿蒙技术社区
https://harmonyos.51cto.com/#bkwz
::: hljs-center
文章图片
:::
推荐阅读
- 学习Java必备的基础知识打卡12.28,要想学好必须扎实基本功(?建议收藏)#yyds干货盘点#
- #yyds干货盘点#JavaScript - 字符串的转义
- Apache Geode 的 Spring 数据教程二十
- flink算子
- 第5章 IP基本原理1-H3C认证网络工程师(H3CNE)
- 跟着动画学 Go 数据结构之 Go 实现栈#私藏项目实操分享#
- win7系统用户名查看 迅速查看系统之家Win7纯净版系统用户名及SID的技巧
- win7系统诊断工具 系统诊断工具迅速处理电脑公司win7系统音箱没声音的问题
- 加快win7系统速度 优化设置提升雨林木风win7 32位系统运行速度的窍门