RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳解Board和SoC解耦的設(shè)計思路

電子發(fā)燒友開源社區(qū) ? 來源:HarmonyOS官方合作社區(qū) ? 作者:HarmonyOS官方合作社 ? 2022-03-03 09:50 ? 次閱讀

摘要

本文簡單介紹OpenHarmony輕量系統(tǒng)移植,Board和SoC解耦的設(shè)計思路。適合自己動手移植OpenHarmony輕量系統(tǒng)的朋友們。

開始嘗試講解一下系統(tǒng)的移植,主要是輕量系統(tǒng),也可能會順便講下L1移植。

對應(yīng)的是 01_vendor_soc_board

詳解Board和SoC解耦的設(shè)計思路

1、hb編譯原理

當(dāng)我們輸入hb set命令后,會提示我們選擇要編譯構(gòu)建的工程。

詳解Board和SoC解耦的設(shè)計思路

那么,hb 怎么知道有哪些工程可以編譯呢?

事實(shí)上這些工程都是在vendor文件夾中的,為了驗(yàn)證,我們可以在vendor中創(chuàng)建一個空的文件夾:gd,然后gd文件夾下面又創(chuàng)建了gd32f303_lianzhian文件夾。

但是這里還不夠,一個標(biāo)準(zhǔn)簡單的vendor文件夾結(jié)構(gòu)如下:

詳解Board和SoC解耦的設(shè)計思路

其中debug.config內(nèi)容為空即可,因?yàn)樗膬?nèi)容是自動生成的,后面我們配置的內(nèi)核的時候需要用到。

這幾個文件我們可以直接復(fù)制3861的過來,然后刪去我們不需要的子系統(tǒng),我們只需要保留如下即可:

config.json文件:

{  "product_name": "gd32f303_lianzhian",  "type": "mini",  "version": "3.0",  "device_company": "lianzhian",  "board": "gd32f303_lianzhian",  "kernel_type": "liteos_m",  "kernel_version": "",  "subsystems": [   {    "subsystem": "kernel",    "components": [     { "component": "liteos_m",      "features":[      ]     }    ]   }  ],  "third_party_dir": "",  "product_adapter_dir": ""}

向右滑動查看完整代碼

BUILD.gn文件:

group("gd32f303_lianzhian") {}

向右滑動查看完整代碼

此時,我們再去執(zhí)行hb set,就可以看到我們自己創(chuàng)建的工程了:gd32f303_lianzhian

詳解Board和SoC解耦的設(shè)計思路

2、設(shè)計思想

最新的master分支的代碼設(shè)計采用Board和SoC解耦的設(shè)計思路,具體可以看這個文章:

按照硬件進(jìn)行層次劃分為芯片架構(gòu)層、片上系統(tǒng)層和單板層。從下向上依次進(jìn)行包含關(guān)系,例如:

(1)架構(gòu)

ARMv7E-M架構(gòu)具有ARM Cortex-M4, ARM Cortex-M7等CPU實(shí)現(xiàn)。

(2)芯片系列

ARM Cortex-M4 CPU對應(yīng)的SoC Family有STmicro STM32NXP i.MX等,反過來,如圖SoC Family 2跨越CPU1和CPU2,意味著一個SoC Family可以包含多個CPU實(shí)現(xiàn),例如STMicro STM32可以包含Cortex-M0、Cortex-M4等CPU,又例如復(fù)雜的STM32MP157 SoC包含兩個Cortex-A7 CPU核與一個Cortex-M4 CPU核,對于異構(gòu)多核SoC,需要通過OpenAMP來進(jìn)行分解成多個同構(gòu)多核的部分。

(3)芯片與開發(fā)板對應(yīng)關(guān)系

STM32 SoC Family有STM32F4、STM32G4等SoC Series。

STM32F4 SoC Series 有 STM32F401、STM32F429等SoC。

STM32F429 SoC 有 野火STM32F429挑戰(zhàn)者開發(fā)板、正點(diǎn)原子stm32f429阿波羅開發(fā)板等。

如圖Board 5上面還有一個shields,意味著一個Board可以通過增加擴(kuò)展板的形式來提供更強(qiáng)的功能。例如,單板可以利用串口通信外接Hi3861模組,以提供WLAN能力。

詳解Board和SoC解耦的設(shè)計思路

基于硬件結(jié)構(gòu)劃分層次圖,OpenHarmony頂層目錄結(jié)構(gòu)設(shè)計如下:

詳解Board和SoC解耦的設(shè)計思路

3、board配置

1)創(chuàng)建 board文件夾

當(dāng)我們輸入hb set命令后,我們選擇 gd32f303_lianzhian 可以看到會提示報錯:我們需要創(chuàng)建該文件夾:device/board/lianzhian,為啥是lianzhian ?

因?yàn)槲覀冊趘endor中的config.json中指定了device_company 設(shè)備廠家是lianzhian,大家可以回頭看看,標(biāo)準(zhǔn)的board文件夾目錄結(jié)構(gòu)如下:

詳解Board和SoC解耦的設(shè)計思路

2)Kconfig配置文件

我們可以在kernel/liteos_m內(nèi)核目錄下執(zhí)行make menuconfig進(jìn)行圖形化配置,Makefile文件會遍歷board下的所有Kconfig文件,所以我們需要添加對應(yīng)的Kconfig文件。

這里內(nèi)核是分層設(shè)計的,即廠商配置和具體開發(fā)板分開,一個廠商下面可以有多個開發(fā)板。

例如我們現(xiàn)在移植的設(shè)備廠商是是lianzhian,那么lianzhian是廠商文件夾,lianzhian下面有Kconfig,主要是廠商級別的配置。

然后lianzhian下面可以有多個開發(fā)板,我們這里只寫了gd32f303_lianzhian開發(fā)板。同樣gd32f303_lianzhian文件夾下面也有Kconfig配置文件。

3)廠商Kconfig配置文件

我們先看下lianzhian廠商的Kconfig文件

(1)Kconfig.liteos_m.boards 文件內(nèi)容:

orsource "*/Kconfig.liteos_m.board"

可以看到很簡單,事實(shí)上它就是簡單的把當(dāng)前目錄下的所有文件夾下的Kconfig.liteos_m.board文件都導(dǎo)入進(jìn)來。

(2)Kconfig.liteos_m.defconfig.boards文件

orsource "*/Kconfig.liteos_m.defconfig.board"

同樣把當(dāng)前目錄下的所有文件夾下的Kconfig.liteos_m.defconfig.board文件都導(dǎo)入進(jìn)來。

(3)Kconfig.liteos_m.shields 文件

這里我們暫時不需要,可以內(nèi)容為空

4)具體開發(fā)板的Kconfig配置文件

我們先看下gd32f303_lianzhian廠商的Kconfig文件。

(1)Kconfig.liteos_m.board文件:

需要配置選擇該單板的選項(xiàng),以及它依賴的SoC

config BOARD_GD32F303_LIANZHIAN  bool "select board gd32f303 lianzhian"  depends on SOC_GD32F303    #只有當(dāng)我們芯片型號選擇為GD32F303時才可見

向右滑動查看完整代碼

這里是增加一個配置選項(xiàng),即后面我們可以在make menuconfig中看到"select board gd32f303 lianzhian"配置項(xiàng)。

詳解Board和SoC解耦的設(shè)計思路

(2)Kconfig.liteos_m.defconfig.board 文件

需要配置選擇該單板后,默認(rèn)定義 BOARD 的名字,該文件我們可以留空,也可以如下配置:

if BOARD_GD32F303_LIANZHIANconfig BOARD  string  default "gd32f303_lianzhian"
endif #BOARD_GD32F303_LIANZHIAN

向右滑動查看完整代碼

(3)gd32f303_lianzhian_defconfig 文件

內(nèi)容為:

LOSCFG_BOARD_GD32F303_LIANZHIAN=yLOSCFG_SOC_SERIES_GD32F303=yLOSCFG_SOC_GD32F303ZET6=y

向右滑動查看完整代碼

這里表示我們選中的板卡、SOC、SOC具體子型號系列等。

5)config.gni配置文件

liteos_m文件夾下的config.gni文件是用來進(jìn)行內(nèi)核配置的

詳解Board和SoC解耦的設(shè)計思路

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

# Copyright (C) 2020 Hisilicon (Shanghai) Technologies Co., Ltd. All rights reserved.
# 選擇內(nèi)核類型, e.g. "linux", "liteos_a", "liteos_m".kernel_type = "liteos_m"
# 內(nèi)核版本,留空即可.kernel_version = ""
# 芯片架構(gòu), e.g. "cortex-a7", "riscv32".board_cpu = "cortex-m4"
# 這里一般不用謝, 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"
# 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"
# 編譯選項(xiàng)Board related common compile flags.board_cflags = [ "-mcpu=cortex-m4", "-mfpu=fpv4-sp-d16", "-mfloat-abi=hard", "-mthumb", "-Og", # "-g", #"-Wall", "-fdata-sections", "-ffunction-sections", # 注意,這里我們需要定義GD32F30X_HD宏 "-DGD32F30X_HD", # 我們需要浮點(diǎn)數(shù)計算 "-D__FPU_PRESENT",]board_cxx_flags = board_cflagsboard_ld_flags = []
# 頭文件路徑,一般需要soc相關(guān) Board related headfiles search path.board_include_dirs = [ "${ohos_root_path}device/soc/gd32/gd32f303/liteos_m", "${ohos_root_path}device/soc/gd32/CMSIS", "${ohos_root_path}device/soc/gd32/CMSIS/GD/GD32F30x/Include", "${ohos_root_path}device/soc/gd32/gd32f303/GD32F3XX_Driver/Inc", "${ohos_root_path}device/soc/gd32/gd32f303", "${ohos_root_path}utils/native/lite/include", "${ohos_root_path}kernel/liteos_m/components/cpup", "${ohos_root_path}kernel/liteos_m/components/exchook", ]
# 開發(fā)板用到哪個soc Board adapter dir for OHOS components.board_adapter_dir = "${ohos_root_path}device/soc/gd32"
# Sysroot path.board_configed_sysroot = ""
# Board storage type, it used for file system generation.storage_type = ""

向右滑動查看完整代碼

4、SOC配置

1)創(chuàng)建 SOC文件夾

我們進(jìn)入到device/soc文件夾,創(chuàng)建 gd32文件夾,gd32文件夾內(nèi)容如下:

詳解Board和SoC解耦的設(shè)計思路

其中GD32官方標(biāo)準(zhǔn)庫文件和CMSIS都可以在GD官網(wǎng)下載到,而且不需要我們修改編寫,故而本節(jié)不會講其中的內(nèi)容,重點(diǎn)放在Kconfig配置文件中。

同樣,soc也是分為芯片廠家的Kconfig 和具體芯片信號的Kconfig,gd32是芯片廠家,gd32f303只是其中的一款型號而已。

2)gd32芯片廠家Kconfig配置文件

(1)先看Kconfig.liteos_m.soc文件

config SOC_COMPANY_GD32  bool
if SOC_COMPANY_GD32config SOC_COMPANY  default "gd32"
rsource "*/Kconfig.liteos_m.soc"endif # SOC_COMPANY_GD32

向右滑動查看完整代碼

這里很簡單,就是配置我們的芯片廠商默認(rèn)為 gd32,之后導(dǎo)入所有文件夾的 Kconfig.liteos_m.soc 配置文件。

(2)Kconfig.liteos_m.series文件

這個文件就比較簡單了,導(dǎo)入所有文件夾的 Kconfig.liteos_m.series 配置文件

rsource "*/Kconfig.liteos_m.series"

向右滑動查看完整代碼

(3)Kconfig.liteos_m.defconfig

同樣,導(dǎo)入所有文件夾的Kconfig.liteos_m.defconfig

rsource "*/Kconfig.liteos_m.defconfig.series"

向右滑動查看完整代碼

3)gd32F303芯片的Kconfig配置文件

我們來看看具體的芯片型號gd32f303的配置文件吧

(1)Kconfig.liteos_m.series文件

需要配置芯片系列,以及它的芯片架構(gòu)等信息,內(nèi)容:

config SOC_SERIES_GD32F303  bool "GD32F303 chip"  select ARM  select SOC_COMPANY_GD32  select CPU_CORTEX_M4  help    Enable support for GD32F303

向右滑動查看完整代碼

這個是芯片系列的選擇,我們的芯片系列是GD32F303,架構(gòu)是ARM、CORTEX_M4 芯片廠家是 SOC_COMPANY_GD32,這個在上一級gd32的Kconfig配置文件中有定義。

(2)Kconfig.liteos_m.soc文件

需要配置芯片系列有多少個型號的芯片。內(nèi)容:

choice  prompt "GD32F303 series SoC"  depends on SOC_SERIES_GD32F303 #只有選擇了芯片系列SOC_SERIES_GD32F303后才會出現(xiàn)如下選項(xiàng)
config SOC_GD32F303ZET6  #增加一個SOC_GD32F303ZET6選項(xiàng),我們現(xiàn)在只有GD32F303ZET6,后面可以還有GD32F303RCT6等。  bool "SoC GD32F303ZET6"
endchoice

向右滑動查看完整代碼

(3)Kconfig.liteos_m.defconfig.series 文件

選擇芯片系列后默認(rèn)的配置,內(nèi)容:

if SOC_SERIES_GD32F303
rsource "Kconfig.liteos_m.defconfig.gd32f303"
config SOC_SERIES  string  default "gd32f303"
config NUM_IRQS #中斷數(shù)量,跟具體芯片相關(guān)  int  default 90
config SYS_CLOCK_HW_CYCLES_PER_SEC #時鐘周期,GD32F303是120MHz  int  default 120000000
endif

向右滑動查看完整代碼

(4)Kconfig.liteos_m.defconfig.gd32f303 文件

Gd32f303的配置,內(nèi)容比較簡單:

config SOC  string  default "gd32f303zet6"  depends on SOC_GD32F303ZET6

向右滑動查看完整代碼

默認(rèn)是gd32f303zet6,至此我們的soc的kconfig配置基本完成。

4)內(nèi)核配置頭文件

還有一個比較重要的內(nèi)核配置頭文件,target_config.h。這個大家可以直接復(fù)制我的就行,主要是內(nèi)核功能配置相關(guān)。

詳解Board和SoC解耦的設(shè)計思路

其中有一個比較重要的配置項(xiàng):

/** * @ingroup los_config * Memory size */#define LOSCFG_SYS_HEAP_SIZE                (60*1024)

向右滑動查看完整代碼

這個是配置內(nèi)核的堆棧大小,這里可以根據(jù)自己芯片的內(nèi)存大小來定,GD32F303內(nèi)存是64KB,這里我用60k即可。

5、make menuconfig配置

完成上面移植內(nèi)容后,接下來,我們就可以進(jìn)行menuconfig配置了。

注意,這里我們需要先執(zhí)行一次hb set選擇我們的開發(fā)板gd32f303_lianzhian。我們進(jìn)入 kernel/liteos_m 文件夾執(zhí)行 make menuconfig

詳解Board和SoC解耦的設(shè)計思路

進(jìn)入Platform,我們選擇gd32f303芯片、gd32f303_lianzhian開發(fā)板,如下:

詳解Board和SoC解耦的設(shè)計思路

退出保存。結(jié)果將自動保$(PRODUCT_PATH)/kernel_configs/debug.config

6、gn編譯

在上一步Kconfig的圖形化配置后,將其生成的配置結(jié)果可以作為gn編譯的輸入,以控制不同模塊是否編譯。另外為了解決之前gn編寫時,隨意include的問題,內(nèi)核編譯做了模塊化編譯的設(shè)計,使得整個編譯邏輯更加清晰。

我們需要編寫device/board/lianzhian 和 device/soc/gd32兩個文件夾下的BUILD.gn。

這幾個BUILD.gn文件比較簡單,都是模塊化編譯,大家可以直接參考我的。

7、開始編譯

配置完BUILD.gn后,我們就可以開始執(zhí)行hb build -f編譯了。可以看到已經(jīng)能編譯過一大半了:

詳解Board和SoC解耦的設(shè)計思路

我們今天的目標(biāo)就是要能讓編譯系統(tǒng)能開始編譯我們的開發(fā)板一步一腳印,接下來我們將繼續(xù)開始移植,接下來將配置libc庫、系統(tǒng)啟動、main函數(shù)、鏈接腳本,直到編譯通過并且在開發(fā)板中成功運(yùn)行~

本節(jié)Board和SoC解耦的設(shè)計思路就分享到這里了,下一篇我們給大家分享:Board、SOC、架構(gòu)與代碼對應(yīng)關(guān)系,歡迎大家持續(xù)關(guān)注哦~

原文標(biāo)題:從零移植OpenHarmony輕量系統(tǒng)【2】Board和SoC解耦的設(shè)計思路

文章出處:【微信公眾號:HarmonyOS官方合作社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • soc
    soc
    +關(guān)注

    關(guān)注

    38

    文章

    4161

    瀏覽量

    218160
  • 移植
    +關(guān)注

    關(guān)注

    1

    文章

    379

    瀏覽量

    28124
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3713

    瀏覽量

    16254

原文標(biāo)題:從零移植OpenHarmony輕量系統(tǒng)【2】Board和SoC解耦的設(shè)計思路

文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發(fā)燒友開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    求助解答關(guān)于異步電機(jī)矢量控制中磁鏈環(huán)和電壓前饋問題??

    在異步電機(jī)矢量控制中,磁鏈的給定值怎么計算?我怎么知道我這個磁鏈的給定值應(yīng)該設(shè)置成多少??在電流控制器后一個電壓的前饋環(huán)節(jié)?不說很清楚環(huán)節(jié)的公式怎么來的?不知道有哪位朋友能夠提
    發(fā)表于 11-23 20:54

    永磁同步電機(jī)偏差和電流前饋控制比較

    偏差控制:電機(jī)參數(shù)估計值采用估計值加上電流反饋補(bǔ)償d軸電流:電機(jī)參數(shù)準(zhǔn)確值采用準(zhǔn)確值加上電流反饋補(bǔ)償d軸電流:電機(jī)參數(shù)采用估計值加上偏差控制:電機(jī)參數(shù)采用準(zhǔn)確值加上偏差
    發(fā)表于 06-28 06:08

    常用的設(shè)計方法

    在采用傳統(tǒng)無動態(tài)控制時,uqu_quq?和udu_dud?的指令值存在耦合項(xiàng)。上一個學(xué)習(xí)筆記中設(shè)計的設(shè)計方法是將其忽略,因此在最后設(shè)計的效果并不太好。目前,常用的設(shè)計方法,有前
    發(fā)表于 08-27 07:29

    永磁同步電機(jī)偏差與電流前饋控制對比分析,哪個影響大?

    永磁同步電機(jī)偏差與電流前饋控制對比分析,哪個影響大?
    發(fā)表于 10-12 10:17

    電壓前饋是如何實(shí)現(xiàn)的

    電壓前饋是什么?電壓前饋是如何實(shí)現(xiàn)的?
    發(fā)表于 10-15 06:55

    從零移植OpenHarmony輕量系統(tǒng)【1】移植思路

    移植類型OpenHarmony輕量系統(tǒng)的移植比較簡單,代碼中做得非常好。從代碼的設(shè)計理念上來看,移植主要是3部分的內(nèi)容:(1)ARCH部分的代碼(2)SoC部分的代碼(3)board
    發(fā)表于 01-26 17:18

    從零移植OpenHarmony輕量系統(tǒng)【2】BoardSoC的設(shè)計思路

    本帖最后由 jf_39160458 于 2022-1-27 17:18 編輯 摘要:本文簡單介紹OpenHarmony輕量系統(tǒng)移植,BoardSoC的設(shè)計
    發(fā)表于 01-27 17:16

    多變量控制實(shí)驗(yàn)

    多變量控制4.0 實(shí)驗(yàn)設(shè)備PC計算機(jī)1臺(要求P4-1.8G以上)、MATLAB6.X軟件1套。4.1 實(shí)驗(yàn)?zāi)康蘑賹W(xué)習(xí)多變量控制方法。②通過用MATLAB編程、上機(jī)調(diào)試,掌握多
    發(fā)表于 05-15 00:51 ?0次下載

    基于補(bǔ)償器的控制方法的研究

    本文通過對冷熱水混合系統(tǒng)的溫度和液位的雙變量耦合問題進(jìn)行分析,提出了一種滿足要求和控制目標(biāo)需要的基于補(bǔ)償器的Smith預(yù)估控制方法。試驗(yàn)結(jié)果表明,
    發(fā)表于 02-11 14:38 ?10次下載

    先進(jìn)PID多變量控制

    先進(jìn)PID多變量控制 通過PID控制,可實(shí)現(xiàn)對多變量系統(tǒng)的控制
    發(fā)表于 05-04 16:01 ?40次下載

    多變量自適應(yīng)控制及應(yīng)用

    多變量自適應(yīng)控制及應(yīng)用,有需要的朋友下來看看。
    發(fā)表于 04-12 10:21 ?0次下載

    初值設(shè)定對快速法潮流計算的影響研究

    初值設(shè)定對快速法潮流計算的影響研究
    發(fā)表于 01-23 14:13 ?0次下載

    基于H∞混合靈敏度控制器實(shí)現(xiàn)BTT導(dǎo)彈自動駕駛儀的設(shè)計

    導(dǎo)彈在大攻角飛行過程中,通道間存在嚴(yán)重的氣動耦合。工程設(shè)計上,通常把較小的耦合項(xiàng)作為隨機(jī)干擾來處理,但當(dāng)耦合影響較大時,容易使控制系統(tǒng)喪失穩(wěn)定性,因此必須考慮通道間的耦合效應(yīng),并對其。近年來
    發(fā)表于 05-17 10:35 ?1130次閱讀

    電容如何放置

    警告: 請注意電容的位置,尤其是IC芯片的電源與地引腳是斜對角的。 潛在問題: 不合理的位置會導(dǎo)致不充分的。 預(yù)防措施: -對于像直插這樣的IC,其電源端子與地是端子成對角放置
    的頭像 發(fā)表于 09-30 09:18 ?4099次閱讀
    電容<b class='flag-5'>解</b><b class='flag-5'>耦</b>如何放置

    永磁同步電機(jī)控制之反饋及復(fù)矢量

    永磁同步電機(jī)反饋及復(fù)矢量(無刷直流電機(jī)等交流電機(jī)同樣適用) 一、永磁同步電機(jī)數(shù)學(xué)模型 1.永磁同步電機(jī)dq坐標(biāo)系數(shù)學(xué)模型 2.永磁同步電機(jī)復(fù)矢量數(shù)學(xué)模型 二、
    發(fā)表于 03-09 10:09 ?0次下載
    永磁同步電機(jī)控制之反饋<b class='flag-5'>解</b><b class='flag-5'>耦</b>及復(fù)矢量<b class='flag-5'>解</b><b class='flag-5'>耦</b>
    RM新时代网站-首页