8

OpenHarmony瘦设备内核移植实战(二)

 1 year ago
source link: https://www.51cto.com/article/753751.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
b2a9f346461b6cf9aa8139a6ffb6c2b9876c20.png

想了解更多关于开源的内容,请访问:

51CTO 开源基础软件社区

https://ost.51cto.com

OpenHarmony系统移植最核心的步骤是内核的移植,内核的稳定是一切子系统稳定的基础,上一篇我们一起认识了板卡、SoC、芯片架构,并在OpenHarmony源码中找到了对应层面的开发路径,本文将开始介绍实操部分。

二、内核启动流程梳理

确保移植前开发板的官方SDK是可以跑起来的,原有SDK通常为FreeRTOS或者其他系统,固件的编译有对应编译流程,以及系统启动流程。我们要做的工作就是梳理原有系统启动流程,包括:如何将固件代码拷贝到内存,栈针从哪里开始引导系统启动,系统启动前需要做哪些软硬件的初始工作,然后让OH通过这套流程跑起来。

系统启动流程及原理图:

OpenHarmony瘦设备内核移植实战(二)-开源基础软件社区

MCU启动工作原理图

OpenHarmony瘦设备内核移植实战(二)-开源基础软件社区

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

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

3.初始化系统并启动系统。

4.系统启动完成。

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

三、配置vendor

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

OpenHarmony瘦设备内核移植实战(二)-开源基础软件社区

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命令尝试编译。

OpenHarmony瘦设备内核移植实战(二)-开源基础软件社区

可以看到在选项中会出现 alientek -> explorer 构建选项。直接使用hb build -f编译后看看结果,得到错误提示:需要创建device相关的文件。

OpenHarmony瘦设备内核移植实战(二)-开源基础软件社区

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

四、配置device/board

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

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

OpenHarmony瘦设备内核移植实战(二)-开源基础软件社区

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代码与之前一样。

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

OpenHarmony瘦设备内核移植实战(二)-开源基础软件社区

配置文件代码如下:

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配置:

config BOARD_EXPLORER_STM32F407
bool "select board explorer stm32f407"
depends on SOC_STM32F407

device/board/alientek/explorer/Kconfig.liteos_m.defconfig.board配置:

if BOARD_EXPLORER_STM32F407
config BOARD
string
default "explorer_stm32f407"
endif #BOARD_EXPLORER_STM32F407

device/board/alientek/Kconfig.liteos_m.boards配置:

if SOC_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配置:

// 可以不用填内容

想了解更多关于开源的内容,请访问:

51CTO 开源基础软件社区

https://ost.51cto.com


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK