OpenHarmony瘦设备内核移植实战(一) 原创
一、背景
在各行各业存在很多不同的智能设备,每个设备都使用芯片去实现不同的业务场景需求。本文将以常用的STM32F407ZG芯片为例,介绍OpenHarmony瘦设备内核移植方法,希望能对热爱OpenHarmony的开发小伙伴有所帮助。
二、认识芯片架构、Soc、开发板
进行内核移植前我们首先要了解芯片架构、SoC、开发板之前的关系,这将有助于后续移植工作。
芯片架构是指芯片的内部器件构造以及对应的指令集,比如PC使用的英特尔i7或者AMD的R7-4800都是x86架构,手机使用的骁龙8Gen2芯片使用的则是ARM架构。
SoC是指具体的芯片架构实现,芯片厂商针对不同的应用场景开发出的芯片各不相同,但要符合架构定义,比如STM32F470就会有不同的定制版本,有些Flash会大一些,有些则是芯片封装或者引脚数不同。
开发板则是板卡厂商针对不同的产品定制的不同开发板,会根据业务需求设计不同的PCB、外设器件。
本文采用正点原子的STM32F407ZG开发板,对应的开发板、SoC、芯片架构分别是:
开发板型号:explorer(探索者)
板卡厂商:alientek(正点原子)
芯片型号:STM32F407ZGT6
芯片系列:STM32F407
芯片厂商:ST(意法半导体)
具体架构:Cortex-M4
芯片架构:ARM
三、内核移植的四个层面
OH适配分为如下四个层面
Vendor
负责配置的目标产品的内核类型、系统版本、子系统、三方库等。编译时,工具链依赖这里的配置。
Vendor的代码位于://vendor/
Board
开发板层面的移植,芯片已适配OH,只是开发板不同,难度不大。
配置板卡编译相关的工具链,以及最为核心的启动汇编命令、链接库脚本,将指定这里的main函数来启动系统。
Board相关的代码位于://device/board
SoC
SoC片上系统层面的移植,芯片架构已支持,有一定难度
配置芯片层级编译依赖库,包括CMSIS、HAL(硬件抽象层)等,这里包含操作总线、串口、时钟、寄存等库函数
SoC相关的代码位于://device/soc
ARCH
目标芯片架构不在支持的范围内的全新架构移植,难度较大
ARCH相关的代码存放在//kernel/liteos_m/arch文件夹中
整体难易度
Vendor < Board < SoC < ARCH
四、OpenHarmony瘦设备已支持的芯片架构
内核类型 | 芯片架构 | 架构名称 |
---|---|---|
LiteOS_M | ARM | arm9、cortex-m3、cortex-m4、cortex-m7、cortex-m33、cortex-m55 |
LiteOS_M | csky | v2 |
LiteOS_M | risc-v | nuclei、riscv32 |
LiteOS_M | xtensa | lx6 |
源码路径为:
kernel/liteos_m/arch/arm
五、总结
OpenHarmony瘦设备的移植需要从芯片架构、SoC、开发板开始,因此本文首先讲述了三者之前的关系。瘦设备使用的内核为LiteOS-M,针对不同层面的移植工作的难易度、工作量也会有所不同,根据以往经验难易度排序为Vendor < Board < SoC < ARCH,下篇文章将继续介绍移植前的准备工作。