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目录,有好几个配置文件,内容有点多,重新开文章继续写吧。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt 基础之QDataTime

Qt 基础之QDataTime 引言一、获取(设定)日期和时间二、时间戳三、时间计算 (重载运算符) 引言 QDataTime是Qt框架中用于处理日期和时间的类。它提供了操作和格式化日期、时间和日期时间组合的功能。QDataTime可以用于存储和检索日期和时间、比较日期和时间、对日期和时间执行算…

华为——NGFW Module安装在集群交换机上,二层双机负载分担部署,交换机重定向引流

NGFW Module安装在集群交换机上&#xff0c;二层双机负载分担部署&#xff0c;交换机重定向引流 业务需求 如图1所示&#xff0c;两台交换机集群组网&#xff0c;两块NGFW Module分别安装在两台交换机的1号槽位组成双机负载分担组网。NGFW Module工作在二层&#xff0c;也就是…

FileViewer纯前端预览项目Vue2 demo

FileViewer 项目Vue2 demo 本demo基于vue-clijsvue2.x构建&#xff0c;如果您需要vue3版本的demo&#xff0c;请前往main分支。 适用于Vue2 Webpack&#xff0c;本集成方法要求最低Webpack版本为5&#xff0c;也就是Vue Cli Service 5.0.0以上&#xff0c;当然&#xff0c;if…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例5-4 Document

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>Document</title> </head><body> <canvas id"cavsElem" width"400" height"600">您的浏览器不支持Canvas…

flutter module打包成framework引入原生工程

Flutter - 将 Flutter 集成到现有项目&#xff08;iOS - Framework篇&#xff09; 本篇文章大幅参考了 caijinglong 大佬的总结文章&#xff1a; 把flutter作为framework添加到已存在的iOS中[1] 用 Flutter 来开发&#xff0c;从来都不可能是新开的一个纯 Flutter 项目&#xf…

【LVGL源码移植环境搭建】

LVGL源码移植&环境搭建 ■ LVGL源码移植■ 下载LVGL源码■ 修改LVGL文件夹■■■■ 视频链接 Ubuntu模拟器环境建置 ■ LVGL源码移植 ■ 下载LVGL源码 LVGL源码 我们以选择v8.2.0为例&#xff0c;选择8.2.0下载 ■ 修改LVGL文件夹 1.我们只需要关注这5个文件即可&…

java常量和kotlin常量

在java中使用final声明常量在kotlin中使用const val声明常量 常量在编译为字节码后会直接把调用常量的地方直接替换为常量值&#xff0c;示例如下&#xff1a; public class ConstDemo {public static final String NAME "Even";private static final int ID 100…

PythonSSTI漏洞

一&#xff0c;python内置PYC反编译&#xff1a; pyc文件&#xff0c;就是python的代码生成的字节码文件&#xff0c;有些类似于Java中的.class文件&#xff0c;pyc文件可以经过本地python解释器进行运行&#xff0c;从而实现跨平台。 也就是说我们得到了.pyc文件&#xff0c;就…

Selenium 隐藏浏览器指纹特征的几种方式

我们使用 Selenium 对网页进行爬虫时&#xff0c;如果不做任何处理直接进行爬取&#xff0c;会导致很多特征是暴露的 对一些做了反爬的网站&#xff0c;做了特征检测&#xff0c;用来阻止一些恶意爬虫 本篇文章将介绍几种常用的隐藏浏览器指纹特征的方式 1. 直接爬取 目标对…

vector的相关概念及常用接口

vector的基本概念 功能&#xff1a; vector容器与数组非常类似&#xff0c;也称单端数组&#xff08;动态数组&#xff09; vector容器的内部结构图示&#xff1a; vector与普通数组之间的区别&#xff1a; vector可以动态扩展&#xff0c;而普通数组是静态空间&#xff0c…

STM32——ADC

STM32——ADC 1.ADC介绍 ADC是什么&#xff1f; 全称&#xff1a;Analog-to-Digital Converter&#xff0c;指模拟/数字转换器! ADC性能指标 量程&#xff1a;能测量的电压范围分辨率&#xff1a;ADC能辨别的最小模拟量&#xff0c;通常以输出二进制数的位数表示&#xf…

openGauss学习笔记-211 openGauss 数据库运维-高危操作一览表

文章目录 openGauss学习笔记-211 openGauss 数据库运维-高危操作一览表211.1 禁止操作211.2 高危操作 openGauss学习笔记-211 openGauss 数据库运维-高危操作一览表 各项操作请严格遵守指导书操作&#xff0c;同时避免执行如下高危操作。 211.1 禁止操作 表1中描述在产品的操…

python二维高斯热力图绘制简单的思路代码

import numpy as np import matplotlib.pyplot as plt from scipy.ndimage import gaussian_filter import cv2# 生成一个示例图像 image_size 100 image np.zeros((image_size, image_size))# 在图像中心创建一个高亮区域 center_x, center_y image_size // 2, image_size …

visual studio2022专业版安装步骤

目录 一、Visual studio下载二、创建C#项目——Hello World三、专业版秘钥激活 一、Visual studio下载 首先进入下载官网 先下载2022专业版&#xff0c;等等后面还需要选环境 我勾选了以下几个和c#开发有关的&#xff0c;后面缺什么还可以再安装所有以少勾了问题也不大 然后…

互联网加竞赛 基于深度学习的人脸表情识别

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的人脸表情识别 该项目较…

解密数据清洗,SQL中的数据分析

大家好&#xff0c;数据库表中的数据经常会很杂乱。数据可能包含缺失值、重复记录、异常值、不一致的数据输入等&#xff0c;在使用SQL进行分析之前清洗数据是非常重要的。 当学习SQL时&#xff0c;可以随意地创建数据库表&#xff0c;更改它们&#xff0c;根据需要更新和删除…

《游戏-03_2D-开发》

基于《游戏-02_2D-开发》&#xff0c; 继续制作游戏&#xff1a; 首先要做的时切割人物Idle空闲状态下的动画&#xff0c; 在切割之前我们需要创建一个文件夹&#xff0c;用来存放动画控制器AnimatorContoller&#xff0c; 再创建一个人物控制器文件夹用来存放人物控制器&…

uniapp H5 touchstart touchend 切换背景会失效,或者没用

uniapp H5 touchstart touchend 切换背景会失效&#xff0c;或者没用 直接上代码 &#xff08;使用 class 以及 hover-class来设置样式&#xff09; class 设置默认的背景图或者样式 hover-class 来设置按下的背景图 或者样式 抬起 按下 <view class"mp_zoom_siz…

重写Sylar基于协程的服务器(1、日志模块的架构)

重写Sylar基于协程的服务器&#xff08;1、日志模块的架构&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务器&#xff08;1、日志模…

力扣hot100 组合总和 回溯 剪枝 组合

Problem: 39. 组合总和 文章目录 思路复杂度&#x1f496; Code 思路 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) &#x1f496; Code class Solution{List<List<Integer>> res new ArrayList<>();int x;// 全局targetin…