GHOST系统之家 - Windows系统光盘下载网站!
当前位置:GHOST系统之家>系统教程 > OpenHarmony瘦设备内核移植实战(三)

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

来源:Ghost系统之家浏览:时间:2023-05-24 21:19:10

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

51CTO开源基础软件社区

https://ost.51cto.com

一、背景

OpenHarmony系统移植最核心的步骤是内核的移植,内核的稳定是一切子系统稳定的基础,上一篇我们讲述了内核启动原理,以及vendor、board的开发配置,本文将介绍SoC层级的移植适配流程。

二、SoC适配

SoC配置芯片层级编译依赖库,包括CMSIS、HAL(硬件抽象层)等,这里包含操作总线、串口、时钟、寄存等库函数。

1、创建对应的文件目录结构

目录名称按照芯片厂家、芯片型号来创建,比如st公司下的stm32f4xx系列芯片。

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

配置文件内容如下:

device/soc/st/stm32f4xx/Kconfig.liteos_m.defconfig.seriesif SOC_SERIES_STM32F4xxrsource "Kconfig.liteos_m.defconfig.stm32f4xx"config SOC_SERIESstringdefault "stm32f4xx"endifdevice/soc/st/stm32f4xx/Kconfig.liteos_m.defconfig.stm32f4xxconfig SOCstringdefault "stm32f4xx"depends on SOC_STM32F4xxdevice/soc/st/stm32f4xx/Kconfig.liteos_m.seriesconfig SOC_SERIES_STM32F4xxbool "STMicroelectronics STM32F4xx series"select ARCH_ARMselect SOC_COMPANY_STMICROELECTRONICSselect CPU_CORTEX_M4helpEnable support for STMicroelectronics STM32F4xx seriesdevice/soc/st/stm32f4xx/Kconfig.liteos_m.socchoiceprompt "STMicroelectronics STM32F4xx series SoC"depends on SOC_SERIES_STM32F4xxconfig SOC_STM32F407bool "SoC STM32F407"Endchoicedevice/soc/st/Kconfig.liteos_m.defconfigrsource "*/Kconfig.liteos_m.defconfig.series"device/soc/st/Kconfig.liteos_m.defconfigrsource "*/Kconfig.liteos_m.series"device/soc/st/Kconfig.liteos_m.socconfig SOC_COMPANY_STMICROELECTRONICSboolif SOC_COMPANY_STMICROELECTRONICSconfig SOC_COMPANYdefault "st"rsource "*/Kconfig.liteos_m.soc"endif # SOC_COMPANY_STMICROELECTRONICSdevice/soc/st/BUILD.gnif (ohos_kernel_type == "liteos_m") {import("//kernel/liteos_m/liteos.gni")module_name = get_path_info(rebase_path("."), "name")module_group(module_name) {modules = [ "stm32f4xx" ]}}device/soc/st/stm32f4xx/BUILD.gnif (ohos_kernel_type == "liteos_m") {import("//kernel/liteos_m/liteos.gni")module_name = get_path_info(rebase_path("."), "name")module_group(module_name) {modules = [ "liteos_m", "sdk" ]}}

2、移植HAL库函数等文件

对于STM32F407我们可以使用官方的STM32CubeMX生成对应的标准的hal库函数文件。

(1)选择ACCESS TO MCU SELECTOR。

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

(2)勾选Arm Cortex-M4 --> STM32F4 -->STM32F407ZGTx。

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

(3)填写工程名称,选择工程保存路径,选择Makefile作为编译工具,点击GENERATE CODE生成工程代码。

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

(4)使用vscode打开目录,我们得到如下工程。

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

回顾一下之前讲过的系统启动的流程:

HAL初始化系统时钟初始化系统初始化系统启动

接下来我们将HAL库函数文件及芯片头文件迁移到OH代码中,文件路径如下:

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

将Drivers中的CMSIS、STM32F4xx_HAL_Driver复制到/device/soc/st/stm32f4xx/sdk/Drivers中。

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

3、修改系统编译配置文件

使用OH的gn以及config文件配置系统编译流程以及包依赖关系,涉及到的配置文件如下:

device/board/alientek/explorer/liteos_m/config.gni# Kernel type, e.g. "linux", "liteos_a", "liteos_m".kernel_type = "liteos_m"# Kernel version.kernel_version = "3.0.0"# Board CPU type, e.g. "cortex-a7", "riscv32".board_cpu = "cortex-m4"# Board arch, e.g. "armv7-a", "rv32imac".board_arch = ""# Toolchain name used for system compiling.# E.g. gcc-arm-none-eabi, arm-linux-harmonyeabi-gcc, ohos-clang, riscv32-unknown-elf.# Note: The default toolchain is "ohos-clang". It's not mandatory if you use the default toolchain.board_toolchain = "arm-none-eabi-gcc"use_board_toolchain = true# The toolchain path installed, it's not mandatory if you have added toolchain path to your ~/.bashrc.board_toolchain_path = ""# Compiler prefix.board_toolchain_prefix = "arm-none-eabi-"# Compiler type, "gcc" or "clang".board_toolchain_type = "gcc"#Debug compiler optimization level optionsboard_opt_flags = ["-mcpu=cortex-m4","-mthumb","-mfpu=fpv4-sp-d16","-mfloat-abi=hard",]# Board related common compile flags.board_cflags = ["-Og","-Wall","-f-ffunction-sections","-DSTM32F407xx","-DHAL_UART_MODULE_ENABLED"]board_cflags += board_opt_flagsboard_asmflags = ["-Og","-Wall","-f-ffunction-sections",]board_asmflags += board_opt_flagsboard_cxx_flags = board_cflagsboard_ld_flags = ["-T${ohos_root_path}device/board/alientek/explorer/liteos_m/STM32F407ZGTx_FLASH.ld"]board_ld_flags += board_opt_flags# Board related headfiles search path.board_include_dirs = [ "//utils/native/lite/include" ]# Board adapter dir for OHOS components.board_adapter_dir = ""这里的核心工作就是将原有的Makefile编译文件翻译成OH的config.gni,可以看到有很多的编译参数以及宏变量定义。修改编译依赖文件BUILD.gndevice/board/alientek/explorer/liteos_m/BUILD.gnimport("//kernel/liteos_m/liteos.gni")module_name = get_path_info(rebase_path("."), "name")kernel_module(module_name) {sources = ["startup_stm32f407xx.s","Src/main.c","Src/delay.c","Src/led.c","Src/sys.c","Src/usart.c","Src/stm32f4xx_hal_msp.c","Src/stm32f4xx_it.c","Src/system_stm32f4xx.c",]include_dirs = [ "Inc",]}# "-Wl,-T" + rebase_path("STM32F407ZGTx_FLASH.ld"),config("public") {ldflags = ["-Wl,-u_printf_float"]libs = ["c","m","nosys",]}device/soc/st/stm32f4xx/sdk/BUILD.gnimport("//kernel/liteos_m/liteos.gni")module_name = "stm32f4xx_sdk"kernel_module(module_name) {asmflags = board_asmflagssources = ["Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c","Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c","Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c","Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c","Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c","Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c","Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c","Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c","Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c",]include_dirs = ["//device/board/alientek/explorer/liteos_m/Inc"]}#指定全局头文件搜索路径config("public") {include_dirs = ["Drivers/STM32F4xx_HAL_Driver/Inc","Drivers/CMSIS/Device/ST/STM32F4xx/Include",]}

4、改造main函数,拉起系统内核

我们对device/board/alientek/explorer/liteos_m/Src/main.c文件进行如下编辑。

int main(void){HAL_Init(); sys_stm32_clock_init(336, 8, 2, 7); delay_init(168);printf("hal、系统始终初始化完毕,开始启动系统...\n");RunTask();}void RunTask(){unsigned int ret;ret = LOS_KernelInit();// 初始化LiteOS系统if (ret != LOS_OK){printf("Liteos kernel init failed! ERROR: 0x%x\n", ret);}else{LOS_Start(); // 启动系统}...}

三、编译与烧录

使用hb工具进行编译,hb set选择编译目标,hb build -f执行编译。

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

日志输出explorer build success表示编译成功。

编译过程中可能会遇到缺少某些结构体或者函数的定义,需要细心排查,注意宏定义是否打开。

STM32F407开发板支持串口和ST-LINK烧录方式,但OH编译出来的是bin文件,bin无法直接通过串口烧录。需要用到ST-LINK工具进行烧录,烧录时需要指定flash,开始地址:0x08000000,大小:0x100000。

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

开始烧录

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

点亮开发板

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

四、总结

本文主要讲述了OpenHarmony内核的SoC代码移植。因为STM32F407的架构和基础SDK都是官方开源的,所以移植工作也较为容易,但在实际工作中如果遇到未开源的芯片,那么需要模组或芯片厂商提供技术支持才可完成移植工作。到这里瘦设备OH适配的最核心工作已完成,希望能对热爱OpenHarmony的小伙伴有所帮助。

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

51CTO开源基础软件社区

https://ost.51cto.com

推荐系统

  • 电脑公司Ghost Win8.1 x32 精选纯净版2022年7月(免激活) ISO镜像高速下载

    电脑公司Ghost Win8.1 x32 精选纯净版2022年7月(免激活) ISO镜像高速下载

    语言:中文版系统大小:2.98GB系统类型:Win8

    电脑公司Ghost Win8.1x32位纯净版V2022年7月版本集成了自2022流行的各种硬件驱动,首次进入系统即全部硬件已安装完毕。电脑公司Ghost Win8.1x32位纯净版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,精心挑选的系统维护工具,加上绿茶独有

  • 微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载

    微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载

    语言:中文版系统大小:5.13GB系统类型:Win11

    微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Win11 64位 Office办公版(免费)优化  1、保留 Edge浏览器。  2、隐藏“操作中心”托盘图标。  3、保留常用组件(微软商店,计算器,图片查看器等)。  5、关闭天气资讯。 

  • Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载

    Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载

    语言:中文版系统大小:4.75GB系统类型:Win11

    Ghost Win11 21H2是微软在系统方面技术积累雄厚深耕多年,Ghost Win11 21H2系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Ghost Win11 21H2是微软最新发布的KB5019961补丁升级而来的最新版的21H2系统,以Windows 11 21H2 22000 1219 专业版为基础进行优化,保持原汁原味,系统流畅稳定,保留常用组件

  • windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载

    windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载

    语言:中文版系统大小:5.31GB系统类型:Win11

    windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载,微软win11发布快大半年了,其中做了很多次补丁和修复一些BUG,比之前的版本有一些功能上的调整,目前已经升级到最新版本的镜像系统,并且优化了自动激活,永久使用。windows11中文版镜像国内镜像下载地址微软windows11正式版镜像 介绍:1、对函数算法进行了一定程度的简化和优化

  • 微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载

    微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载

    语言:中文版系统大小:5.31GB系统类型:Win11

    微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载,微软2022年正式推出了win11系统,很多人迫不及待的要体验,本站提供了最新版的微软Windows11正式版系统下载,微软windows11正式版镜像 是一款功能超级强大的装机系统,是微软方面全新推出的装机系统,这款系统可以通过pe直接的完成安装,对此系统感兴趣,想要使用的用户们就快来下载

  • 微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件

    微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件

    语言:中文版系统大小:0MB系统类型:Win11

    微软Ghost win11 正式版镜像文件是一款由微软方面推出的优秀全新装机系统,这款系统的新功能非常多,用户们能够在这里体验到最富有人性化的设计等,且全新的柔软界面,看起来非常的舒服~微软Ghost win11 正式版镜像文件介绍:1、与各种硬件设备兼容。 更好地完成用户安装并有效地使用。2、稳定使用蓝屏,系统不再兼容,更能享受无缝的系统服务。3、为

  • 雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载

    雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载

    语言:中文版系统大小:4.75GB系统类型:

    雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的雨林木风品牌,其系统口碑得到许多人认可,积累了广大的用户群体,雨林木风是一款稳定流畅的系统,一直以来都以用户为中心,是由雨林木风团队推出的Windows11国内镜像版,基于国内用户的习惯,做了系统性能的优化,采用了新的系统

  • 雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO

    雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO

    语言:中文版系统大小:5.91GB系统类型:Win7

    雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO在系统方面技术积累雄厚深耕多年,加固了系统安全策略,雨林木风win7旗舰版系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。win7 32位旗舰装机版 v2019 05能够帮助用户们进行系统的一键安装、快速装机等,系统中的内容全面,能够为广大用户