成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

移植案例與原理 - startup子系統之syspara_lite系統屬性部件

原創
系統 OpenHarmony
本文介紹了startup子系統之syspara系統屬性部件的移植適配案例及原理。

??想了解更多內容,請訪問:??

??51CTO和華為官方合作共建的鴻蒙技術社區??

??https://harmonyos.51cto.com??

系統屬性部件syspara_lite負責提供獲取與設置操作系統相關的系統屬性,包括默認系統屬性、OEM廠商系統屬性和自定義系統屬性。為滿足OpenHarmony產品兼容性規范,產品解決方案需要實現獲取設備信息的接口,如:產品名、品牌名、廠家名等,同時提供設置/讀取系統屬性的接口。本文介紹下移植開發板時如何適配系統屬性部件syspara_lite,并介紹下相關的運行機制原理。系統屬性部件syspara_lite包含系統參數特性syspara_lite和token。系統屬性部件syspara_lite定義在build\lite\components\startup.json。源代碼目錄如下:

base/startup/syspara_lite/    # 系統屬性部件
├── frameworks # 系統屬性部件源文件目錄
├── hals # 系統屬性部件硬件抽象層頭文件目錄
└── interfaces # 系統屬性部件對外接口目錄

1、系統參數syspara適配

適配啟動恢復子系統startup的syspara_lite部件的一個實例vendor\bestechnic\display_demo\config.json的代碼片段如下,⑴處的配置項enable_ohos_startup_syspara_lite_use_posix_file_api設置為true,下文通過分析syspara_lite部件的代碼來解釋。

  {
"product_name": "display_demo",
......
"subsystems": [
{
......
{
"subsystem": "startup",
"components": [
{
"component": "bootstrap_lite"
},
{
"component": "syspara_lite",
"features": [
⑴ "enable_ohos_startup_syspara_lite_use_posix_file_api = true"
]
}
]
},
......
],
"vendor_adapter_dir": "",
"product_adapter_dir": "http://vendor/bestechnic/display_demo/hals",
......
}

我們知道,syspara_lite部件支持獲取和設置操作系統的參數,當設置系統參數時,系統參數會最終寫到文件中進行持久化保存。在輕量系統中,文件操作相關接口有POSIX接口與HalFiles接口這兩套實現。POSIX文件系統接口代碼位置kernel\liteos_m\kal\libc\musl\fs.c,HalFiles文件系統接口位置為utils\native\lite\file\src\file_impl_hal\file.c。當對接內核的文件系統,采用POSIX相關的接口時,需要在features字段中需要增加enable_ohos_startup_syspara_lite_use_posix_file_api = true。如果對接HalFiles相關的接口,則無須修改。enable_ohos_startup_syspara_lite_use_posix_file_api默認為false,定義在文件base\startup\syspara_lite\frameworks\parameter\config.gni。我們通過看下編譯配置文件來了解下實現的原理機制,打開文件base\startup\syspara_lite\frameworks\parameter\src\BUILD.gn,片段如下。

⑴處解釋了上文的配置參數enable_ohos_startup_syspara_lite_use_posix_file_api。⑵處依賴產品解決方案中的適配的sys_param實現代碼。ohos_product_adapter_dir是產品解決方案config.json中的配置項,該配置項一遍設置為"hals"。sys_param實現代碼文件的路徑一遍為"hals/utils/sys_paramn/hal_sys_param.c",并且同級目錄的BUILD.gn文件中的靜態庫名稱必須為hal_sysparam。⑶處表示如果需要使用安全函數,則需要配置項enable_ohos_startup_syspara_lite_use_thirdparty_mbedtls設置為true。⑷處設置一些配置項宏,這些屬于構建類別的參數。

if (ohos_kernel_type == "liteos_m") {
static_library("sysparam") {
include_dirs = [
"http://base/startup/syspara_lite/interfaces/kits",
"http://utils/native/lite/include",
"http://base/startup/syspara_lite/frameworks/parameter/src",
"http://base/startup/syspara_lite/hals",
"http://third_party/mbedtls/include",
]
sources = [ "parameter_common.c" ]
⑴ if (enable_ohos_startup_syspara_lite_use_posix_file_api) {
sources += [ "param_impl_posix/param_impl_posix.c" ]
} else {
sources += [ "param_impl_hal/param_impl_hal.c" ]
}

⑵ deps = [ "$ohos_product_adapter_dir/utils/sys_param:hal_sysparam" ]
⑶ if (enable_ohos_startup_syspara_lite_use_thirdparty_mbedtls) {
deps += [ "http://third_party/mbedtls:mbedtls" ]
}

if (enable_ohos_startup_syspara_lite_use_posix_file_api) {
deps += [ "http://third_party/bounds_checking_function:libsec_static" ]
}
defines = [
⑷ "INCREMENTAL_VERSION=\"${ohos_version}\"",
"BUILD_TYPE=\"${ohos_build_type}\"",
"BUILD_USER=\"${ohos_build_user}\"",
"BUILD_TIME=\"${ohos_build_time}\"",
"BUILD_HOST=\"${ohos_build_host}\"",
"BUILD_ROOTHASH=\"${ohos_build_roothash}\"",
"USE_MBEDTLS",
"DATA_PATH=\"${config_ohos_startup_syspara_lite_data_path}\"",
]
}
}

看個產品解決方案的實際例子,vendor\bestechnic\display_demo\hals\utils\sys_param\BUILD.gn的代碼如下,⑴處的靜態庫的名字是不能隨意更改的,見上文解釋。

⑴  static_library("hal_sysparam") {
sources = [ "hal_sys_param.c" ]
include_dirs = [ "http://base/startup/syspara_lite/hals" ]
defines = [
"INCREMENTAL_VERSION=\"${ohos_version}\"",
"BUILD_TYPE=\"${ohos_build_type}\"",
"BUILD_USER=\"${ohos_build_user}\"",
"BUILD_TIME=\"${ohos_build_time}\"",
"BUILD_HOST=\"${ohos_build_host}\"",
"BUILD_ROOTHASH=\"${ohos_build_roothash}\"",
]
}

文件vendor\bestechnic\display_demo\hals\utils\sys_param\hal_sys_param.c實現接口文件base\startup\syspara_lite\hals\hal_sys_param.h中聲明的函數,如下所示,主要包含設備廠商信息,軟件版本信息,構建信息等。

const char* HalGetDeviceType(void);
const char* HalGetManufacture(void);
const char* HalGetBrand(void);
const char* HalGetMarketName(void);
const char* HalGetProductSeries(void);
const char* HalGetProductModel(void);
const char* HalGetSoftwareModel(void);
const char* HalGetHardwareModel(void);
const char* HalGetHardwareProfile(void);
const char* HalGetSerial(void);
const char* HalGetBootloaderVersion(void);
const char* HalGetAbiList(void);
const char* HalGetDisplayVersion(void);
const char* HalGetIncrementalVersion(void);
const char* HalGetBuildType(void);
const char* HalGetBuildUser(void);
const char* HalGetBuildHost(void);
const char* HalGetBuildTime(void);
int HalGetFirstApiVersion(void);

在適配HalGetSerial接口時,開發板不像產線生產過程那樣,會寫入一個具體的序列號Serial Number,因而需要確定一個數據對開發板進行唯一標識。vendor\bestechnic\display_demo\hals\utils\sys_param\hal_sys_param.c中提供了一種方法,采用WiFi Mac地址進行適配。

const char* HalGetSerial(void)
{
char macAddr[ETH_ALEN];
// as devboard has no production serial number, we just
// use wifi mac address as device serial number.
if (serialNumber[0] == STR_END_FLAG) {
extern int bwifi_get_own_mac(u8 *addr);
bwifi_get_own_mac(macAddr);
int j = 0;
for (int i = 0; i < ETH_ALEN; i++) {
u8 lowFour, highFour;
highFour = (macAddr[i] & MAC_HIGH_MASK) >> MAC_BITS;
serialNumber[j] = Hex2Char(highFour);
j++;
lowFour = macAddr[i] & MAC_LOW_MASK;
serialNumber[j] = Hex2Char(lowFour);
j++;
}
}
return serialNumber;
}

2、Token令牌適配

在文件base\startup\syspara_lite\hals\hal_token.h中定義令牌相關的接口聲明,包含寫令牌,獲取AcKey,獲取產品編碼和產品鍵值。在移植開發板時,需要實現這些接口。

在base\startup\syspara_lite\frameworks\token\BUILD.gn文件中,查看令牌如何編譯的,以LiteOS-M為例,片段為:

⑴處可以看出編譯使用的源文件是"src/token_impl_hal/token.c",對于linux和liteos-a內核使用的源文件是"src/token_impl_posix/token.c"。"token.c"文件代碼很簡單,判斷下參數然后調用產品解決方案中的適配函數,比如函數ReadToken()會調用HalReadToken()函數。

⑵處需要注意,這里依賴的就是產品解決方案適配的token實現代碼。ohos_product_adapter_dir是產品解決方案config.json中的配置項,該配置項一遍設置為"hals"。token實現代碼文件的路徑一遍為"hals/utils/token/hal_token.c",并且同級目錄的BUILD.gn文件中的靜態庫名稱必須為hal_token_static。⑶處表示token部件由特性token_static組成。

  if (ohos_kernel_type == "liteos_m") {
static_library("token_static") {
⑴ sources = [ "src/token_impl_hal/token.c" ]

include_dirs = [
"http://base/startup/syspara_lite/interfaces/kits",
"http://utils/native/lite/include",
"http://base/hiviewdfx/hilog_lite/interfaces/native/kits/hilog_lite",
"http://base/startup/syspara_lite/hals",
]

⑵ deps = [ "$ohos_product_adapter_dir/utils/token:hal_token_static" ]
}
}

lite_component("token") {
features = []
if (ohos_kernel_type == "liteos_a" || ohos_kernel_type == "linux") {
features += [ ":token_shared" ]
}
if (ohos_kernel_type == "liteos_m") {
⑶ features += [ ":token_static" ]
}
}

看個產品解決方案的實際例子,vendor\bestechnic\display_demo\hals\utils\token\BUILD.gn的代碼如下,⑴處的靜態庫的名字是不能隨意更改的,見上文解釋。

⑴  static_library("hal_token_static") {
sources = [ "hal_token.c" ]

include_dirs = [
"http://base/startup/syspara_lite/hals",
"http://utils/native/lite/include",
]
deps = []
}

文件vendor\bestechnic\display_demo\hals\utils\token\hal_token.c中的令牌實現代碼片段如下,當前均為空實現,沒有實際使用起來。

static int OEMReadToken(char *token, unsigned int len)
{
// OEM need add here, read token from device
(void)(token);
(void)(len);
return EC_SUCCESS;
}
......
int HalReadToken(char *token, unsigned int len)
{
if (token == NULL) {
return EC_FAILURE;
}

return OEMReadToken(token, len);
}

小結

本文介紹了startup子系統之syspara系統屬性部件的移植適配案例及原理。

??想了解更多內容,請訪問:??

??51CTO和華為官方合作共建的鴻蒙技術社區??

??https://harmonyos.51cto.com??

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2022-01-26 15:16:24

utilsOpenHarmon鴻蒙

2022-02-16 15:48:26

ACTS應用XTS子系統鴻蒙

2022-02-16 15:39:30

ACTS應用XTS子系統鴻蒙

2022-11-01 15:29:03

移植案例hb命令

2022-10-31 15:40:22

移植案例鴻蒙

2023-03-09 15:15:21

鴻蒙模塊編譯

2021-12-27 16:20:45

鴻蒙HarmonyOS應用

2009-12-22 13:26:03

Linux sysfs

2011-01-25 10:27:12

Linux 文件系統屬

2022-05-12 12:47:07

SPI主設備通信

2022-05-15 22:34:32

SPI 控制器SPI 子系統

2014-09-22 13:31:46

Linux

2023-04-12 15:31:11

系統服務管理鴻蒙

2009-10-21 17:29:34

Oracle管理系統

2021-06-07 08:13:11

LinuxIDLE 子系統

2020-11-08 16:16:12

Linux硬盤RAID

2023-02-26 23:13:24

存儲LinuxRAID

2022-03-18 16:07:04

Graphic子系統鴻蒙

2015-11-10 16:55:00

性能IO子系統Linux

2012-04-16 14:10:24

綜合布線
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美成人在线影院 | 久久精品无码一区二区三区 | 在线播放一区二区三区 | 中文成人无字幕乱码精品 | 99久久精品免费看国产免费软件 | 亚洲成人精品免费 | 欧美成人精品一区二区男人看 | 手机在线不卡av | 久久成人人人人精品欧 | 涩涩操 | 久久99精品久久久 | 欧美日韩黄色一级片 | 香蕉久久av | 亚洲综合资源 | 三级黄视频在线观看 | 免费一看一级毛片 | 国产毛片毛片 | 伊人久久综合 | 欧美综合久久久 | 欧美日韩在线一区二区 | 精品亚洲一区二区三区四区五区 | 精品九九 | 成人精品在线视频 | 亚洲精品一区二 | 色综合一区二区 | 久艹网站| 国产午夜视频 | 精品国产欧美一区二区 | 天天综合久久网 | 国产视频一视频二 | 夜久久 | 午夜在线免费观看视频 | 国产精品久久久久久久久久三级 | 久久久91精品国产一区二区三区 | 爱爱爱av | 日韩国产免费 | 国产精品18久久久 | 成人国产一区二区三区精品麻豆 | 亚洲欧美激情国产综合久久久 | 日韩网站在线观看 | 一区二区在线观看av |