
OpenHarmony设备开发 小型系统STM32MP1芯片移植案例
本文章基于意法半导体STM32MP157
芯片的小熊派BearPi-HM Micro开发板,进行小型带屏开发板的移植,实现了ace_engine_lite
、graphic_ui
、aafwk_lite
、appexecfwk_lite
、HDF
等部件基于OpenHarmony LiteOS-A
内核的适配。移植架构上采用Board
与SoC
分离的方案。
编译构建
目录规划
本方案的目录结构使用Board和SoC解耦的设计思路,并把芯片适配目录规划为:
产品样例目录规划为:
预编译适配
在进行移植之前,需要进行预编译适配。
预编译适配主要使用hb set
命令,设置整个项目的根目录、单板目录、产品目录、单板公司名等环境变量,为编译做准备。
具体的预编译适配步骤如下:
- 在
vendor/bearpi/bearpi_hm_micro
目录下新增config.json
文件,用于描述这个产品样例所使用的单板、内核等信息,描述信息可参考如下内容:
2.在device/board/bearpi/bearpi_hm_micro/liteos_a
目录下新增config.gni
文件,用于描述这个产品样例所使用的单板、内核等信息,描述信息可参考如下内容:
3.验证hb se
配置是否正确,输入hb se
能够显示如下图片表示配置正确。
执行hb se
输入项目根目录,并且回车,h
命令会遍历所有//vendor/<product_company>/<product_name>
目录下的config.json
,给出可选产品编译选项,config.json
的product_name
用于显示产品名,device_company
和boar
用于关联出//device/board/<device_company>/<board>
目录,并且匹配<any_dir_name>/config.gni
文件,如果能够匹配多个文件,表示该单板适配了多个内核,那么可以根据config.json
的kernel_type
和kernel_version
来唯一匹配config.gni
的kernel_type
和kernel_version
,即可确定了需要编译适配了哪个内核的单板。
选择好产品后,输入回车就会在根目录下自动生成ohos_config.json文件,这里会将要编译的产品信息列出。通过hb env
也可以查看选择出来的预编译环境变量。
内核移植
内核移植需要完成LiteOS-A Kconfig
适配、gn
的编译构建和内核启动最小适配。
详细移植步骤参考:LiteOS-A内核移植
Kconfig适配
- 在//device/board/bearpi/bearpi_hm_micro/liteos_a/drivers/Kconfig中添加芯片、产品名称、厂商名称相关配置。
2.在//device/soc/st/common/platform/Kconfig中添加驱动相关配置。
3.在//vendor/bearpi/bearpi_hm_micro/kernel_configs/debug_tee.config中使能相关配置。
gn编译适配
- 在//device/board/bearpi/bearpi_hm_micro/liteos_a中新建BUILD.gn,添加代码如下,此模块依赖board、drivers、hdf_config。
2.在//device/board/bearpi/bearpi_hm_micro/liteos_a/board中新建BUILD.gn,添加代码如下。将os_adapt.c内核启动相关代码编译进系统。
3.在//device/board/bearpi/bearpi_hm_micro/liteos_a/drivers中新建BUILD.gn,添加代码如下,将device/soc/st/common/platform路径下的HDF驱动编译进系统。
4.在//vendor/bearpi/bearpi_hm_micro/hdf_config中新建BUILD.gn,添加代码如下,将HCS配置文件编译进系统。
内核启动适配
- 在//device/board/bearpi/bearpi_hm_micro/liteos_a/board/os_adapt.c中添加以下内核启动相关代码,详细解释参考LiteOS-A内核移植。
板级系统移植
SoC芯片平台HDF驱动移植
驱动适配相关文件放置在device/soc/st/common/platform
中,所有的驱动都是通过HDF
机制加载,本章节以GPIO驱动适配为例进行详细说明。
- 在
//device/soc/st/common/platform/gpio/BUILD.gn
文件中,描述了stm32mp1xxgpio
驱动的编译适配。如下:
2.在//device/soc/st/common/platform/gpio/stm32mp1_gpio.c
文件中,描述了stm32mp1xx gpio
驱动的源码适配。 首先,按照OpenHarmony
的HDF
驱动框架加载驱动基本适配框架,如下:
3.在//device/soc/st/stm32mp1xx/sdk_liteos/hdf_config/gpio中添加gpio硬件描述信息文件gpio_config.hcs,在该文件中添加驱动私有配置信息。
4.配置产品加载驱动,产品的所有设备信息被定义在源码文件//vendor/bearpi/bearpi_hm_micro/hdf_config/device_info/device_info.hcs中。
平台驱动请添加到platform的host中。
说明:
moduleName要与驱动文件中定义的相同,deviceMatchAttr要与驱动私有配置信息文件gpio_config.hcs中定义match_attr的相同。
5.完善驱动代码,gpio_config.hcs的配置信息会在GpioDriverInit中加载。
OpenHarmony子系统适配
OpenHarmony
子系统适配只需要在config.json
中增加对应子系统和部件,这样编译系统会将该部件纳入编译目标中。
启动恢复子系统适配
启动恢复子系统需要适配bootstrap_lite
、syspara_lite
、appspawn_lite
、init
四个部件。请在vendor/bearpi/bearpi_hm_micro/config.json
中新增对应的配置选项。
系统启动时会根据//vendor/bearpi/bearpi_hm_micro/init_configs中的启动配置来启动系统。
DFX子系统适配
进行DFX
子系统适配需要添加hilog_featured_lite
、hidumper_lite
部件,直接在config.json
文件配置即可。
系统服务管理子系统适配
进行系统服务管理子系统适配需要添加samgr_lite
、safwk_lite
、dmsfwk_lite
三个部件,直接在config.json
配置即可。
安全子系统适配
进行安全子系统适配需要添加permission_lite
、appverify
、device_auth
、huks
四个部件,直接在config.json
配置即可。
公共基础库子系统适配
进行公共基础库子系统适配需要添加kv_store
、os_dump
两个部件,直接在config.json
配置即可。
图形子系统适配
进行图形子系统适配需要添加graphic_utils
部件,直接在config.json
配置即可。
graphic
配置文件见 //vendor/bearpi/bearpi_hm_micro/graphic_config/product_graphic_lite_config.h
。
ACE开发框架子系统适配
进行ACE
开发框架子系统适配需要添加ace_engine_lite
部件,直接在config.json
配置即可。
ace_engine_lite
部件配置文件见 //vendor/bearpi/bearpi_hm_micro/ace_lite_config/product_acelite_config.h
。
元能力子系统适配
进行元能力子系统适配需要添加aafwk_lite
部件,直接在config.json
配置即可。
包管理子系统适配
进行包管理子系统适配需要添加appexecfwk_lite
部件,直接在config.json
配置即可。
