鴻蒙 移植 樹莓派(中)添加單板


目錄:

1.1、修改menuconfig和Kconfig

1.2、修改make和Makefile文件

1.3、編譯

1.4、源碼下載地址

 

1、添加新單板

1.1、修改menuconfig和Kconfig
要在鴻蒙的源碼中添加樹莓派的開發板,得先分析鴻蒙的編譯構建系統。menuconfig通過Kconfig配置文件,可以生成.config(kernel\liteos_a.config)文件,內核的編譯配置項包含在這個文件中。

1.1.1、添加單板
進入源碼/kernel/liteos_a/目錄下執行

make menuconfig

 

會進入下圖的界面,這個界面基於\kernel\liteos_a\Kconfig這個文件生成,而且這個文件還可以包含其它目錄下的Kconfig。

#2020征文-開發板# 鴻蒙 移植 樹莓派(中)添加單板

包含其他目錄下的Kconfig,比如:
source "../../kernel/liteos_a/platform/Kconfig"  #這個文件就是添加新開發板的Kconfig
source "../../kernel/liteos_a/arch/Kconfig"
...

 

 

1.1.2、修改kernel\liteos_a\platform\Kconfig
打開"../../kernel/liteos_a/platform/Kconfig",仿照其他單板,添加樹莓派配置項。

config PLATFORM 下添加:

default "Raspberry_Pi_2" if PLATFORM_RASPBERRYPI2

 

choice 下添加:

config PLATFORM_RASPBERRYPI2
    bool "Raspberry_Pi_2"
    select ARCH_CORTEX_A7

 

添加完這兩項,重新運行make menuconfig選擇platform就會多出一個新的單板選項。

#2020征文-開發板# 鴻蒙 移植 樹莓派(中)添加單板

 

1.1.3、修改kernel\liteos_a\Kconfig
設置單板的默認編譯器,在45、49行左右。

config COMPILER_HIMIX_32
    bool "arm-linux-ohoseabi"
    depends on PLATFORM_HI3518EV300 || PLATFORM_HI3516DV300 || PLATFORM_RASPBERRYPI2
​
config COMPILER_CLANG_LLVM
    bool "clang-llvm"
        depends on PLATFORM_HI3518EV300 || PLATFORM_HI3516DV300 || PLATFORM_RASPBERRYPI2

 

添加了這兩項Compiler下才會出現編譯器的選擇,如下圖:

#2020征文-開發板# 鴻蒙 移植 樹莓派(中)添加單板

 

選擇這個新單板保存退出后,查看\kernel\liteos_a.config,會發現多出下面兩項。

#
# Platform
#
LOSCFG_PLATFORM="Raspberry_Pi_2"
# LOSCFG_PLATFORM_HI3516DV300 is not set
# LOSCFG_PLATFORM_HI3518EV300 is not set
LOSCFG_PLATFORM_RASPBERRYPI2=y

 

1.2、修改make和Makefile文件

Makefile platform/Makefile platform/bsp.mk

 

1.2.1、修改kernel\liteos_a\Makefile
設置根文件系統類型和大小,在62行左右。

ifeq ($(LOSCFG_PLATFORM_RASPBERRYPI2), y)
FSTYPE = jffs2
ROOTFS_SIZE = 0xA00000
endif

 

make lib下添加單板文件夾,在107行左右。同時在源碼目錄/vendor/下添加對應文件夾,鴻蒙的部分代碼未開源,這里要感謝韋東山老師提供的補丁文件。

##### make lib #####
$(__LIBS): $(OUT) $(CXX_INCLUDE)
​
ifeq ($(LOSCFG_PLATFORM_RASPBERRYPI2),y)
BOARD_INCLUDE_DIR := $(LITEOSTOPDIR)/../../vendor/broadcom/BCM2836/board
else
BOARD_INCLUDE_DIR := $(LITEOSTOPDIR)/../../vendor/hisi/hi35xx/$(LITEOS_PLATFORM)/config/board
endif
​
$(OUT): $(LITEOS_MENUCONFIG_H)
    $(HIDE)mkdir -p $(OUT)/lib
    $(HIDE)$(CC) -I$(LITEOS_PLATFORM_BASE)/include -I$(BOARD_INCLUDE_DIR) \
        -E $(LITEOS_PLATFORM_BASE)/board.ld.S \
        -o $(LITEOS_PLATFORM_BASE)/board.ld -P

 

1.2.2、增加單板文件夾
新建單板文件夾,將韋東山的老師補丁中vendor文件夾復制過來,在vendor目錄下新建broadcom

單板文件目錄結構可以按照下面的格式修改:

內核/架構/芯片公司/芯片/板卡公司/硬件版本

Cortex-A7/Armv7-A/broadcom/BCM2836/Raspberry_Pi/..

vendor\broadcom\BCM2836\board\include\asm\platform.h

 

1.2.3、然后修改vendor\broadcom\BCM2836\BCM2836.mk
設置基目錄地址

BCM2836_BASE_DIR  := $(LITEOSTOPDIR)/../../vendor/broadcom/BCM2836

 

1.2.4、kernel\liteos_a\platform\Makefile
仿照其他單板添加,43行左右

$(LOSCFG_PLATFORM_RASPBERRYPI2) \
ifeq ($(findstring y, $(LOSCFG_PLATFORM_HI3518EV300)$(LOSCFG_PLATFORM_HI3516DV300)$(LOSCFG_PLATFORM_RASPBERRYPI2)), y)

 

1.2.5、kernel\liteos_a\platform\bsp.mk
設置單板的設備類型,比如中斷、timer、串口、USB之類的,58行左右

########################## LOSCFG_PLATFORM_RASPBERRYPI2 Options##############################
else ifeq ($(LOSCFG_PLATFORM_RASPBERRYPI2), y)
    HWI_TYPE     := arm/interrupt/gic
    TIMER_TYPE   := arm/timer/arm_generic
    HRTIMER_TYPE := BCM2836/hrtimer
    #UART_TYPE    := amba_pl011

 

設置頭文件要包含的目錄,在90行左右

ifeq ($(findstring y, $(LOSCFG_PLATFORM_HI3518EV300)$(LOSCFG_PLATFORM_HI3516DV300)), y)
    PLATFORM_INCLUDE += -I $(LITEOSTOPDIR)/../../vendor/hisi/hi35xx/$(LITEOS_PLATFORM)/config/board/include/hisoc
else ifeq ($(LOSCFG_PLATFORM_RASPBERRYPI2),y)
    PLATFORM_INCLUDE += -I $(LITEOSTOPDIR)/../../vendor/broadcom/BCM2836/board/include
endif

 

1.2.6、drivers\hdf\lite\hdf_lite.mk
設置HDF的頂層目錄,在39行左右,有點沒搞懂,為啥不直接使用一個默認的路徑

include $(LITEOSTOPDIR)/../../vendor/huawei/hdf/hdf_vendor.mk
替換為:
ifeq ($(findstring y, $(LOSCFG_PLATFORM_HI3518EV300)$(LOSCFG_PLATFORM_HI3516DV300)), y)
include $(LITEOSTOPDIR)/../../vendor/huawei/hdf/hdf_vendor.mk
endif
​
ifeq ($(LOSCFG_PLATFORM_RASPBERRYPI2), y)
include $(LITEOSTOPDIR)/../../vendor/broadcom/hdf/hdf_vendor.mk
endif

 

1.2.7、vendor\huawei\hdf\hdf_vendor.mk(TODO)
設置下單板的HDF相關文件路徑,18行左右

else ifeq ($(LOSCFG_PLATFORM_RASPBERRYPI2), y)
    LIB_SUBDIRS += $(LITEOS_SOURCE_ROOT)/vendor/broadcom/BCM2836/config
    VENDOR_HDF_DRIVERS_PLATFORM_ROOT := $(LITEOSTOPDIR)/../../vendor/broadcom/BCM2836/platform #這個文件夾還沒有

 

1.3、編譯:
編譯測試的時候可以修改kernel\liteos_a\tools\build\mk\los_config.mk HIDE的值為空,可以顯示make的執行命令

HIDE :=   #刪除@表示顯示make的執行命令

 

1.3.1、修改下面這4個頭文件
kernel/liteos_a/shell/full/src/base/show.c

kernel/liteos_a/shell/full/src/base/shcmd.c

kernel/liteos_a/shell/full/src/base/shmsg.c

kernel/liteos_a/shell/full/src/cmds/dmesg.c

#elif defined LOSCFG_PLATFORM_RASPBERRYPI2
#include "uart.h"

 

1.3.2、tools\build\mk\los_config.mk

ifeq ($(LITEOS_PLATFORM),BCM2836)
include $(LITEOSTOPDIR)/../../vendor/broadcom/BCM2836/BCM2836.mk
endif

 

1.3.3、kernel\liteos_a\kernel\common\los_config.h
43行左右,注釋此行

//#include "hisoc/clock.h"  
#include "clock.h"

 

 

作者: 亮子力

想了解更多內容,請訪問: 51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM