STM32F407移植OpenHarmony笔记3

news2024/11/13 12:58:22

接上一篇,搭建完环境,找个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目录,有好几个配置文件,内容有点多,重新开文章继续写吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1421956.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis内存设置

通过redis-cli进入Redis命令行 redis权限认证命令&#xff1a;auth 查看redis内存使用情况的命令&#xff1a;info memory 查看最大内存命令&#xff1a;config get maxmemory 设置最大内存命令&#xff1a;config set maxmemory 也可以通过redis.conf配置文件修改最大内存…

腾讯云SDK并发调用优化方案

目录 一、概述 二、 网关的使用 2.1 核心代码 三、腾讯云SDK依赖包的改造 一、概述 此网关主要用于协调腾讯云SDK调用的QPS消耗&#xff0c;使得多个腾讯云用户资源能得到最大限度的利用。避免直接使用腾讯云SDK 时&#xff0c;在较大并发情况下导致接口调用异常。网关的工…

【前端-VUE+TS】Vue3组件化-知识补充(六)

一. 动态组件 比如我们现在想要实现了一个功能&#xff1a; 点击一个tab-bar&#xff0c;切换不同的组件显示&#xff1b; 案例截图 这个案例我们可以通过两种不同的实现思路来实现&#xff1a; 方式一&#xff1a;通过v-if来判断&#xff0c;显示不同的组件&#xff1b;方式二…

Flink中StateBackend(工作状态)与Checkpoint(状态快照)的关系

State Backends 由 Flink 管理的 keyed state 是一种分片的键/值存储&#xff0c;每个 keyed state 的工作副本都保存在负责该键的 taskmanager 本地中。另外&#xff0c;Operator state 也保存在机器节点本地。Flink 定期获取所有状态的快照&#xff0c;并将这些快照复制到持…

力扣349两个数的交集

题目连接&#xff1a;349. 两个数组的交集 - 力扣&#xff08;LeetCode&#xff09; 给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1&#xff1a; 输入&#xff1a; nums1 [1,2,2…

学习嵌入式的第十二天-------二维数组函数的调用和指针的运算

二维数组函数调用 输入设备-------cpu------输出设备 | V 存储器 总线&#xff1a; 总线宽度&#xff1a;32位或64位 &#xff08;1.数据总线2.控制总线3.地址总线&#xff09; 练习&#xff1a; 定义一个二维整型数组&#xff0c;实现一个函数…

风水+起名测算小程序源码系统 带完整的安装代码包以及搭建教程

风水学是中国古老的一门学问&#xff0c;讲究人与自然的和谐&#xff0c;通过调整环境气场来影响人的运势和发展。而起名测算则是根据个人五行属性和命理特点&#xff0c;为其起一个好名字&#xff0c;以助其运势和发展。这两者结合&#xff0c;可以帮助用户更好地了解自己的命…

为什么每天上班明明没做什么体力活,却仍感觉到身体好累?

​为什么每天上班明明没做什么体力活&#xff0c;却仍感觉到身体好累&#xff1f; 在现代社会&#xff0c;许多人在工作中并不需要从事繁重的体力劳动&#xff0c;然而&#xff0c;他们却常常感到身体疲惫不堪。这种情况不仅发生在办公室工作的人群中&#xff0c;也普遍存在于…

前端Web开发

安装flask框架 pip install flask 导入flask模块 from flask import Flask 【可能遇到的问题】 出现了如下警告&#xff1a; WARNING: You are using pip version 21.2.4; however, version 22.0.4 is available.You should consider upgrading via the D:\Python\python…

java 社区资源管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web社区资源管系统是一套完善的java web信息管理系统 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.…

STM32低功耗模式概念

一、低功耗模式介绍 STM32 的低功耗模式有 3 种&#xff1a; 1)睡眠模式&#xff08;CM3 内核停止&#xff0c;外设仍然运行&#xff09; 2)停止模式&#xff08;所有时钟都停止&#xff09; 3)待机模式&#xff08;1.8V 内核电源关闭&#xff09; 在这三种低功耗模式中&#…

CGAL5.4.1 边塌陷算法

目录 1、使用曲面网格的示例 2、使用默认多面体的示例 3、使用丰富多面体的示例 主要对1、使用曲面网格的示例 进行深度研究 CGAL编译与安装CGAL安装到验证到深入_cgal测试代码-CSDN博客 参考资料CGAL 5.4.5 - Triangulated Surface Mesh Simplification: User Manual …

STM32通用定时器、计数器

时间记录&#xff1a;2024/1/30 一、时钟介绍&#xff08;TIM2-TIM5&#xff09; &#xff08;1&#xff09;通用定时器时钟频率介绍 内部时钟AHB为72MHz&#xff0c;经过APB1预分频器2分频变为36MHz&#xff0c;TIMxClk定时器时钟由时钟树可以看出&#xff0c;如果APB1预分…

力扣136、只出现一次的数字(简单)

1 题目描述 图1 题目描述 2 题目解读 在非空整数数组nums中&#xff0c;有一个元素只出现了一次&#xff0c;其余元素均出现两次。要求找出那个只出现一次的元素。 3 解法一&#xff1a;位运算 位运算&#xff0c;是一种非常简便的方法。 3.1 解题思路 异或运算&#xff0c;有…

PHP抽奖设置中奖率,以及防高并发

一、中奖率,先在后台设定好奖项名称,抽奖份数,以及中奖百分比 奖品表draw 二、 借助文件排他锁,在处理下单请求的时候,用flock锁定一个文件,如果锁定失败说明有其他订单正在处理,此时要么等待要么直接提示用户"服务器繁忙" 阻塞(等待)模式,一般都是用这个模…

如何开通GitHub Copilot

GitHub Copilot 是由GitHub 和OpenAI共同开发的人工智能代码辅助工具&#xff0c;可以自动地生成高质量代码片段、上下文信息等。 通过自然语言处理和机器学习技术&#xff0c;能够通过分析程序员编写的代码、注释和上下文信息&#xff0c;自动生成代码&#xff0c;减轻程序员的…

Centos 7.9 在线安装 VirtualBox 7.0

1 访问 Linux_Downloads – Oracle VM VirtualBox 2 点击 ​the Oracle Linux repo file 复制 内容到 /etc/yum.repos.d/. 3 在 /etc/yum.repos.d/ 目录下新建 virtualbox.repo&#xff0c;复制内容到 virtualbox.repo 并 :wq 保存。 [rootlocalhost centos]# cd /etc/yum.rep…

【js逆向】scrapy基础

目录 一, 爬虫工程化 二, scrapy简介 三, Scrapy工作流程(重点) 四, scrapy安装 4.1 pip 安装 4.2 wheel安装 五, Scrapy实例 六, 自定义数据传输结构item 七, scrapy使用小总结 一, 爬虫工程化 在之前的学习中我们已经掌握了爬虫这门技术需要的大多数的技术点, 但是我…

vue使用json格式化

安装 npm i bin-code-editor -S // Vue2 npm install vue-json-viewer --save 在main.js引用 //引入bin-code-editor相关插件和样式 import CodeEditor from bin-code-editor; import bin-code-editor/lib/styles/index.css; import JsonViewer from vue-json-viewer //vue使用…

【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr

目录 1 -> 引用 1.1 -> 引用概念 1.2 -> 引用特性 1.3 -> 常引用 1.4 -> 使用场景 1.5 -> 传值、传引用效率比较 1.6 -> 值和引用作为返回值类型的性能比较 1.7 -> 引用和指针的区别 2 -> 内联函数 2.1 -> 概念 2.2 -> 特性 3 -…