OpenHarmony(鸿蒙南向开发)——小型系统STM32MP1芯片移植案例

本文章基于意法半导体STM32MP157芯片的小熊派BearPi-HM Micro开发板,进行小型带屏开发板的移植,实现了ace_engine_litearkui_ui_liteaafwk_liteappexecfwk_liteHDF等部件基于OpenHarmony LiteOS-A内核的适配。移植架构上采用BoardSoC分离的方案。

编译构建

目录规划

本方案的目录结构使用Board和SoC解耦的设计思路,并把芯片适配目录规划为:

device
├── board                               --- 单板厂商目录
│   └── bearpi                          --- 单板厂商名字:小熊派
│       └── bearpi_hm_micro             --- 单板名:bearpi_hm_micro
└── soc                                 --- SoC厂商目录
    └── common                          --- 存放公共HDF驱动 
    └── st                              --- SoC厂商名字:ST意法半导体
        └── stm32mp1xx                  --- SoC Series名:stm32mp1xx系列芯片

产品样例目录规划为:

vendor
└── bearpi                              --- 开发产品样例厂商目录,小熊派的产品样例
    └── bearpi_hm_micro                 --- 产品名字:bearpi_hm_micro开发板

预编译适配

在进行移植之前,需要进行预编译适配。

预编译适配主要使用hb set命令,设置整个项目的根目录、单板目录、产品目录、单板公司名等环境变量,为编译做准备。

具体的预编译适配步骤如下:

  1. vendor/bearpi/bearpi_hm_micro目录下新增config.json文件,用于描述这个产品样例所使用的单板、内核等信息,描述信息可参考如下内容:
    {
      "product_name": "bearpi_hm_micro",    --- 用于hb set进行选择时,显示的产品名称
      "version": "3.0",                     --- 构建系统的版本,1.0/2.0/3.0
      "type": "small",                      --- 构建系统的类型,mini/small/standard
      "ohos_version": "OpenHarmony 3.0",    --- OpenHarmony系统版本
      "device_company": "bearpi",           --- 单板厂商名,用于编译时找到/device/board/bearpi目录
      "board": "bearpi_hm_micro",           --- 单板名,用于编译时找到/device/board/bearpi/bearpi_hm_micro目录
      "kernel_type": "liteos_a",            --- 内核类型,因为OpenHarmony支持多内核,一块单板可能适配了多个内核,所以需要指定某个内核进行编译
      "kernel_version": "",                 --- 内核版本,一块单板可能适配了多个linux内核版本,所以需要指定某个具体的内核版本进行编译
      "subsystems": [ ]                     --- 选择所需要编译构建的子系统
    }
  1. device/board/bearpi/bearpi_hm_micro/liteos_a目录下新增config.gni文件,用于描述这个产品样例所使用的单板、内核等信息,描述信息可参考如下内容:
    # Kernel type, e.g. "linux", "liteos_a", "liteos_m".
    kernel_type = "liteos_a"

    # Kernel version.
    kernel_version = ""

    # Board CPU type, e.g. "cortex-a7", "riscv32".
    board_cpu = "cortex-a7"

    # Board arch, 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 = ""

    # 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 = ""

    # Compiler type, "gcc" or "clang".
    board_toolchain_type = "clang"

    # Board related common compile flags.
    board_cflags = [
    "-mfloat-abi=softfp",
    "-mfpu=neon-vfpv4",
    ]
    board_cxx_flags = [
    "-mfloat-abi=softfp",
    "-mfpu=neon-vfpv4",
    ]
    board_ld_flags = []

    # Board related headfiles search path.
    board_include_dirs = []

    # Board adapter dir for OHOS components.
    board_adapter_dir = "//device/board/bearpi/bearpi_hm_micro/hal"

    # Sysroot path.
    board_configed_sysroot = ""

    # Board storage type, it used for file system generation.
    storage_type = "emmc"
  1. 验证hb set配置是否正确,输入hb set能够显示如下图片表示配置正确。

执行hb set输入项目根目录,并且回车,hb命令会遍历所有//vendor/<product_company>/<product_name>目录下的config.json,给出可选产品编译选项,config.jsonproduct_name用于显示产品名,device_companyboard用于关联出//device/board/<device_company>/<board>目录,并且匹配<any_dir_name>/config.gni文件,如果能够匹配多个文件,表示该单板适配了多个内核,那么可以根据config.jsonkernel_typekernel_version来唯一匹配config.gnikernel_typekernel_version,即可确定了需要编译适配了哪个内核的单板。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值