自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

鴻蒙輕內(nèi)核Kconfig使用筆記-進(jìn)階

系統(tǒng)
本文在前文的基礎(chǔ)上,再介紹下hb set、Makefile和kconfig的關(guān)系,然后介紹下如何使用Kconfig圖形化配置芯片、設(shè)備和產(chǎn)品方案。

[[442379]]

想了解更多內(nèi)容,請?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

在《鴻蒙輕內(nèi)核Kconfig使用筆記》一文介紹了Kconfig的基礎(chǔ)知識,和鴻蒙輕內(nèi)核的圖形化配置。本文繼續(xù)介紹些進(jìn)階的使用方法。本文中所涉及的源碼,均可以在開源站點(diǎn)https://gitee.com/openharmony/kernel_liteos_m 獲取,涉及開發(fā)板時(shí)以fnlink v200zr為例, 芯片開發(fā)板相關(guān)工程路徑如下:

  • https://gitee.com/openharmony/vendor_bestechnic
  • https://gitee.com/openharmony/device_soc_bestechnic
  • https://gitee.com/openharmony/device_board_fnlink

本文在前文的基礎(chǔ)上,再介紹下hb set、Makefile和kconfig的關(guān)系,然后介紹下如何使用Kconfig圖形化配置芯片、設(shè)備和產(chǎn)品方案。

1、 hb set、Makefile和kconfig的關(guān)系

我們知道在make menuconfig 之前,必須使用hb set設(shè)置產(chǎn)品解決方案,下面看下具體是如何做到的。

在kernel\liteos_m\Makefile文件中,有如下makefile片段。⑴處使用makefile foreach命令和shell sed命令循環(huán)處理hb set輸出的每一行,把“key:value”格式去掉多余的[OHOS INFO]字符,把空格轉(zhuǎn)換為下劃線,即轉(zhuǎn)換的格式為“key=value”,然后轉(zhuǎn)換為makefile的變量形式。hb env的輸出、shell命令的輸出見下文。

  1. ohos_device_path=/home/zhushy/openharmony/device/board/fnlink/v200zr/liteos_m 

⑵處判斷解析hb set獲取的ohos_kernel內(nèi)核是否等于liteos_m,如果不等于,則說明未使用hb set設(shè)置產(chǎn)品解決解決方案,或者設(shè)置的不是liteos_m內(nèi)核。設(shè)置liteos_a\linux內(nèi)核時(shí),不能在kernel\liteos_m目錄下執(zhí)行make menuconfig。除了ohos_kernel,生成的變量還有ohos_product、ohos_product_path、ohos_device_path、ohos_device_company等等。

⑶處的makefile片段表明,makefile還有make help里面沒有提到的參數(shù)用法??梢允褂胢ake PRODUCT_PATH=XX_Device_Path_XXX等命令來替代使用hb set設(shè)置的產(chǎn)品解決方案對應(yīng)的設(shè)備路徑。⑷處將這些設(shè)置導(dǎo)出為環(huán)境變量。在kernel\liteos_m\Kconfig文件中會使用這些環(huán)境變量。

  1.   ohos_kernel ?= liteos_m 
  2. ⑴  $(foreach line,$(shell hb env | sed 's/\[OHOS INFO\]/ohos/g;s/ /_/g;s/:_/=/g' || true),$(eval $(line))) 
  3. ⑵  ifneq ($(ohos_kernel),liteos_m) 
  4.     $(error The selected product ($(ohos_product)) is not a liteos_m kernel type product) 
  5.     endif 
  6.  
  7. ⑶  ifeq ($(PRODUCT_PATH),) 
  8.     PRODUCT_PATH:=$(ohos_product_path) 
  9.     endif 
  10.  
  11.     ifeq ($(DEVICE_PATH),) 
  12.     DEVICE_PATH:=$(ohos_device_path) 
  13.     endif 
  14.  
  15.     ifeq ($(BOARD_COMPANY),) 
  16.     BOARD_COMPANY:=$(ohos_device_company) 
  17.     endif 
  18.     ... 
  19. ⑷  export BOARD_COMPANY 
  20.     export DEVICE_PATH 
  21.     export PRODUCT_PATH 

hb env的輸出類似如下:

  1. [OHOS INFO] root path: /home/zhushy/openharmony 
  2. [OHOS INFO] board: v200zr 
  3. [OHOS INFO] kernel: liteos_m 
  4. [OHOS INFO] product: iotlink_demo 
  5. [OHOS INFO] product path: /home/zhushy/openharmony/vendor/bestechnic/iotlink_demo 
  6. [OHOS INFO] device path: /home/zhushy/openharmony/device/board/fnlink/v200zr/liteos_m 
  7. [OHOS INFO] device company: fnlink 

 執(zhí)行shell命令hb env | sed 's/\[OHOS INFO\]/ohos/g;s/ /_/g;s/:_/=/g'的輸出如下:

  1. ohos_root_path=/home/zhushy/openharmony 
  2. ohos_board=v200zr 
  3. ohos_kernel=liteos_m 
  4. ohos_product=iotlink_demo 
  5. ohos_product_path=/home/zhushy/openharmony/vendor/bestechnic/iotlink_demo 
  6. ohos_device_path=/home/zhushy/openharmony/device/board/fnlink/v200zr/liteos_m 
  7. ohos_device_company=fnlink 

2、 芯片、單板、擴(kuò)展板的Kconfig配置

在執(zhí)行make menuconfig,進(jìn)入platform配置路徑后,可以看到如下圖所示的配置界面,支持對擴(kuò)展板、單板、芯片系列等配置。總體感覺這塊后續(xù)應(yīng)該還需要繼續(xù)優(yōu)化調(diào)整。hb set設(shè)置產(chǎn)品解決方案時(shí),已經(jīng)確定了芯片和開發(fā)板,這些也只能在Kconfig界面上展示,是無法配置的。擴(kuò)展板倒是可以繼續(xù)選擇。后續(xù)等支持的開發(fā)板和解決方案豐富起來時(shí),hb set設(shè)置和kconfig界面設(shè)置需要更好的來協(xié)作。比如hb set可以支持一系列開發(fā)板和解決方案,具體的選擇哪些開發(fā)板和解決方案,可以kconfig界面上來配置,hb set只提供默認(rèn)值等等。

鴻蒙輕內(nèi)核Kconfig使用筆記-進(jìn)階-鴻蒙HarmonyOS技術(shù)社區(qū)

我們來看下對應(yīng)的makefile片段,深入了解下Kconfig配置的規(guī)則。⑴處可以在開發(fā)板設(shè)備下提供下配置選項(xiàng),如device\board\fnlink\v200zr\liteos_m目錄下維護(hù)Kconfig文件提供可定制的配置項(xiàng)。⑵處提供設(shè)備的公司名稱用來定位構(gòu)建路徑等,這個(gè)配置項(xiàng)config SOC_COMPANY只提供string類型、prompt提示、help幫助信息等屬性。后續(xù)在SOC部分的配置里,如device\soc\bestechnic\Kconfig.liteos_m.soc,繼續(xù)提供這個(gè)配置項(xiàng)的默認(rèn)值default信息。Kconfig里,運(yùn)行對同一個(gè)config配置項(xiàng)多處出現(xiàn)。

⑶處設(shè)置擴(kuò)展板shields、⑷到⑸用于配置開發(fā)板信息,⑹到⑺用于配置芯片族和芯片信息。下文分別詳細(xì)分析。

  1.     # Device Kconfig import 
  2. ⑴  osource "$(DEVICE_PATH)/Kconfig" 
  3.  
  4. ⑵  config SOC_COMPANY 
  5.         string "SoC company name to locate soc build path" 
  6.         help 
  7.         This option specifies the SoC company name, used to locate the build path for soc. This option is set by the 
  8.         SoC's Kconfig file, and should be exactly the same with SoC company path, and the user should generally avoid 
  9.         modifying it via the menu configuration. 
  10.  
  11. ⑶  orsource "../../device/board/*/Kconfig.liteos_m.shields" 
  12.  
  13. ⑷  orsource "../../device/board/$(BOARD_COMPANY)/Kconfig.liteos_m.defconfig.boards" 
  14.  
  15.     choice 
  16.         prompt "Board Selection" 
  17.  
  18.     orsource "../../device/board/$(BOARD_COMPANY)/Kconfig.liteos_m.boards" 
  19.  
  20. ⑸  endchoice 
  21.  
  22. ⑹  orsource "../../device/soc/*/Kconfig.liteos_m.defconfig" 
  23.  
  24.     choice 
  25.         prompt "SoC Series Selection" 
  26.  
  27.     orsource "../../device/soc/*/Kconfig.liteos_m.series" 
  28.  
  29.     endchoice 
  30.  
  31. ⑺  orsource "../../device/soc/*/Kconfig.liteos_m.soc" 

2.1 擴(kuò)展板配置

上面的小節(jié)中"../../device/board/*/Kconfig.liteos_m.shields"用于配置擴(kuò)展板信息,使用*通配符匹配所有的擴(kuò)展板,可以將所有擴(kuò)展板配置信息都加載進(jìn)來。設(shè)計(jì)者認(rèn)為不同單板廠商的擴(kuò)展板可以兼容使用吧。還比較有意思的是,Kconfig文件采用liteos_m.shields作為后綴,一方面指明內(nèi)核類型,又指明是擴(kuò)展板的配置。fnlink的擴(kuò)展板設(shè)置路徑為device\board\fnlink\Kconfig.liteos_m.shields,其內(nèi)容如下。可以看到又進(jìn)一步包含shields目錄下面Kconfig.liteos_m.shields。

  1. orsource "shields/Kconfig.liteos_m.shields" 

 文件device\board\fnlink\shields\Kconfig.liteos_m.shields的內(nèi)容如下:⑴處為各個(gè)開發(fā)板的默認(rèn)配置項(xiàng)取值,界面上不會顯示。⑵處用于展示,并讓開發(fā)者界面上選擇需要的開發(fā)板。選擇開發(fā)板時(shí),對應(yīng)的一些依賴配置項(xiàng)會被打開,可以自行參考文件device\board\fnlink\shields\v200zr-evb-t1\Kconfig.liteos_m.shield。

  1. ⑴  orsource "*/Kconfig.liteos_m.defconfig.shield" 
  2.  
  3.     choice 
  4.         prompt "shield Selection" 
  5.  
  6. ⑵      orsource "*/Kconfig.liteos_m.shield" 
  7.  
  8.     endchoice 

 下面附上fnlink擴(kuò)展板目錄shields下相關(guān)的文件信息:

  1. shields 
  2. ├── BUILD.gn 
  3. ├── Kconfig.liteos_m.shields 
  4. ├── v200zr-evb-t0 
  5. │   ├── BUILD.gn 
  6. │   ├── Kconfig.liteos_m.defconfig.shield 
  7. │   ├── Kconfig.liteos_m.shield 
  8. └── v200zr-evb-t1 
  9.     ├── BUILD.gn 
  10.     ├── Kconfig.liteos_m.defconfig.shield 
  11.     ├── Kconfig.liteos_m.shield 

2.2 開發(fā)板配置

文件"../../device/board/$(BOARD_COMPANY)/Kconfig.liteos_m.defconfig.boards"提供指定公司的開發(fā)板的默認(rèn)配置項(xiàng)信息,如文件device\board\fnlink\Kconfig.liteos_m.defconfig.boards內(nèi)容如下,又進(jìn)一步引入公司各個(gè)開發(fā)板的默認(rèn)配置項(xiàng)信息,可以具體查看文件device\board\fnlink\v200zr\Kconfig.liteos_m.defconfig.board了解下公司開發(fā)板默認(rèn)配置項(xiàng)信息。默認(rèn)配置項(xiàng)信息不會在配置界面上進(jìn)行展示。

  1. orsource "*/Kconfig.liteos_m.defconfig.board" 

 文件"../../device/board/$(BOARD_COMPANY)/Kconfig.liteos_m.boards"提供指定公司開發(fā)板的配置項(xiàng)信息,如文件device\board\fnlink\Kconfig.liteos_m.boards的配置項(xiàng)如下,又進(jìn)一步引入公司各個(gè)開發(fā)板的默認(rèn)配置項(xiàng)信息,可以具體查看文件device\board\fnlink\v200zr\Kconfig.liteos_m.board了解下公司開發(fā)板配置項(xiàng)信息。這些配置項(xiàng)用于在界面上供開發(fā)者選擇所需的開發(fā)板。因?yàn)殚_發(fā)板依賴SoC配置項(xiàng),SoC在hb set時(shí)已經(jīng)確認(rèn),這里的配置在界面上只起到展示作用,開發(fā)者并不能進(jìn)行選擇配置,這塊預(yù)計(jì)后續(xù)會繼續(xù)優(yōu)化。

  1. orsource "*/Kconfig.liteos_m.board" 

 device\board\fnlink\v200zr\Kconfig.liteos_m.board內(nèi)容如下:

  1. config BOARD_V200ZR 
  2.     bool "select board V200Z-R" 
  3.     depends on SOC_BES2600W 

2.3 芯片配置

文件"../../device/soc/*/Kconfig.liteos_m.defconfig"提供芯片系列的默認(rèn)配置項(xiàng)信息,如文件device\soc\bestechnic\Kconfig.liteos_m.defconfig內(nèi)容如下,又進(jìn)一步把各個(gè)芯片型號的默認(rèn)配置信息引入進(jìn)來,如device\soc\bestechnic\bes2600\Kconfig.liteos_m.defconfig.series。

  1. rsource "*/Kconfig.liteos_m.defconfig.series" 
  2.  
  3. config HALS_COMMUCATION_WIFI_LITE 
  4.     bool "WIFI LITE" 
  5.     default y 

 在"SoC Series Selection"Soc系列選擇項(xiàng)中,使用的"../../device/soc/*/Kconfig.liteos_m.series"會把SoC各個(gè)系列的配置項(xiàng)引入進(jìn)來,如device\soc\bestechnic\Kconfig.liteos_m.series,文件內(nèi)容如下,會進(jìn)一步把文件device\soc\bestechnic\bes2600\Kconfig.liteos_m.series引入進(jìn)來。細(xì)心的同學(xué)可能已經(jīng)注意到,文件Kconfig.liteos_m.series在目錄bestechnic和目錄bestechnic\bes2600下都有,屬于同名文件。所以,Kconfig中的路徑通配符*只通配了一級目錄。

  1. rsource "*/Kconfig.liteos_m.series" 

 SoC和SoC Serial的配置項(xiàng)類似,可以自行查看。

小結(jié)

本文在前文的基礎(chǔ)上,先介紹下hb set、Makefile和kconfig的關(guān)系,然后介紹下如何使用Kconfig圖形化配置芯片、設(shè)備和產(chǎn)品方案。因?yàn)闀r(shí)間關(guān)系,倉促寫作,或能力限制,若有失誤之處,請各位讀者多多指正。

想了解更多內(nèi)容,請?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:姜華 來源: 鴻蒙社區(qū)
相關(guān)推薦

2021-12-22 22:32:48

鴻蒙HarmonyOS應(yīng)用

2024-04-14 18:43:18

2019-08-15 16:00:21

Linux內(nèi)核Kconfig

2010-05-31 17:06:35

MySQL游標(biāo)

2012-05-03 08:34:15

LinuxKconfig

2010-06-01 18:47:11

Rsync 使用

2022-03-31 16:26:49

鴻蒙源碼分析進(jìn)程管理

2022-03-03 18:28:28

Harmony進(jìn)程任務(wù)管理模塊

2022-04-13 11:02:12

鴻蒙事件模塊事件Event

2021-07-06 09:45:03

鴻蒙HarmonyOS應(yīng)用

2022-03-11 20:23:14

鴻蒙源碼分析進(jìn)程管理

2021-06-04 09:57:49

鴻蒙HarmonyOS應(yīng)用

2020-10-09 09:21:45

鴻蒙

2022-01-10 15:31:44

鴻蒙HarmonyOS應(yīng)用

2022-01-12 10:50:23

鴻蒙HarmonyOS應(yīng)用

2009-11-30 11:18:46

2021-05-25 09:28:34

鴻蒙HarmonyOS應(yīng)用

2021-10-20 16:08:57

鴻蒙HarmonyOS應(yīng)用

2022-04-13 11:12:43

鴻蒙輕內(nèi)核信號量模塊操作系統(tǒng)

2021-05-17 09:28:59

鴻蒙HarmonyOS應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號