OpenHarmony 系統移植最核心的步驟是內核的移植,內核的穩定是一切子系統穩定的基礎,本文將介紹內核移植實操部分。
內核啟動流程梳理
確保移植前開發板的官方 SDK 是可以跑起來的,原有 SDK 通常為 FreeRTOS 或者其他系統,固件的編譯有對應編譯流程,以及系統啟動流程。
我們要做的工作就是梳理原有系統啟動流程,包括:如何將固件代碼拷貝到內存,棧針從哪里開始引導系統啟動,系統啟動前需要做哪些軟硬件的初始工作,然后讓 OH 通過這套流程跑起來。
系統啟動流程及原理圖:MCU 啟動工作原理圖:
①BootLoader 將系統程序從 Flash 加載到運行內存中。
②通過匯編指令完成系統啟動前的軟硬件初始化準備工作。
③初始化系統并啟動系統。
④系統啟動完成。
⑤完成系統框架層的啟動,使各個子系統處于可用狀態。
配置 vendor
配置 vendor,創建如下目錄結構:
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內核
"subsystem":"kernel",
"components":[
{
"component":"liteos_m",
"features":[]
}
]
},
//這里可以繼續添加XTS子系統、DFX子系統,以及其他特性子系統
],
"third_party_dir":"",
"product_adapter_dir":""
}
配置完成后保存,我們可以使用 hb set 命令嘗試編譯。可以看到在選項中會出現 alientek -> explorer 構建選項。直接使用 hb build -f 編譯后看看結果,得到錯誤提示:需要創建 device 相關的文件。
根據報錯提示,可得知應該是缺少 device 相關配置,接下來繼續創建 device 相關配置文件。
配置 device/board
board 配置板卡編譯相關的工具鏈,以及最為核心的啟動匯編命令、鏈接庫腳本,它將指定 main 函數來啟動系統。根據配置規范,我們在 device 下創建對應的文件夾,開發板是正點原子(alientek)的探索者(explorer),因此我們根據 OH 規范創建目錄結構,如下:
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/ 目錄下創建 BUILD.gn 文件,以及 liteos_m 目錄。BUILD.gn 代碼與之前一樣。創建開發板配置文件,最終得到如下目錄結構。
配置文件代碼如下: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 配置:
//可以不用填內容
審核編輯 :李倩
-
內核
+關注
關注
3文章
1381瀏覽量
40364 -
SDK
+關注
關注
3文章
1045瀏覽量
46131 -
OpenHarmony
+關注
關注
25文章
3744瀏覽量
16473
原文標題:OpenHarmony瘦設備內核移植實戰
文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論