鸿蒙移植树莓派(中)添加单板
https://harmonyos.51cto.com/#zz
项目最新更新,可以查看码仓 https://gitee.com/liangzili/harmony-raspberry
1、添加新单板
1.1、修改menuconfig和Kconfig
要在鸿蒙的源码中添加树莓派的开发板,得先分析鸿蒙的编译构建系统。menuconfig通过Kconfig配置文件,可以生成.config(kernelliteos_a.config)文件,内核的编译配置项包含在这个文件中。
1.1.1、添加单板
进入源码/kernel/liteos_a/目录下执行
- make menuconfig
会进入下图的界面,这个界面基于kernelliteos_aKconfig这个文件生成,而且这个文件还可以包含其它目录下的Kconfig。
![](https://s5.51cto.com/oss/202101/25/ea394d16356ce7ffe058e8ff80a3fbbf.png)
- 包含其他目录下的Kconfig,比如:
- source "../../kernel/liteos_a/platform/Kconfig" #这个文件就是添加新开发板的Kconfig
- source "../../kernel/liteos_a/arch/Kconfig"
- ...
1.1.2、修改kernelliteos_aplatformKconfig
打开"../../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就会多出一个新的单板选项。
1.1.3、修改kernelliteos_aKconfig
设置单板的默认编译器,在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下才会出现编译器的选择,如下图:
选择这个新单板保存退出后,查看kernelliteos_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、修改kernelliteos_aMakefile
设置根文件系统类型和大小,在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/..
- vendorroadcomBCM2836oardincludeasmplatform.h
1.2.3、然后修改vendorroadcomBCM2836BCM2836.mk
设置基目录地址
- BCM2836_BASE_DIR := $(LITEOSTOPDIR)/../../vendor/broadcom/BCM2836
1.2.4、kernelliteos_aplatformMakefile
仿照其他单板添加,43行左右
- $(LOSCFG_PLATFORM_RASPBERRYPI2)
- ifeq ($(findstring y, $(LOSCFG_PLATFORM_HI3518EV300)$(LOSCFG_PLATFORM_HI3516DV300)$(LOSCFG_PLATFORM_RASPBERRYPI2)), y)
1.2.5、kernelliteos_aplatformsp.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、drivershdflitehdf_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、vendorhuaweihdfhdf_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、编译:
编译测试的时候可以修改kernelliteos_a oolsuildmklos_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、toolsuildmklos_config.mk
- ifeq ($(LITEOS_PLATFORM),BCM2836)
- include $(LITEOSTOPDIR)/../../vendor/broadcom/BCM2836/BCM2836.mk
- endif
1.3.3、kernelliteos_akernelcommonlos_config.h
43行左右,注释此行
- //#include "hisoc/clock.h"
- #include "clock.h"
=======完整内容======
#2020征文-开发板# 鸿蒙 移植 树莓派(上)搭建环境下载源码
#2020征文-开发板# 鸿蒙 移植 树莓派(中)添加单板
#2020征文-开发板# 鸿蒙 移植 树莓派(下)修改源码
©著作权归作者和HarmonyOS技术社区共同所有,如需转载,请注明出处,否则将追究法律责任。
https://harmonyos.51cto.com/#zz
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击