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

鸿蒙之光内核Kconfig笔记-进阶

时间:2023-03-19 21:38:43 科技观察

更多内容请访问:https://harmonyos.51cto.com,与华为共同打造的鸿蒙技术社区,在文章《鸿蒙轻内核Kconfig使用笔记》知识中介绍了Kconfig的基础知识,以及鸿蒙之光内核的图形化配置。本文继续介绍一些高级的使用方法。本文涉及的源代码可以从开源站点https://gitee.com/openharmony/kernel_liteos_m获取。说到开发板,以fnlinkv200zr为例。芯片开发板的相关工程路径如下:https://gitee.com/openharmony/vendor_bestechnichttps://gitee.com/openharmony/device_soc_bestechnichttps://gitee.com/openharmony/device_board_fnlink基于上一篇文章,本文介绍了hbset、Makefile和kconfig的关系,然后介绍了如何使用Kconfig图形化配置芯片、器件和产品方案。一、hbset、Makefile和kconfig的关系我们知道,在制作menuconfig之前,必须先使用hbset来设置产品方案。让我们看看如何去做。在kernel\liteos_m\Makefile文件中,有如下makefile片段。⑴使用makefileforeach命令和shellsed命令循环遍历hbset输出的每一行,去掉"key:value"格式中多余的[OHOSINFO]字符,并将空格转换为下划线,即转换后的格式为“key=value”,然后转换成makefile的变量形式。hbenv的输出,shell命令的输出,见下文。ohos_device_path=/home/zhushy/openharmony/device/board/fnlink/v200zr/liteos_m(2)判断hb集合解析得到的ohos_kernel内核是否等于liteos_m,如果不等于,说明产品方案不是hb设定的set,ortheset不是liteos_m内核。在设置liteos_a\linux内核时,不能在kernel\liteos_m目录下执行makemenuconfig。生成的变量除了ohos_kernel外,还有ohos_product、ohos_product_path、ohos_device_path、ohos_device_company等。在⑶处的makefile片段可以看出,makefile还有makehelp中没有提到的参数用法。可以使用makePRODUCT_PATH=XX_Device_Path_XXX等命令替换hbset设置的产品方案对应的设备路径。⑷将这些设置导出为环境变量。这些环境变量在kernel\liteos_m\Kconfig文件中使用。ohos_kernel?=liteos_m⑴$(foreachline,$(shellhbenv|sed's/\[OHOSINFO\]/ohos/g;s//_/g;s/:_/=/g'||true),$(eval$(line)))⑵ifneq($(ohos_kernel),liteos_m)$(errorTheselectedproduct($(ohos_product))isnotaliteos_mkerneltypeproduct)endif⑶ifeq($(PRODUCT_PATH),)PRODUCT_PATH:=$(ohos_product_path)endififeq($(DEVICE_PATH),)DEVICE_PATH:=$(ohos_device_path)endifeq($(BOARD_COMPANY),)BOARD_COMPANY:=$(ohos_device_company)endif...⑷exportBOARD_COMPANYexportDEVICE_PATHexportPRODUCT_PATHhbenv的输出类如下:[OHOSINFO]rootpath:/home/zhushy/openharmony[OHOSINFO]board:v200zr[OHOSINFOzr]内核:liteos_m[OHOSINFO]产品:iotlink_demo[OHOSINFO]产品路径:/home/zhushy/openharmony/vendor/bestechnic/iotlink_demo[OHOSINFO]设备路径:/home/zhushy/openharmony/device/board/fnlink/v200zr/liteos_m[OHOSINFO]devicecompany:fnlink执行shell指令hbenv|sed's/\[OHOSINFO\]/ohos/g;s//_/g;s/:_/=/g'的输出如下:ohos_root_path=/home/zhushy/openharmonyohos_board=v200zrohos_kernel=liteos_mohos_product=iotlink_demoohos_product_path=/home/zhushy/openharmony/vendor/bestechnic/iotlink_demoohos_device_path=/home/zhushy/openharmony/device/board/fnlink/v200zr/liteos_mohos_device_company=fnlink2,芯片、单板、扩展板的Kconfig配置执行makemenuconfig,进入平台配置路径后,可以看到如下图的配置界面,支持配置扩展板、单板、芯片系列等,总的感觉这块应该继续优化调整将来。hbset设置产品方案时,芯片和开发板已经确定,这些只能在Kconfig界面显示,不能配置。扩展板可以继续选择。以后支持的开发板和方案丰富的时候,hbset设置和kconfig接口设置需要更好的配合。比如hbset可以支持一系列的开发板和方案,具体选择哪些开发板和方案,可以在kconfig界面进行配置,hbset只提供默认值等。我们来看看对应的makefile片段了解更多关于Kconfig配置的规则。(1)开发板device下可以提供如下配置选项,比如在device\board\fnlink\v200zr\liteos_m目录下维护Kconfig文件,提供可自定义的配置项。(2)提供设备的公司名称来定位构建路径等。该配置项configSOC_COMPANY只提供字符串类型、提示提示、帮助信息等属性。在后续配置SOC部分,如device\soc\bestechnic\Kconfig.liteos_m.soc,继续提供该配置项的默认值default信息。在Kconfig中,多次出现运行同一个config配置项。⑶处设置扩展板屏蔽罩,⑷至⑷用于配置开发板信息,⑴至⑺用于配置芯片系列和芯片信息。下面详细分析。#DeviceKconfigimport⑴osource"$(DEVICE_PATH)/Kconfig"⑵configSOC_COMPANYstring"SoCcompanynametolocatesocbuildpath"helpThisoptionspecifiestheSoCcompanyname,usedtolocatethebuildpathforsoc.ThisoptionissetbytheSoC'sKconfigfile,andshouldbeexactlythesamewithSoCcompanypath,andtheusershouldgenerallyavoidmodifyingitviathemenuconfiguration.⑶orsource"../../device/board/*/Kconfig.liteos_m.shields"⑷orsource"../../device/board/$(BOARD_COMPANY)/Kconfig.liteos_m.defconfig.boards"choiceprompt"BoardSelection"orsource"../../device/board/$(BOARD_COMPANY)/Kconfig.liteos_m.boards"⑷endchoice⑩orsource"../../device/soc/*/Kconfig.liteos_m.defconfig"choiceprompt"SoCSeriesSelection"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"choiceprompt"shieldSelection"⑵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.shield2.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"file"../../device/board/$(BOARD_COMPANY)/Kconfig.liteos_m.boards"提供指定公司开发板的配置项信息,如文件device\board\fnlink\Kconfig.liteos_m.boards的配置项如下,进一步介绍公司各开发板的默认配置项信息。可以查看文件device\board\fnlink\v200zr\Kconfig.liteos_m.board了解公司开发板信息的配置项。这些配置项用于开发者选择所需开发板的界面。因为开发板依赖SoC的配置项,所以在hbset的时候已经确定了SoC。这里的配置只是在界面上展示,开发者不能选择配置。预计未来会继续优化。orsource"*/Kconfig.liteos_m.board"device\board\fnlink\v200zr\Kconfig.liteos_m.board内容如下:configBOARD_V200ZRbool"selectboardV200Z-R"dependsonSOC_BES2600W2.3chipconfigurationfile"../../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"configHALS_COMMUCATION_WIFI_LITEbool"WIFILITE"defaulty"../../device/soc/*/Kconfig.liteos_m.series"在“SoCSeriesSelection”中使用Socseriesselection的配置项每个系列的SoC都会被导入,比如device\soc\bestechnic\Kconfig.liteos_m.series,文件内容如下,文件device\soc\bestechnic\bes2600\Kconfig.liteos_m.series将进一步介绍。细心的同学可能已经注意到,bestechnic目录和bestechnic\bes2600目录下存在Kconfig.liteos_m.series文件,属于同名文件。因此,Kconfig中的路径通配符*只能通配一级目录。rsource"*/Kconfig.liteos_m.series"SoC和SoCSerial的配置项类似,大家可以自行查看。小结本文在上一篇文章的基础上,首先介绍hbset、Makefile和kconfig的关系,然后介绍如何使用Kconfig图形化配置芯片、器件和产品方案。由于时间紧迫,仓促行文,或能力所限,如有错误,欢迎读者指正。更多信息请访问:Harmonyos.51cto.com,与华为官方合作打造的鸿蒙技术社区