鸿蒙轻内核Kconfig使用笔记-进阶 原创 精华
鸿蒙轻内核Kconfig使用笔记-进阶
【#本文正在参与优质创作者激励#】
在《鸿蒙轻内核Kconfig使用笔记》一文介绍了Kconfig的基础知识,和鸿蒙轻内核的图形化配置。本文继续介绍些进阶的使用方法。本文中所涉及的源码,均可以在开源站点https://gitee.com/openharmony/kernel_liteos_m 获取,涉及开发板时以fnlink v200zr为例
, 芯片开发板相关工程路径如下:
本文在前文的基础上,再介绍下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
文件中会使用这些环境变量。
hb env
的输出类似如下:
执行shell命令hb env | sed 's/\[OHOS INFO\]/ohos/g;s/ /_/g;s/:_/=/g'
的输出如下:
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、⑷到⑸用于配置开发板信息,⑹到⑺用于配置芯片族和芯片信息。下文分别详细分析。
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
。
文件device\board\fnlink\shields\Kconfig.liteos_m.shields
的内容如下:⑴处为各个开发板的默认配置项取值,界面上不会显示。⑵处用于展示,并让开发者界面上选择需要的开发板。选择开发板时,对应的一些依赖配置项会被打开,可以自行参考文件device\board\fnlink\shields\v200zr-evb-t1\Kconfig.liteos_m.shield
。
下面附上fnlink扩展板目录shields下相关的文件信息:
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
了解下公司开发板默认配置项信息。默认配置项信息不会在配置界面上进行展示。
文件"../../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时已经确认,这里的配置在界面上只起到展示作用,开发者并不能进行选择配置,这块预计后续会继续优化。
device\board\fnlink\v200zr\Kconfig.liteos_m.board
内容如下:
2.3 芯片配置
文件"../../device/soc/*/Kconfig.liteos_m.defconfig"
提供芯片系列的默认配置项信息,如文件device\soc\bestechnic\Kconfig.liteos_m.defconfig
内容如下,又进一步把各个芯片型号的默认配置信息引入进来,如device\soc\bestechnic\bes2600\Kconfig.liteos_m.defconfig.series
。
在"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中的路径通配符*
只通配了一级目录。
SoC和SoC Serial的配置项类似,可以自行查看。
小结
本文在前文的基础上,先介绍下hb set
、Makefile
和kconfig
的关系,然后介绍下如何使用Kconfig图形化配置芯片、设备和产品方案。因为时间关系,仓促写作,或能力限制,若有失误之处,请各位读者多多指正。感谢阅读,有什么问题,请留言。
【#本文正在参与优质创作者激励#】
讲解的非常详细,感谢分享