网站首页

人工智能P2P分享搜索全网发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

OpenHarmony瘦设备内核移植实战

时间:2023-05-08 10:50

人气:

作者:admin

标签: SDK  内核  OpenHarmony 

导读:我们要做的工作就是梳理原有系统启动流程,包括:如何将固件代码拷贝到内存,栈针从哪里开始引导系统启动,系统启动前需要做哪些软硬件的初始工作,然后让 OH 通过这套流程跑起...

OpenHarmony 系统移植最核心的步骤是内核的移植,内核的稳定是一切子系统稳定的基础,本文将介绍内核移植实操部分。

内核启动流程梳理

确保移植前开发板的官方 SDK 是可以跑起来的,原有 SDK 通常为 FreeRTOS 或者其他系统,固件的编译有对应编译流程,以及系统启动流程。

我们要做的工作就是梳理原有系统启动流程,包括:如何将固件代码拷贝到内存,栈针从哪里开始引导系统启动,系统启动前需要做哪些软硬件的初始工作,然后让 OH 通过这套流程跑起来。

系统启动流程及原理图:

b0dba7a2-ed42-11ed-90ce-dac502259ad0.png

MCU 启动工作原理图:

b0f627da-ed42-11ed-90ce-dac502259ad0.png

①BootLoader 将系统程序从 Flash 加载到运行内存中。

②通过汇编指令完成系统启动前的软硬件初始化准备工作。

③初始化系统并启动系统。

④系统启动完成。

⑤完成系统框架层的启动,使各个子系统处于可用状态。

配置 vendor

配置 vendor,创建如下目录结构:

b10a6dee-ed42-11ed-90ce-dac502259ad0.png

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 命令尝试编译。b11cd86c-ed42-11ed-90ce-dac502259ad0.png可以看到在选项中会出现 alientek -> explorer 构建选项。

直接使用 hb build -f 编译后看看结果,得到错误提示:需要创建 device 相关的文件。

b12feb14-ed42-11ed-90ce-dac502259ad0.png

根据报错提示,可得知应该是缺少 device 相关配置,接下来继续创建 device 相关配置文件。

配置 device/board

board 配置板卡编译相关的工具链,以及最为核心的启动汇编命令、链接库脚本,它将指定 main 函数来启动系统。

根据配置规范,我们在 device 下创建对应的文件夹,开发板是正点原子(alientek)的探索者(explorer),因此我们根据 OH 规范创建目录结构,如下:

b143f50a-ed42-11ed-90ce-dac502259ad0.png

BUILD.gn 代码如下:

if(ohos_kernel_type=="liteos_m"){
import("//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 代码与之前一样。

创建开发板配置文件,最终得到如下目录结构。

b156360c-ed42-11ed-90ce-dac502259ad0.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 配置:

//可以不用填内容


审核编辑 :李倩


温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信