OpenHarmony 系統(tǒng)移植最核心的步驟是內(nèi)核的移植,內(nèi)核的穩(wěn)定是一切子系統(tǒng)穩(wěn)定的基礎(chǔ),本文將介紹內(nèi)核移植實(shí)操部分。
內(nèi)核啟動(dòng)流程梳理
確保移植前開(kāi)發(fā)板的官方 SDK 是可以跑起來(lái)的,原有 SDK 通常為 FreeRTOS 或者其他系統(tǒng),固件的編譯有對(duì)應(yīng)編譯流程,以及系統(tǒng)啟動(dòng)流程。
我們要做的工作就是梳理原有系統(tǒng)啟動(dòng)流程,包括:如何將固件代碼拷貝到內(nèi)存,棧針從哪里開(kāi)始引導(dǎo)系統(tǒng)啟動(dòng),系統(tǒng)啟動(dòng)前需要做哪些軟硬件的初始工作,然后讓 OH 通過(guò)這套流程跑起來(lái)。
系統(tǒng)啟動(dòng)流程及原理圖:MCU 啟動(dòng)工作原理圖:
①BootLoader 將系統(tǒng)程序從 Flash 加載到運(yùn)行內(nèi)存中。
②通過(guò)匯編指令完成系統(tǒng)啟動(dòng)前的軟硬件初始化準(zhǔn)備工作。
③初始化系統(tǒng)并啟動(dòng)系統(tǒng)。
④系統(tǒng)啟動(dòng)完成。
⑤完成系統(tǒng)框架層的啟動(dòng),使各個(gè)子系統(tǒng)處于可用狀態(tài)。
配置 vendor
配置 vendor,創(chuàng)建如下目錄結(jié)構(gòu):
BUILD.gn 代碼如下:
group("explorer"){
}
config.json 代碼如下:
"product_name":"explorer",
"type":"mini",
"version":"3.0",
"device_company":"alientek",
"board":"explorer",
"kernel_type":"liteos_m",
"kernel_version":"3.0.0",
"subsystems":[
{//增加liteos_m內(nèi)核
"subsystem":"kernel",
"components":[
{
"component":"liteos_m",
"features":[]
}
]
},
//這里可以繼續(xù)添加X(jué)TS子系統(tǒng)、DFX子系統(tǒng),以及其他特性子系統(tǒng)
],
"third_party_dir":"",
"product_adapter_dir":""
}
配置完成后保存,我們可以使用 hb set 命令嘗試編譯。可以看到在選項(xiàng)中會(huì)出現(xiàn) alientek -> explorer 構(gòu)建選項(xiàng)。直接使用 hb build -f 編譯后看看結(jié)果,得到錯(cuò)誤提示:需要?jiǎng)?chuàng)建 device 相關(guān)的文件。
根據(jù)報(bào)錯(cuò)提示,可得知應(yīng)該是缺少 device 相關(guān)配置,接下來(lái)繼續(xù)創(chuàng)建 device 相關(guān)配置文件。
配置 device/board
board 配置板卡編譯相關(guān)的工具鏈,以及最為核心的啟動(dòng)匯編命令、鏈接庫(kù)腳本,它將指定 main 函數(shù)來(lái)啟動(dòng)系統(tǒng)。根據(jù)配置規(guī)范,我們?cè)?device 下創(chuàng)建對(duì)應(yīng)的文件夾,開(kāi)發(fā)板是正點(diǎn)原子(alientek)的探索者(explorer),因此我們根據(jù) OH 規(guī)范創(chuàng)建目錄結(jié)構(gòu),如下:
BUILD.gn 代碼如下:
if(ohos_kernel_type=="liteos_m"){
import("http://kernel/liteos_m/liteos.gni")
module_name=get_path_info(rebase_path("."),"name")
module_group(module_name){
modules=[
"explorer",
]
在 /device/board/alientek/explorer/ 目錄下創(chuàng)建 BUILD.gn 文件,以及 liteos_m 目錄。BUILD.gn 代碼與之前一樣。創(chuàng)建開(kāi)發(fā)板配置文件,最終得到如下目錄結(jié)構(gòu)。
配置文件代碼如下:device/board/alientek/explorer/explorer_stm32f407_defconfig 配置:
LOSCFG_BOARD_EXPLORER_STM32F407=y
LOSCFG_SOC_SERIES_STM32F407=y
LOSCFG_SOC_STM32F407=y
device/board/alientek/explorer/Kconfig.liteos_m.board 配置:
configBOARD_EXPLORER_STM32F407
bool"selectboardexplorerstm32f407"
dependsonSOC_STM32F407
device/board/alientek/explorer/Kconfig.liteos_m.defconfig.board 配置:
ifBOARD_EXPLORER_STM32F407
configBOARD
string
default"explorer_stm32f407"
endif#BOARD_EXPLORER_STM32F407
device/board/alientek/Kconfig.liteos_m.boards 配置:
ifSOC_STM32F407
orsource"explorer/Kconfig.liteos_m.board"
endif
device/board/alientek/Kconfig.liteos_m.defconfig.boards 配置:
orsource"*/Kconfig.liteos_m.defconfig.board"
device/board/alientek/Kconfig.liteos_m.shields 配置:
//可以不用填內(nèi)容
審核編輯 :李倩
-
內(nèi)核
+關(guān)注
關(guān)注
3文章
1372瀏覽量
40303 -
SDK
+關(guān)注
關(guān)注
3文章
1037瀏覽量
45978 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3723瀏覽量
16343
原文標(biāo)題:OpenHarmony瘦設(shè)備內(nèi)核移植實(shí)戰(zhàn)
文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論