STM32F407移植OpenHarmony笔记3

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

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

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

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

参考文档: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: <choice> (defined at arch/arm/Kconfig:34) defined with type unknown
warning: <choice> (defined at Kconfig:204) defined with type unknown
warning: <choice> (defined at Kconfig:213) defined with type unknown
warning: <choice> (defined at arch/arm/Kconfig:34) defined with type unknown
warning: <choice> (defined at Kconfig:204) defined with type unknown
warning: <choice> (defined at Kconfig:213) defined with type unknown
make: *** [Makefile:113: menuconfig] Error 1

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

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

相关推荐

  1. STM32F407移植OpenHarmony笔记2

    2024-01-30 17:50:01       35 阅读
  2. STM32F407移植OpenHarmony笔记5

    2024-01-30 17:50:01       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-30 17:50:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-30 17:50:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-30 17:50:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-30 17:50:01       20 阅读

热门阅读

  1. GBASE南大通用分享-mysql中的load data infile用法

    2024-01-30 17:50:01       32 阅读
  2. 低功耗蓝牙(BLE)服务的组成

    2024-01-30 17:50:01       36 阅读
  3. SVG 字体 – SVG 常用样式(17)

    2024-01-30 17:50:01       32 阅读
  4. 【AI】【GPT】如何用苹果Gift卡充值GPT Plug

    2024-01-30 17:50:01       40 阅读
  5. 面试经典 150 题 ---- 删除排序数组中的重复项 II

    2024-01-30 17:50:01       37 阅读
  6. 业务逐字稿

    2024-01-30 17:50:01       35 阅读
  7. mysql 各种常见的锁

    2024-01-30 17:50:01       25 阅读
  8. 防抖函数,节流函数

    2024-01-30 17:50:01       34 阅读
  9. 数据结构——队列链式存储实现

    2024-01-30 17:50:01       43 阅读
  10. TextCNN的复现

    2024-01-30 17:50:01       39 阅读
  11. SHELL编程-Linux自动化运维基础(循环与数组)

    2024-01-30 17:50:01       32 阅读
  12. Vue学习笔记之侦听器

    2024-01-30 17:50:01       36 阅读