OpenHarmony 系統(tǒng)移植最核心的步驟是內核的移植,內核的穩(wěn)定是一切子系統(tǒng)穩(wěn)定的基礎,本文將介紹內核移植實操部分。
內核啟動流程梳理
確保移植前開發(fā)板的官方 SDK 是可以跑起來的,原有 SDK 通常為 FreeRTOS 或者其他系統(tǒng),固件的編譯有對應編譯流程,以及系統(tǒng)啟動流程。
我們要做的工作就是梳理原有系統(tǒng)啟動流程,包括:如何將固件代碼拷貝到內存,棧針從哪里開始引導系統(tǒng)啟動,系統(tǒng)啟動前需要做哪些軟硬件的初始工作,然后讓 OH 通過這套流程跑起來。
系統(tǒng)啟動流程及原理圖:
①BootLoader 將系統(tǒng)程序從 Flash 加載到運行內存中。
②通過匯編指令完成系統(tǒng)啟動前的軟硬件初始化準備工作。
③初始化系統(tǒng)并啟動系統(tǒng)。
④系統(tǒng)啟動完成。
⑤完成系統(tǒng)框架層的啟動,使各個子系統(tǒng)處于可用狀態(tài)。
配置 vendor
配置 vendor,創(chuàng)建如下目錄結構:
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":[]
}
]
},
//這里可以繼續(xù)添加XTS子系統(tǒng)、DFX子系統(tǒng),以及其他特性子系統(tǒng)
],
"third_party_dir":"",
"product_adapter_dir":""
}
配置完成后保存,我們可以使用 hb set 命令嘗試編譯。![b11cd86c-ed42-11ed-90ce-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9A/E6/wKgaomTnmZyAOxk9AAAe5guytDo906.png)
直接使用 hb build -f 編譯后看看結果,得到錯誤提示:需要創(chuàng)建 device 相關的文件。
配置 device/board
board 配置板卡編譯相關的工具鏈,以及最為核心的啟動匯編命令、鏈接庫腳本,它將指定 main 函數(shù)來啟動系統(tǒng)。根據(jù)配置規(guī)范,我們在 device 下創(chuàng)建對應的文件夾,開發(fā)板是正點原子(alientek)的探索者(explorer),因此我們根據(jù) OH 規(guī)范創(chuàng)建目錄結構,如下:
![b143f50a-ed42-11ed-90ce-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9A/E6/wKgaomTnmZyALQTNAAAIqmokzuk170.png)
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)建開發(fā)板配置文件,最終得到如下目錄結構。
![b156360c-ed42-11ed-90ce-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9A/E6/wKgaomTnmZyAS09ZAAARpqXkLi4706.png)
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文章
1384瀏覽量
40445 -
SDK
+關注
關注
3文章
1047瀏覽量
46326 -
OpenHarmony
+關注
關注
25文章
3753瀏覽量
16676
原文標題:OpenHarmony瘦設備內核移植實戰(zhàn)
文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區(qū)】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
OpenHarmony瘦設備內核移植實戰(zhàn)(一)
OpenHarmony瘦設備內核移植實戰(zhàn)(二)
ARM開發(fā)板上uClinux內核移植
Linux內核移植相關代碼解析
騰訊物聯(lián)網(wǎng)系統(tǒng)TOS內核移植起來比你想象的要簡單
如何實現(xiàn)Linux內核移植和yaffs2根文件系統(tǒng)制作
OpenHarmony瘦設備內核移植實戰(zhàn)(一)
![<b class='flag-5'>OpenHarmony</b><b class='flag-5'>瘦</b><b class='flag-5'>設備</b><b class='flag-5'>內核移植</b><b class='flag-5'>實戰(zhàn)</b>(一)](https://file1.elecfans.com/web2/M00/89/F6/wKgZomSNUcSARB9vAAAqhTehEo0558.png)
評論