成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

OpenHarmony瘦設(shè)備內(nèi)核移植實戰(zhàn)(三)

系統(tǒng) OpenHarmony
本文主要講述OpenHarmony內(nèi)核的SoC代碼移植。因為STM32F407的架構(gòu)和基礎(chǔ)SDK都是官方開源的,所以移植工作也較為容易,但在實際工作中如果遇到未開源的芯片,那么需要模組或芯片廠商提供技術(shù)支持才可完成移植工作。

想了解更多關(guān)于開源的內(nèi)容,請訪問:

51CTO 開源基礎(chǔ)軟件社區(qū)

https://ost.51cto.com

一、背景

OpenHarmony系統(tǒng)移植最核心的步驟是內(nèi)核的移植,內(nèi)核的穩(wěn)定是一切子系統(tǒng)穩(wěn)定的基礎(chǔ),上一篇我們講述了內(nèi)核啟動原理,以及vendor、board的開發(fā)配置,本文將介紹SoC層級的移植適配流程。

二、SoC適配

SoC配置芯片層級編譯依賴庫,包括CMSIS、HAL(硬件抽象層)等,這里包含操作總線、串口、時鐘、寄存等庫函數(shù)。

1、創(chuàng)建對應(yīng)的文件目錄結(jié)構(gòu)

目錄名稱按照芯片廠家、芯片型號來創(chuàng)建,比如st公司下的stm32f4xx系列芯片。

OpenHarmony瘦設(shè)備內(nèi)核移植實戰(zhàn)(三)-開源基礎(chǔ)軟件社區(qū)

配置文件內(nèi)容如下:

device/soc/st/stm32f4xx/Kconfig.liteos_m.defconfig.series
if SOC_SERIES_STM32F4xx
rsource "Kconfig.liteos_m.defconfig.stm32f4xx"
config SOC_SERIES
string
default "stm32f4xx"
endif
device/soc/st/stm32f4xx/Kconfig.liteos_m.defconfig.stm32f4xx
config SOC
string
default "stm32f4xx"
depends on SOC_STM32F4xx
device/soc/st/stm32f4xx/Kconfig.liteos_m.series
config SOC_SERIES_STM32F4xx
bool "STMicroelectronics STM32F4xx series"
select ARCH_ARM
select SOC_COMPANY_STMICROELECTRONICS
select CPU_CORTEX_M4
help
Enable support for STMicroelectronics STM32F4xx series
device/soc/st/stm32f4xx/Kconfig.liteos_m.soc
choice
prompt "STMicroelectronics STM32F4xx series SoC"
depends on SOC_SERIES_STM32F4xx
config SOC_STM32F407
bool "SoC STM32F407"
Endchoice
device/soc/st/Kconfig.liteos_m.defconfig
rsource "*/Kconfig.liteos_m.defconfig.series"
device/soc/st/Kconfig.liteos_m.defconfig
rsource "*/Kconfig.liteos_m.series"
device/soc/st/Kconfig.liteos_m.soc
config SOC_COMPANY_STMICROELECTRONICS
bool
if SOC_COMPANY_STMICROELECTRONICS
config SOC_COMPANY
default "st"
rsource "*/Kconfig.liteos_m.soc"
endif # SOC_COMPANY_STMICROELECTRONICS
device/soc/st/BUILD.gn
if (ohos_kernel_type == "liteos_m") {
import("http://kernel/liteos_m/liteos.gni")
module_name = get_path_info(rebase_path("."), "name")
module_group(module_name) {
modules = [ "stm32f4xx" ]
}
}
device/soc/st/stm32f4xx/BUILD.gn
if (ohos_kernel_type == "liteos_m") {
import("http://kernel/liteos_m/liteos.gni")
module_name = get_path_info(rebase_path("."), "name")
module_group(module_name) {
modules = [ "liteos_m", "sdk" ]
}
}

2、移植HAL庫函數(shù)等文件

對于STM32F407我們可以使用官方的STM32CubeMX生成對應(yīng)的標準的hal庫函數(shù)文件。

(1)選擇ACCESS TO MCU SELECTOR。

OpenHarmony瘦設(shè)備內(nèi)核移植實戰(zhàn)(三)-開源基礎(chǔ)軟件社區(qū)

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

OpenHarmony瘦設(shè)備內(nèi)核移植實戰(zhàn)(三)-開源基礎(chǔ)軟件社區(qū)

(3)填寫工程名稱,選擇工程保存路徑,選擇Makefile作為編譯工具,點擊GENERATE CODE生成工程代碼。

OpenHarmony瘦設(shè)備內(nèi)核移植實戰(zhàn)(三)-開源基礎(chǔ)軟件社區(qū)

(4)使用vscode打開目錄,我們得到如下工程。

OpenHarmony瘦設(shè)備內(nèi)核移植實戰(zhàn)(三)-開源基礎(chǔ)軟件社區(qū)

回顧一下之前講過的系統(tǒng)啟動的流程:

  • HAL初始化
  • 系統(tǒng)時鐘初始化
  • 系統(tǒng)初始化
  • 系統(tǒng)啟動

接下來我們將HAL庫函數(shù)文件及芯片頭文件遷移到OH代碼中,文件路徑如下:

OpenHarmony瘦設(shè)備內(nèi)核移植實戰(zhàn)(三)-開源基礎(chǔ)軟件社區(qū)

將Drivers中的CMSIS、STM32F4xx_HAL_Driver復(fù)制到/device/soc/st/stm32f4xx/sdk/Drivers中。

OpenHarmony瘦設(shè)備內(nèi)核移植實戰(zhàn)(三)-開源基礎(chǔ)軟件社區(qū)

3、修改系統(tǒng)編譯配置文件

使用OH的gn以及config文件配置系統(tǒng)編譯流程以及包依賴關(guān)系,涉及到的配置文件如下:

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","-fdata-sections","-ffunction-sections","-DSTM32F407xx","-DHAL_UART_MODULE_ENABLED"]board_cflags += board_opt_flagsboard_asmflags = ["-Og","-Wall","-fdata-sections","-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 = [ "http://utils/native/lite/include" ]# Board adapter dir for OHOS components.board_adapter_dir = ""這里的核心工作就是將原有的Makefile編譯文件翻譯成OH的config.gni,可以看到有很多的編譯參數(shù)以及宏變量定義。修改編譯依賴文件BUILD.gndevice/board/alientek/explorer/liteos_m/BUILD.gnimport("http://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("http://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 = ["http://device/board/alientek/explorer/liteos_m/Inc"]}#指定全局頭文件搜索路徑config("public") {include_dirs = ["Drivers/STM32F4xx_HAL_Driver/Inc","Drivers/CMSIS/Device/ST/STM32F4xx/Include",]}

4、改造main函數(shù),拉起系統(tǒng)內(nèi)核

我們對device/board/alientek/explorer/liteos_m/Src/main.c文件進行如下編輯。

int main(void)
{
HAL_Init();                         /* 初始化HAL庫 */
sys_stm32_clock_init(336, 8, 2, 7); /* 初始化時鐘頻率168Mhz */
delay_init(168);                    /* 延時初始化 */
printf("hal、系統(tǒng)始終初始化完畢,開始啟動系統(tǒng)...\n");
RunTask();
}
void RunTask()
{
unsigned int ret;
ret = LOS_KernelInit();  // 初始化LiteOS系統(tǒng)
if (ret != LOS_OK)
{
printf("Liteos kernel init failed! ERROR: 0x%x\n", ret);
}
else
{
LOS_Start(); // 啟動系統(tǒng)
}
...
}

三、編譯與燒錄

使用hb工具進行編譯,hb set選擇編譯目標,hb build -f執(zhí)行編譯。

OpenHarmony瘦設(shè)備內(nèi)核移植實戰(zhàn)(三)-開源基礎(chǔ)軟件社區(qū)

日志輸出explorer build success表示編譯成功。

編譯過程中可能會遇到缺少某些結(jié)構(gòu)體或者函數(shù)的定義,需要細心排查,注意宏定義是否打開。

STM32F407開發(fā)板支持串口和ST-LINK燒錄方式,但OH編譯出來的是bin文件,bin無法直接通過串口燒錄。需要用到ST-LINK工具進行燒錄,燒錄時需要指定flash,開始地址:0x08000000,大小:0x100000。

OpenHarmony瘦設(shè)備內(nèi)核移植實戰(zhàn)(三)-開源基礎(chǔ)軟件社區(qū)

開始燒錄

OpenHarmony瘦設(shè)備內(nèi)核移植實戰(zhàn)(三)-開源基礎(chǔ)軟件社區(qū)

點亮開發(fā)板

OpenHarmony瘦設(shè)備內(nèi)核移植實戰(zhàn)(三)-開源基礎(chǔ)軟件社區(qū)

四、總結(jié)

本文主要講述了OpenHarmony內(nèi)核的SoC代碼移植。因為STM32F407的架構(gòu)和基礎(chǔ)SDK都是官方開源的,所以移植工作也較為容易,但在實際工作中如果遇到未開源的芯片,那么需要模組或芯片廠商提供技術(shù)支持才可完成移植工作。到這里瘦設(shè)備OH適配的最核心工作已完成,希望能對熱愛OpenHarmony的小伙伴有所幫助。

想了解更多關(guān)于開源的內(nèi)容,請訪問:

51CTO 開源基礎(chǔ)軟件社區(qū)

https://ost.51cto.com

責任編輯:jianghua 來源: 51CTO 開源基礎(chǔ)軟件社區(qū)
相關(guān)推薦

2023-05-05 16:05:26

設(shè)備內(nèi)核移植鴻蒙

2020-09-17 17:41:24

Liteos-a鴻蒙Linux

2020-11-13 09:45:36

Liteos-a

2023-02-08 15:46:50

設(shè)備移植第三方內(nèi)核適配

2023-02-06 16:21:48

2023-02-07 15:52:50

2023-03-10 09:47:45

OpenGL渲染設(shè)備移植

2023-03-06 16:11:00

設(shè)備移植開源GPU驅(qū)動

2023-04-06 09:10:13

設(shè)備移植鴻蒙

2023-03-23 16:02:07

樹莓派4GPU調(diào)試

2023-02-28 15:40:16

鴻蒙CPU渲染

2023-02-14 17:06:31

設(shè)備移植打包刷機

2023-04-10 09:44:22

內(nèi)核鼠標調(diào)試鴻蒙

2022-10-11 15:04:28

NAPI開發(fā)鴻蒙

2022-09-13 16:10:15

鴻蒙操作系統(tǒng)

2013-03-13 10:51:44

瘦客戶端VDI

2023-02-01 16:28:30

Linux內(nèi)核鴻蒙

2022-04-15 14:31:02

鴻蒙操作系統(tǒng)

2024-07-26 16:39:33

鴻蒙系統(tǒng)開源構(gòu)建系統(tǒng)

2022-10-24 14:54:29

LWIP協(xié)議鴻蒙
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 精品久久久久久亚洲国产800 | 在线毛片网 | 91社区在线观看高清 | 国产区视频在线观看 | 国产美女精品 | 国产一区二区精品在线观看 | 成人高清视频在线观看 | 五月婷婷导航 | аⅴ资源新版在线天堂 | 91高清在线观看 | 成人国产免费视频 | 国产1区2区3区 | 亚洲www啪成人一区二区麻豆 | 美人の美乳で授乳プレイ | 欧美日韩亚洲一区 | 久久免费精品 | 国产精品99精品久久免费 | 成人国产在线视频 | 一区二区福利视频 | 免费成人高清在线视频 | 国产欧美一区二区三区在线看 | 精品欧美乱码久久久久久1区2区 | 欧美亚洲视频 | 久久国产视频网站 | 欧美精品一区在线发布 | 99精品视频在线 | 亚洲精品一区二区在线观看 | 久热精品在线观看视频 | 亚洲欧美视频 | 999久久精品| 日韩在线观看中文字幕 | 午夜精品一区二区三区在线观看 | 久热伊人| 密室大逃脱第六季大神版在线观看 | 涩涩视频在线看 | 一级做a爰片久久毛片免费看 | 日干夜操 | 国产午夜精品一区二区三区四区 | 久久久久久一区 | 日本在线观看网址 | 97天天干 |