基于hispark_taurus开发板示例学习OpenHarmony编译构建系统(2)

本文主要是介绍基于hispark_taurus开发板示例学习OpenHarmony编译构建系统(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

3、hispark_taurus产品解决方案-Vendor

产品解决方案为基于开发板的完整产品,主要包含产品对OS的适配、组件拼装配置、启动配置和文件系统配置等。产品解决方案的源码路径规则为:vendor/{产品解决方案厂商}/{产品名称}_。_产品解决方案也是一个特殊的组件。

hispark_taurus对应的产品解决方案目录在vendor\hisilicon\hispark_taurus,主要包含init进程启动配置init_configs(可选,仅linux内核需要)、产品解决方案OS适配hals、产品编译脚本BUILD.gn、产品配置文件config.json、文件系统打包配置fs.yml、hb构建配置文件ohos.build、内核特性裁剪配置文件kernel_configs。当前的文件树如下:

vendor\hisilicon\hispark_taurus├── BUILD.gn├── config.json├── fs.yml├── hals├── hdf_config├── init_configs├── kernel_configs│   ├── debug.config│   ├── debug_tee.config│   ├── release.config│   └── release_tee.config└── ohos.build

3.1 产品编译脚本BUILD.gn

产品编译的入口,主要用于编译解决方案厂商源码和拷贝启动配置文件。如果某个产品被选择为要编译的产品,那么对应产品目录下的BUILD.gn会默认编译。文件vendor\hisilicon\hispark_taurus\BUILD.gn的内容如下。group[ target名称hispark_taurus需要为所在目录的名称。
文件中依赖init_configs目录下BUILD.gn里定义的targets。

# Copyright (C) 2020 Hisilicon (Shanghai) Technologies Co., Ltd. All rights reserved.group("hispark_taurus") {deps = ["init_configs:init_configs","init_configs:init_configs_mksh",]
}

3.2 产品配置文件config.json

config.json为编译构建的主入口,包含了开发板、OS组件和内核等配置信息。文件vendor\hisilicon\hispark_taurus\config.json的内容如下。

  • “product_name”: “ipcamera”, # 产品名称,h b set时会显示这个名称
  • “version”: “3.0”, # config.json的版本号, 固定"3.0"
  • “type”: “small”, # 系统类型, 可选[mini, small, standard]
  • “ohos_version”: “OpenHarmony 1.0”, # 选择的OS版本
  • “device_company”: “hisilicon”, # 芯片厂商
  • “board”: “hispark_taurus”, # 开发板名称
  • “kernel_type”: “liteos_a”, # 选择的内核类型
  • “kernel_version”: “3.0.0”, # 选择的内核版本
{"product_name": "ipcamera_hispark_taurus","version": "3.0","type": "mini","ohos_version": "OpenHarmony 1.0","device_company": "hisilicon","board": "hispark_taurus","kernel_type": "liteos_a","kernel_version": "","subsystems": [{"subsystem": "aafwk","components": [{ "component": "aafwk_lite", "features":[ "enable_ohos_appexecfwk_feature_ability = true" ] }]},{"subsystem": "applications","components": [{ "component": "camera_sample_app", "features":[] },{ "component": "camera_sample_ai", "features":[] },{ "component": "camera_screensaver_app", "features":[] }]},......],"third_party_dir": "//third_party","product_adapter_dir": "//vendor/hisilicon/hispark_taurus/hals"}

介绍下产品配置文件和开发板配置文件的关系。当执行hb set,输入项目根目录并且回车后,遍历所有vendor/<product_company>/<product_name>目录下的config.json,给出可选产品编译选项。config.json的product_name用于显示产品名,device_company和board用于关联出device/board/<device_company>/目录,并且匹配<any_dir_name>/config.gni文件。如果能够匹配多个文件,表示该单板适配了多个内核,那么可以根据config.json的kernel_type和kernel_version来唯一匹配config.gni的kernel_type和kernel_version,这样就可以确定了需要编译适配了哪个内核的单板。

3.3 文件系统打包配置fs.yml

fs.yml是可选的,对于没有文件系统的设备可不配置。该文件用于配置文件系统镜像制作过程,将编译产物打包成文件系统镜像,比如用户态根文件系统rootfs.img和可读写的userfs.img。它由多个列表组成,每个列表对应一个文件系统。字段说明如下:

fs_dir_name: 必填,声明文件系统文件名, 如rootfs、userfs
fs_dirs:     选填,配置out下文件目录与文件系统文件目录的映射关系,每个文件目录对应一个列表
source_dir:  选填,out下目标文件目录,若缺失则将根据target_dir在文件系统下创建空目录
target_dir:  必填,文件系统下对应文件目录
ignore_files:选填,声明拷贝忽略文件
dir_mode:    选填,文件目录权限,默认755
file_mode:   选填,该文件目录下所有文件的权限,默认555
fs_filemode: 选填,配置需要特殊声明权限的文件,每个文件对应一个列表
file_dir:    必填,文件系统下具体文件路径
file_mode:   必填,文件权限声明
fs_symlink:  选填,配置文件系统软连接
fs_make_cmd: 必填,配置需要制作文件系统脚本,OS提供的脚本在build/lite/make_rootfs下, 支持linux,liteos内核和ext4、jffs2、vfat格式。也支持芯片解决方案厂商自定义。
fs_attr:     选填,根据配置项动态调整文件系统

其中fs_symlink、fs_make_cmd字段支持以下变量:

对于hispark_taurus产品解决方案,可以自行阅读查看vendor\hisilicon\hispark_taurus\fs.yml文件。

3.4 init进程启动配置init_configs

init进程启动服务的配置文件,当前支持解析的命令有:

  • start: 启动某个服务
  • mkdir: 创建文件夹
  • chmod: 修改指定路径/文件的权限
  • chown: 修改指定路径/文件的属组
  • mount: 挂载命令
{"jobs" : [{                                                     # job数组,一个job对应一个命令集合。job的执行顺序:pre-init -> init -> post-init。"name" : "pre-init","cmds" : ["mkdir /storage/data",                              # 创建目录"chmod 0755 /storage/data",                         # 修改权限,权限值的格式为0xxx, 如0755"mkdir /storage/data/log","chmod 0755 /storage/data/log","chown 4 4 /storage/data/log",                      # 修改属组,第一个数字为uid, 第二个数字为gid......"mount vfat /dev/mmcblock0 /sdcard rw,umask=000"    # 挂载,格式为: mount [文件系统类型] [source] [target] [flags] [data]# 其中flags仅支持:nodev、noexec、nosuid和rdonly]}, {"name" : "init","cmds" : [                                              # 按cmds数组顺序启动启动服务"start shell",                                      # 注意:start与服务名称之间有且只有一个空格......"start service1"]}, {"name" : "post-init",                                   # 最后执行的job, init进程启动完成后的处理(如驱动初始化后再mount设备)"cmds" : []}],"services" : [{                                                 # service数组,一个service对应一个进程"name" : "shell",                                       # 服务名称"path" : ["/sbin/getty", "-n", "-l", "/bin/sh", "-L", "115200", "ttyS000", "vt100"],    # 可执行文件全路径,path必须为第一个元素"uid" : 0,                                              # 进程的uid,须与二进制文件的uid保持一致"gid" : 0,                                              # 进程的gid,须与二进制文件的gid保持一致"once" : 0,                                             # 是否为一次性进程,1:进程退出后,init不在重新拉起。0:常驻进程,进程若退出,init将重新拉起"importance" : 0,                                       # 是否为关键进程,1:是关键进程,若进程退出,init将会重启单板。0:非关键进程,若进程退出,init不会重启单板"caps" : [4294967295]}, ......]
}

小结

本文先简单介绍了hb编译构建工具,然后分别以开发板hispark_taurus为例介绍如何配置芯片、开发板、产品解决方案来构建编译。

如果大家想更加深入的学习 OpenHarmony 开发的内容,不妨可以参考以下相关学习文档进行学习,助你快速提升自己:

OpenHarmony 开发环境搭建:https://qr18.cn/CgxrRy

《OpenHarmony源码解析》:https://qr18.cn/CgxrRy

  • 搭建开发环境
  • Windows 开发环境的搭建
  • Ubuntu 开发环境搭建
  • Linux 与 Windows 之间的文件共享
  • ……

系统架构分析:https://qr18.cn/CgxrRy

  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ……

OpenHarmony 设备开发学习手册:https://qr18.cn/CgxrRy

在这里插入图片描述

OpenHarmony面试题(内含参考答案):https://qr18.cn/CgxrRy

写在最后

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
  • 想要获取更多完整鸿蒙最新学习资源,请移步前往小编:https://qr21.cn/FV7h05

这篇关于基于hispark_taurus开发板示例学习OpenHarmony编译构建系统(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062292

相关文章

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

SQL Server 中的 WITH (NOLOCK) 示例详解

《SQLServer中的WITH(NOLOCK)示例详解》SQLServer中的WITH(NOLOCK)是一种表提示,等同于READUNCOMMITTED隔离级别,允许查询在不获取共享锁的情... 目录SQL Server 中的 WITH (NOLOCK) 详解一、WITH (NOLOCK) 的本质二、工作

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

MySQL CTE (Common Table Expressions)示例全解析

《MySQLCTE(CommonTableExpressions)示例全解析》MySQL8.0引入CTE,支持递归查询,可创建临时命名结果集,提升复杂查询的可读性与维护性,适用于层次结构数据处... 目录基本语法CTE 主要特点非递归 CTE简单 CTE 示例多 CTE 示例递归 CTE基本递归 CTE 结

Spring AI使用tool Calling和MCP的示例详解

《SpringAI使用toolCalling和MCP的示例详解》SpringAI1.0.0.M6引入ToolCalling与MCP协议,提升AI与工具交互的扩展性与标准化,支持信息检索、行动执行等... 目录深入探索 Spring AI聊天接口示例Function CallingMCPSTDIOSSE结束语

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em