STM32F407移植OpenHarmony笔记3

接上一篇,搭建完环境,找个DEMO能跑,现在我准备尝试从0开始搬砖。

首先把/device和/vendor之前的代码全删除,这个时候用hb set命令看不到任何项目了。

/device目录是硬件设备目录,包括soc芯片厂商和board板级支持代码。
创建目录规则:“device/{芯片厂商}/{芯片开发板}”。

/vendor目录是产品项目定义目录。
创建目录规则:“vendor/{产品模组厂商}/{产品模组名称}”。

STM32F407移植OpenHarmony笔记3_第1张图片

参考文档:zh-cn/device-dev/porting/porting-minichip-prepare.md · OpenHarmony/docs - Gitee.com 


hb set是扫描/vendor/目录下的config.json,所以我们从这个文件开始。
然后根据报错信息一步一步添加代码。

先依葫芦画飘,写一个最小配置文件,把它放到/vendor/demo/hello目录。

{
  "product_name": "hello",
  "ohos_version": "OpenHarmony 3.2",
  "type": "mini",
  "version": "3.0",
  "device_company": "demo",
  "board": "demo_board",
  "target_cpu": "arm",
  "kernel_type": "liteos_m",
  "kernel_version": "3.0.0",
  "subsystems":
  [
    {
      "subsystem": "kernel",
      "components": 
      [
        {
          "component": "liteos_m", 
          "features": []
        }
      ]
    }
  ],
  "vendor_adapter_dir": "",
  "product_adapter_dir": "",
  "third_party_dir": "//third_party"
}

这个时候用hb set就能选择hello了。但是会报错:

OHOS Which product do you need?  hello
[OHOS ERROR] invalid path: /home/openharmony/device/board/demo/demo_board

没关系因为我们device目录还没有东西,要按照规则创建/device/board/demo/demo_board。
继续报错:

[OHOS ERROR] cannot find liteos_m_3.0.0 in /home/openharmony/device/board/demo/demo_board

是没有找到liteos的目录,但我看官方代码也没有这个liteos_m_3.0.0的目录,
只有liteos_m这个目录,猜测是config.gni里面的kernel_version=3.0.0起了作用。
找来talkweb的配置文件,放进/device/board/demo/demo_board/liteos_m/。

# /home/openharmony/device/board/demo/liteos_m/config.gni

# Kernel type, e.g. "linux", "liteos_a", "liteos_m".
kernel_type = "liteos_m"

# Kernel version.
kernel_version = "3.0.0"

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

# Board arch, e.g.  "armv7-a", "rv32imac".
board_arch = ""

......

这个时候hb set没有报错了,开始编译,看看报什么错:

[OHOS INFO] ERROR at //kernel/liteos_m/BUILD.gn:140:18: Unable to load "/home/openharmony/device/board/demo/BUILD.gn".

OHOS的编译框架是基于gn+ninja的,所以目录下面必须要有BUILD.gn,用来指定文件编译。
照着格式写一个最小配置,指定依赖bsp模块,后面会在bsp目录放启动代码。

# /home/openharmony/device/board/demo/liteos_m/BUILD.gn
# kerndev.blog.csdn.net

import("//kernel/liteos_m/liteos.gni")

module_name = get_path_info(rebase_path("."), "name")
module_group(module_name) {
  modules = [
    "bsp",
  ]
}

在bsp目录下面,也要创建一个BUILD.gn,把配置内容控制到最少。

# /home/openharmony/device/board/demo/liteos_m/bsp/BUILD.gn
# kerndev.blog.csdn.net

import("//kernel/liteos_m/liteos.gni")

module_name = get_path_info(rebase_path("."), "name")
kernel_module(module_name) {

}

再次编译,看看报错:

[OHOS INFO] ERROR at //kernel/liteos_m/BUILD.gn:141:18: Unable to load "/home/openharmony/device/soc/BUILD.gn".
[OHOS INFO]     configs += [ "//device/soc/$LOSCFG_SOC_COMPANY:public" ]

看来liteos_m编译时,需要去/device/soc目录下面寻找东西。这个路径取决于LOSCFG_SOC_COMPANY的定义。

根据经验去kernel/liteos_m下面执行make menuconfig看一下,果然又报错。

root@86cd4274494f:/home/openharmony/kernel/liteos_m# make menuconfig
warning:  (defined at arch/arm/Kconfig:34) defined with type unknown
warning:  (defined at Kconfig:204) defined with type unknown
warning:  (defined at Kconfig:213) defined with type unknown
warning:  (defined at arch/arm/Kconfig:34) defined with type unknown
warning:  (defined at Kconfig:204) defined with type unknown
warning:  (defined at Kconfig:213) defined with type unknown
make: *** [Makefile:113: menuconfig] Error 1

这是因为Kconfig里面要去找/device/soc/*下面的Kconfig文件,来决定soc和board的宏定义。

看了一下原来的soc/st目录,有好几个配置文件,内容有点多,重新开文章继续写吧。

你可能感兴趣的:(学习笔记,MCU,笔记,OpenHarmony)