色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙瘦設備移植:SoC適配

OpenHarmony技術社區 ? 來源: OST開源開發者 ? 2023-05-22 10:49 ? 次閱讀

OpenHarmony 系統移植最核心的步驟是內核的移植,內核的穩定是一切子系統穩定的基礎,上一篇我們講述了內核啟動原理,以及 vendor、board 的開發配置,本文將介紹 SoC 層級的移植適配流程。

SoC 適配

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

①創建對應的文件目錄結構

目錄名稱按照芯片廠家、芯片型號來創建,比如 st 公司下的 stm32f4xx 系列芯片。
b74ccf9e-f7fb-11ed-90ce-dac502259ad0.png

配置文件內容如下:

device/soc/st/stm32f4xx/Kconfig.liteos_m.defconfig.series
ifSOC_SERIES_STM32F4xx
rsource"Kconfig.liteos_m.defconfig.stm32f4xx"
configSOC_SERIES
string
default"stm32f4xx"
endif
device/soc/st/stm32f4xx/Kconfig.liteos_m.defconfig.stm32f4xx
configSOC
string
default"stm32f4xx"
dependsonSOC_STM32F4xx
device/soc/st/stm32f4xx/Kconfig.liteos_m.series
configSOC_SERIES_STM32F4xx
bool"STMicroelectronicsSTM32F4xxseries"
selectARCH_ARM
selectSOC_COMPANY_STMICROELECTRONICS
selectCPU_CORTEX_M4
help
EnablesupportforSTMicroelectronicsSTM32F4xxseries
device/soc/st/stm32f4xx/Kconfig.liteos_m.soc
choice
prompt"STMicroelectronicsSTM32F4xxseriesSoC"
dependsonSOC_SERIES_STM32F4xx
configSOC_STM32F407
bool"SoCSTM32F407"
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
configSOC_COMPANY_STMICROELECTRONICS
bool
ifSOC_COMPANY_STMICROELECTRONICS
configSOC_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"]
}
}

②移植 HAL 庫函數等文件

對于 STM32F407 我們可以使用官方的 STM32CubeMX 生成對應的標準的 hal 庫函數文件。

選擇 ACCESS TO MCU SELECTOR:

b767b656-f7fb-11ed-90ce-dac502259ad0.png

勾選 Arm Cortex-M4→STM32F4→STM32F407ZGTx:

b7796a04-f7fb-11ed-90ce-dac502259ad0.png

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

b7d566b0-f7fb-11ed-90ce-dac502259ad0.png

使用 vscode 打開目錄,我們得到如下工程:

b7faf3e4-f7fb-11ed-90ce-dac502259ad0.png

回顧一下之前講過的系統啟動的流程:

HAL 初始化

系統時鐘初始化

系統初始化

系統啟動

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

b80d729e-f7fb-11ed-90ce-dac502259ad0.png

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

b84883ac-f7fb-11ed-90ce-dac502259ad0.png

③修改系統編譯配置文件

使用 OH 的 gn 以及 config 文件配置系統編譯流程以及包依賴關系,涉及到的配置文件如下:

device/board/alientek/explorer/liteos_m/config.gni#Kerneltype,e.g."linux","liteos_a","liteos_m".kernel_type="liteos_m"#Kernelversion.kernel_version="3.0.0"#BoardCPUtype,e.g."cortex-a7","riscv32".board_cpu="cortex-m4"#Boardarch,e.g."armv7-a","rv32imac".board_arch=""#Toolchainnameusedforsystemcompiling.#E.g.gcc-arm-none-eabi,arm-linux-harmonyeabi-gcc,ohos-clang,riscv32-unknown-elf.#Note:Thedefaulttoolchainis"ohos-clang".It'snotmandatoryifyouusethedefaulttoolchain.board_toolchain="arm-none-eabi-gcc"use_board_toolchain=true#Thetoolchainpathinstalled,it'snotmandatoryifyouhaveaddedtoolchainpathtoyour~/.bashrc.board_toolchain_path=""#Compilerprefix.board_toolchain_prefix="arm-none-eabi-"#Compilertype,"gcc"or"clang".board_toolchain_type="gcc"#Debugcompileroptimizationleveloptionsboard_opt_flags=["-mcpu=cortex-m4","-mthumb","-mfpu=fpv4-sp-d16","-mfloat-abi=hard",]#Boardrelatedcommoncompileflags.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#Boardrelatedheadfilessearchpath.board_include_dirs=["http://utils/native/lite/include"]#BoardadapterdirforOHOScomponents.board_adapter_dir=""這里的核心工作就是將原有的Makefile編譯文件翻譯成OH的config.gni,可以看到有很多的編譯參數以及宏變量定義。修改編譯依賴文件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",]}

④改造 main 函數,拉起系統內核

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

intmain(void)
{
HAL_Init();/*初始化HAL庫*/
sys_stm32_clock_init(336,8,2,7);/*初始化時鐘頻率168Mhz*/
delay_init(168);/*延時初始化*/
printf("hal、系統始終初始化完畢,開始啟動系統...
");
RunTask();
}
voidRunTask()
{
unsignedintret;
ret=LOS_KernelInit();//初始化LiteOS系統
if(ret!=LOS_OK)
{
printf("Liteoskernelinitfailed!ERROR:0x%x
",ret);
}
else
{
LOS_Start();//啟動系統
}
...
}

編譯與燒錄

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

b87a80aa-f7fb-11ed-90ce-dac502259ad0.png

日志輸出 explorer build success 表示編譯成功。 編譯過程中可能會遇到缺少某些結構體或者函數的定義,需要細心排查,注意宏定義是否打開。 STM32F407 開發板支持串口和 ST-LINK 燒錄方式,但 OH 編譯出來的是 bin 文件,bin 無法直接通過串口燒錄。

需要用到 ST-LINK 工具進行燒錄,燒錄時需要指定 flash,開始地址:0x08000000,大小:0x100000。

b89ddd8e-f7fb-11ed-90ce-dac502259ad0.png

開始燒錄:

b8d43e4c-f7fb-11ed-90ce-dac502259ad0.png

點亮開發板:

b8f033ea-f7fb-11ed-90ce-dac502259ad0.png

總結

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

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內核
    +關注

    關注

    3

    文章

    1372

    瀏覽量

    40276
  • soc
    soc
    +關注

    關注

    38

    文章

    4161

    瀏覽量

    218162
  • 移植
    +關注

    關注

    1

    文章

    379

    瀏覽量

    28124
  • 鴻蒙
    +關注

    關注

    57

    文章

    2339

    瀏覽量

    42805
  • OpenHarmony
    +關注

    關注

    25

    文章

    3713

    瀏覽量

    16254
收藏 人收藏

    評論

    相關推薦

    Flutter 在鴻蒙系統上移植的小成本實現案例解析

    探索,成功地實現了 Flutter 對于鴻蒙系統的原生支持。 作者 | 楊超 本文經授權轉載自美團技術團隊 前言 鴻蒙系統 (HarmonyOS)是華為推出的一款面向未來、面向全場景的分布式操作系統。在傳統單設備系統能力的基礎上
    的頭像 發表于 01-26 09:55 ?4613次閱讀
    Flutter 在<b class='flag-5'>鴻蒙</b>系統上<b class='flag-5'>移植</b>的小成本實現案例解析

    鴻蒙OS開發學習:【尺寸適配實現】

    鴻蒙開發中,尺寸適配是一個重要的概念,它可以幫助我們在不同屏幕尺寸的設備上正確顯示和布局我們的應用程序。本文將介紹如何在鴻蒙開發中實現尺寸適配
    的頭像 發表于 04-10 16:05 ?1733次閱讀
    <b class='flag-5'>鴻蒙</b>OS開發學習:【尺寸<b class='flag-5'>適配</b>實現】

    OpenHarmony設備內核移植實戰(一)

    路徑為: kernel/liteos_m/arch/arm 五、總結 OpenHarmony設備移植需要從芯片架構、SoC、開發板開始,因此本文首先講述了三者之前的關系。
    發表于 04-24 16:04

    鴻蒙系統開始適配游戲 適配完畢的游戲會有啥體驗

    鴻蒙系統最新進展情況 最近很多人都在討論鴻蒙系統適配游戲的情況,其實我早前就已經透露過,鴻蒙系統因為有特殊的新引擎,所以每一款游戲只要適配
    的頭像 發表于 01-11 09:49 ?3551次閱讀

    基于鴻蒙組件適配移植的流式布局

    項目介紹 項目名稱:流式布局FlowLayout 所屬系列:鴻蒙的第三方組件適配移植 功能:一種流式布局 項目移植狀態:核心功能完成 調用差異:無 項目發起作者:陳叢笑 開發版本:sd
    發表于 03-21 14:32 ?1次下載
    基于<b class='flag-5'>鴻蒙</b>組件<b class='flag-5'>適配</b><b class='flag-5'>移植</b>的流式布局

    鴻蒙適配移植的開源SnackBar消息彈框教程

    項目介紹 項目名稱:開源SnackBar消息彈框 所屬系列:鴻蒙的第三方組件適配移植 功能:支持顯示彈出式提醒,包括文字和點擊效果 項目移植狀態:完成 調用差異:無 開發版本:sdk5
    發表于 03-25 14:13 ?1次下載

    鴻蒙第三方組件適配移植的滑動驗證碼教程

    項目介紹 項目名稱:滑動驗證碼 所屬系列:鴻蒙的第三方組件適配移植 功能:實現了滑動驗證的功能 可以判斷驗證成功或者是失敗 項目移植狀態:80%,
    發表于 04-02 14:34 ?1次下載

    基于鴻蒙適配移植的開源視頻緩存引擎項目案例

    項目介紹 項目名稱:開源視頻緩存引擎項目 所屬系列:鴻蒙的第三方組件適配移植 功能:支持自動緩存視頻并在斷網狀態下播放視頻 項目移植狀態:完成 調用差異:無 開發版本:sdk5,Dev
    發表于 04-06 10:27 ?2次下載

    基于openharmony適配移植的搜索控件

    項目介紹 項目名稱:SimpleSearchView 所屬系列:openharmony 第三方組件適配移植 功能:一款簡單的基于鴻蒙風格的搜索控件 項目移植狀態:主功能完成 調用差異:
    發表于 04-07 10:25 ?1次下載

    基于openharmony適配移植的圓形視圖教程

    該三方開源庫從github fork過來,主要將底層接口調用的實現修改成鴻蒙接口的實現,將三方庫鴻蒙化,供開發鴻蒙應用的開發者使用。 CircleView 包含標題和副標題的圓形視圖 項目移植
    發表于 04-11 09:54 ?0次下載

    基于鴻蒙適配移植的開源彈幕解析繪制引擎項目

    項目介紹 項目名稱:開源彈幕解析繪制引擎項目 所屬系列:鴻蒙的第三方組件適配移植 功能:支持顯示、隱藏、顯示、暫停、繼續、發送、定時發送彈幕 項目移植狀態:完成 調用差異:無 開發版本
    發表于 04-11 10:38 ?2次下載

    基于鴻蒙適配移植的廣告圖片輪播控件教程

    項目介紹 項目名稱:廣告圖片輪播控件 所屬系列:鴻蒙的第三方組件適配移植 功能:廣告輪播,循環輪播 項目移植狀態:主功能 調用差異:無 開發版本:sdk5,DevEco Studio2
    發表于 04-11 10:40 ?2次下載

    鴻蒙設備移植指南:編譯框架適配

    上一篇我們成功將 OpenHarmony 移植到小米 6 手機上,今天給大家講解 OpenHarmony 編譯部分。
    的頭像 發表于 02-08 09:15 ?1561次閱讀

    OpenHarmony設備內核移植實戰(一)

    背景 在各行各業存在很多不同的智能設備,每個設備都使用芯片去實現不同的業務場景需求。本文將以常用的STM32F407ZG芯片為例,介紹OpenHarmony設備內核
    的頭像 發表于 05-11 20:16 ?1050次閱讀
    OpenHarmony<b class='flag-5'>瘦</b><b class='flag-5'>設備</b>內核<b class='flag-5'>移植</b>實戰(一)

    客戶機是什么?客戶機能單獨使用嗎?

    在當今數字化辦公環境中,客戶機作為一種高效的終端設備,逐漸成為企業和機構的首選。那么,究竟什么是客戶機呢?其實,客戶機是一種特殊設計的計算機終端,與傳統的個人電腦(PC)有著顯著
    的頭像 發表于 10-10 10:04 ?406次閱讀
    主站蜘蛛池模板: 国产亚洲欧美在线观看三区 | 三级成年网站在线观看| 两个女人互添下身高潮自视频| 欧美.亚洲.日韩.天堂| 日本精品久久久久中文字幕2 | 92电影网午夜福利| 扒开老师大腿猛进AAA片软件| 暖暖日本在线手机免费完整版 | 日本xxx在线观看免费播放| 香蕉鱼视频观看在线视频下载| 早乙女由依在线观看| 成人国产免费| 久久99re2在线视频精品| 日本学生VIDEOVIDEOS更新| 亚洲午夜电影| yellow视频免费观看| 狠狠色狠狠色综合日日32| 欧美男男网站免费观看videos| 亚洲国产成人精品无码区APP| a级全黄试频试看30分钟| 国内外成人免费在线视频| 泡妞高手在都市完整版视频免费| 亚洲欧美成人| 动漫美女3d被爆漫画| 伦理片在线线手机版韩国免费观看| 少妇高潮A视频| 91素人约啪| 九九精品视频一区二区三区| 色欲人妻无码AV精品一区二区| 2021国产精品久久久久精品免费网| 国产日韩久久久精品影院首页| 欧美精品九九99久久在观看| 伊人久久综合成人亚洲| 国产精品禁18久久久夂久| 欧美日韩一级黄色片| 在线精品视频成人网| 国内一级一级毛片a免费| 色偷偷91综合久久噜噜| 99久久免费国产精精品| 久久人妻AV一区二区软件| 亚洲 日本 天堂 国产 在线|