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

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

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

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

责任编辑:jianghua 来源: 51CTO 开源基础软件社区
相关推荐

2023-05-16 14:49:25

鸿蒙内核移植

2020-09-17 17:41:24

Liteos-a鸿蒙Linux

2020-11-13 09:45:36

Liteos-a

2023-02-06 16:21:48

2023-03-06 16:11:00

设备移植开源GPU驱动

2023-02-08 15:46:50

设备移植第三方内核适配

2023-03-10 09:47:45

OpenGL渲染设备移植

2023-02-28 15:40:16

鸿蒙CPU渲染

2023-03-23 16:02:07

树莓派4GPU调试

2023-04-06 09:10:13

设备移植鸿蒙

2023-02-14 17:06:31

设备移植打包刷机

2023-02-07 15:52:50

2013-03-13 10:51:44

瘦客户端VDI

2023-02-01 16:28:30

Linux内核鸿蒙

2022-09-07 15:08:58

操作系统鸿蒙

2022-04-15 14:31:02

鸿蒙操作系统

2023-04-10 09:44:22

内核鼠标调试鸿蒙

2021-09-08 15:23:51

鸿蒙HarmonyOS应用

2023-02-01 16:38:53

2022-06-21 11:30:22

littleVGL鸿蒙
点赞
收藏

51CTO技术栈公众号