海王星(Neptune)系列和大禹(DAYU)系列OpenHarmony智能硬件配置解决方案

海王星(Neptune)系列和大禹(DAYU)系列OpenHarmony智能硬件对OS的适配、部件拼装配置、启动配置和文件系统配置等。产品解决方案的源码路径规则为:vendor/{产品解决方案厂商}/{产品名称}_。

解决方案的目录树规则如下:

vendor                              
└── company                         # 产品解决方案厂商├── product                     # 产品名称│   ├── init_configs│   │     ├── etc               # init进程启动配置(可选,仅linux内核需要)│   │     └── init.cfg          # 系统服务启动配置│   ├── hals                    # 产品解决方案OS适配│   ├── BUILD.gn                # 产品编译脚本│   └── config.json             # 产品配置文件│   └── fs.yml                  # 文件系统打包配置└── ......

注意:新增产品须按如上的规则创建目录和文件,编译构建系统将按该规则扫描已配置的产品。

关键的目录和文件详细介绍如下:

  1. vendor/company/product/init_configs/etc 该文件夹中包含rcS脚本,Sxxx脚本和fstab脚本。init进程在启动系统服务之前执行这些脚本。执行的流程为“rcS->fstab->S00-xxx“。Sxxx脚本中的内容与开发板和产品需要有关,主要包括设备节点的创建、创建目录、扫描设备节点、修改文件权限等等。这些文件在产品编译的BUILD.gn中按需拷贝到产品out目录中,最终打包到rootfs镜像中。

  2. vendor/company/product/init_configs/init.cfg 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]}, ......]
}
  1. vendor/company/product/init_configs/hals 解决方案厂商对OS的适配,需要实现的接口请见各个部件的readme说明文档。

  2. vendor/company/product/config.json config.json为编译构建的主入口,包含了开发板、OS部件和内核等配置信息。

    以基于hispark_taurus开发板的ipcamera产品为例,配置文件如下:

{"product_name": "ipcamera",                       # 产品名称"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",                        # 选择的内核版本"subsystems": [                            {"subsystem": "aafwk",                         # 选择的子系统"components": [{ "component": "ability", "features":[ "enable_ohos_appexecfwk_feature_ability = true" ] }   # 选择的部件和部件特性配置]},{......}......更多子系统和部件}}
  1. vendor/company/product/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.yml是可选的,对于没有文件系统的设备可不配置。

  1. vendor/company/product/BUILD.gn 产品编译的入口,主要用于编译解决方案厂商源码和拷贝启动配置文件。如果某个产品被选择为要编译的产品,那么对应产品目录下的BUILD.gn会默认编译。一个典型的产品编译BUILD.gn应该如下:
group("product") {               # target名称需与product名称即三级目录名称一致deps = []deps += [ "init_configs" ]     # 拷贝init配置......                         # 其他
}

新增并编译产品

编译构建支持芯片解决方案和部件的灵活拼装,形成定制化的产品解决方案。具体步骤如下:

  1. 创建产品目录 按照产品配置规则创建产品目录,以基于“rtl8720“开发板的wifiiot模组为例,在代码根目录执行:
mkdir -p vendor/my_company/wifiiot
  1. 拼装产品 在新建的产品目录下新建config.json文件,以步骤1中的wifiiot为例,vendor/my_company/wifiiot/config.json可以是:
{"product_name": "wifiiot",                        # 产品名称"version": "3.0",                                 # config.json的版本号, 固定"3.0""type": "small",                                  # 系统类型, 可选[mini, small, standard]"ohos_version": "OpenHarmony 1.0",                # 使用的OS版本"device_company": "realtek",                      # 芯片解决方案厂商名称"board": "rtl8720",                               # 开发板名称"kernel_type": "liteos_m",                        # 选择的内核类型"kernel_version": "3.0.0",                        # 选择的内核版本"subsystems": [                            {"subsystem": "kernel",                        # 选择的子系统"components": [{ "component": "liteos_m", "features":[] }  # 选择的部件和部件特性]},...{更多子系统和部件}]
}

注意:编译构建系统编译前会对device_company,board,kernel_type,kernel_version、subsystem、component字段进行有效性检查,其中device_company,board,kernel_type,kernel_version应与已知的芯片解决方案匹配,subsystem、component应与build/lite/components下的部件描述匹配。

  1. 适配OS接口 在产品目录下创建hals目录,并将产品解决方案对OS适配的源码和编译脚本放入该目录下。

  2. 配置系统服务 在产品目录下创建init_configs目录,并在init_configs目录下创建init.cfg文件,按需配置要启动的系统服务。

  3. 配置init进程(仅linux内核需要) 在init_configs目录下创建etc目录,然后在etc下创建init.d文件夹和fstab文件。最后按产品需求在init.d文件下创建并编辑rcS文件和Sxxx文件。

  4. 配置文件系统镜像(可选,仅支持文件系统的开发板需要) 在产品目录下创建fs.yml文件。fs.yml需按产品实际情况配置,一个典型的fs.yml文件如下:

-fs_dir_name: rootfs # 镜像的名称fs_dirs:-# 将编译生成的out/my_board/my_product/bin目录下的文件拷贝到rootfs/bin中,并忽略测试binsource_dir: bintarget_dir: binignore_files:- Test.bin- TestSuite.bin-# 将编译生成的out/my_board/my_product/libs目录下的文件拷贝到rootfs/lib中,忽略所有.a文件,并设置文件和文件夹的权限为644和755source_dir: libstarget_dir: libignore_files:- .adir_mode: 755file_mode: 644-source_dir: usr/libtarget_dir: usr/libignore_files:- .adir_mode: 755file_mode: 644-source_dir: configtarget_dir: etc-source_dir: systemtarget_dir: system-source_dir: sbintarget_dir: sbin-source_dir: usr/bintarget_dir: usr/bin-source_dir: usr/sbintarget_dir: usr/sbin-# 创建一个proc空目录target_dir: proc-target_dir: mnt-target_dir: opt-target_dir: tmp-target_dir: var-target_dir: sys-source_dir: etctarget_dir: etc-source_dir: vendortarget_dir: vendor-target_dir: storagefs_filemode:-file_dir: lib/ld-uClibc-0.9.33.2.sofile_mode: 555-file_dir: lib/ld-2.24.sofile_mode: 555-file_dir: etc/init.cfgfile_mode: 400fs_symlink:-# 在rootfs/lib下创建软连接ld-musl-arm.so.1 -> libc.sosource: libc.solink_name: ${fs_dir}/lib/ld-musl-arm.so.1-source: mkshlink_name: ${fs_dir}/bin/sh-source: mkshlink_name: ${fs_dir}/bin/shellfs_make_cmd:# 使用脚本将rootfs制作为ext4格式的image- ${root_path}/build/lite/make_rootfs/rootfsimg_linux.sh ${fs_dir} ext4
-fs_dir_name: userfsfs_dirs:-source_dir: storage/etctarget_dir: etc-source_dir: datatarget_dir: datafs_make_cmd:- ${root_path}/build/lite/make_rootfs/rootfsimg_linux.sh ${fs_dir} ext4
  1. 配置产品Patch(可选,视产品涉及部件是否需要打补丁而定) 在产品目录下创建patch.yml文件。patch.yml需按产品实际情况配置,一个典型的patch.yml文件如下:
  # 需要打patch的路径
foundation/communication/dsoftbus:# 该路径下需要打的patch存放路径- foundation/communication/dsoftbus/1.patch- foundation/communication/dsoftbus/2.patch
third_party/wpa_supplicant:- third_party/wpa_supplicant/1.patch- third_party/wpa_supplicant/2.patch- third_party/wpa_supplicant/3.patch
...

配置完成后,编译时增加–patch参数,即可在产品编译前将配置的Patch文件打到对应目录中,再进行编译:

hb build -f --patch
  1. 编写编译脚本 在产品目录下创建BUILD.gn文件,按产品实际情况编写脚本。以步骤1中的wifiiot为例,BUILD.gn示例如下:
group("wifiiot") {             # target名称与产品名一致deps = []deps += [ "init_configs" ]   # 拷贝init配置deps += [ "hals" ]           # 将hals加入编译......                       # 其他
}
  1. 编译产品。 主要有两种编译方式,命令行方式和hb方式,这里以命令行方式为例,假设编译的产品名是hispark_taurus_standard,则编译命令是:
./build.sh --product-name hispark_taurus_standard --ccache

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:https://qr21.cn/FV7h05

入门必看:https://qr21.cn/FV7h05
1.  应用开发导读(ArkTS)
2.  ……

HarmonyOS 概念:https://qr21.cn/FV7h05

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全

如何快速入门:https://qr21.cn/FV7h05
1.  基本概念
2.  构建第一个ArkTS应用
3.  ……

开发基础知识:https://qr21.cn/FV7h05
1.  应用基础知识
2.  配置文件
3.  应用数据管理
4.  应用安全管理
5.  应用隐私保护
6.  三方应用调用管控机制
7.  资源分类与访问
8.  学习ArkTS语言
9.  ……

基于ArkTS 开发:https://qr21.cn/FV7h05
1.  Ability开发
2.  UI开发
3.  公共事件与通知
4.  窗口管理
5.  媒体
6.  安全
7.  网络与链接
8.  电话服务
9.  数据管理
10.  后台任务(Background Task)管理
11.  设备管理
12.  设备使用信息统计
13.  DFX
14.  国际化开发
15.  折叠屏系列
16.  ……

鸿蒙开发面试真题(含参考答案):https://qr21.cn/FV7h05

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

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

相关文章

推理判断01-程永乐-图形1

课程安排 出题形式 图形推理 1、位置规律 图形题目

首尔之春在线资源最新电影1080p高清

打开下面这个链接就可以看到 首尔之春在线资源最新电影1080p高清 如果链接打不开,就复制下面的网址到浏览器打开 https://www.zhufaka.cn/liebiao/A09504AE3BF8BD06 用阿里云盘下载,下载完成之后,用迅雷播放 首尔之春在线资源最新电影10…

winui开发笔记(五)应用程序图标

应用程序图标、发布者、显示名称大部分都在package.appxmanifest清单文件中,可以正常打开,也可以使用xml文本编辑器打开。 以下是一个正常的应用程序中所有的与图标相关的图片: 但是设置之后会有一圈白,包括在电脑最下边一行&…

HDFS简介与部署以及故障排错(超简单)

文章目录 一、HDFS介绍1、简介2、结构模型3、文件写入过程4、文件读取过程5、文件块的存放6、存储空间管理机制6.1 文件删除和恢复删除6.2 复制因子配置6.3 文件命名空间6.4 数据复制机制 二、环境搭建(单机版)1、修改主机名2、配置ssh免密登录3、Hadoop…

自然语言:信息抽取技术在CRM系统中的应用与成效

一、引言 在当今快速变化的商业环境中,客户关系管理(CRM)已成为企业成功的关键因素。CRM系统的核心在于有效地管理客户信息,跟踪与客户的每一次互动,以及深入分析这些数据以提升客户满意度和忠诚度。在我最近参与的一个…

O2O:Offline–Online Actor–Critic

IEEE TAI 2024 paper 1 Introduction 一篇offline to online 的文章,有效解决迁移过程出现的performance drop。所提出的O2AC算法首先在离线阶段添加一项BC惩罚项,用于限制策略靠近专家策略;而在在线微调阶段,通过动态调整BC的权…

【STM32F103】WDG看门狗

本系列在之前介绍时钟树的文章中有稍微提一下看门狗WDG(Watch Door Dog)。 简单来说,可以当成是一个计数器,一旦这个计数器溢出则单片机复位。因为我们需要每隔一段时间就把这个计数器的值清零(喂狗)。 I…

并发编程并发安全性之Lock锁及原理分析

ReentrantLock 用途:锁是用来解决线程安全问题的 重入锁-> 互斥锁 满足线程的互斥性意味着同一个时刻,只允许一个线程进入到加锁的代码中。多线程环境下,满足线程的顺序访问 锁的设计猜想 一定会涉及到锁的抢占,需要有一个标记来实现互…

C#不可识别的数据库格式解决方法

1.检查数据库文件路径和文件名: 确保指定的路径和文件名拼写正确,而且文件确实存在于指定的位置。使用绝对路径或相对路径都是可行的,但要确保路径的正确性 string connectionString "ProviderMicrosoft.ACE.OLEDB.12.0;Data SourceE:…

数字人解决方案——阿里EMO音频驱动肖像生成能说话能唱歌的逼真视频

前言 数字可以分为3D数字人和2D数字人。3D数字人以虚幻引擎的MetaHuman为代表,而2D数字人则现有的图像或者视频做为输入,然后生成对口型的数字人,比如有SadTalker和Wav2Lip。 SadTalker:SadTalker是一种2D数字人算法,…

Lichee Pi 4A:RISC-V架构的开源硬件之旅

一、简介 Lichee Pi 4A是一款基于RISC-V指令集的强大Linux开发板,它凭借出色的性能和丰富的接口,吸引了众多开发者和爱好者的关注。这款开发板不仅适用于学习和研究RISC-V架构,还可以作为软路由、小型服务器或物联网设备的核心组件。 目录 一…

Java 反射详解:动态创建实例、调用方法和访问字段

“一般情况下,我们在使用某个类之前已经确定它到底是个什么类了,拿到手就直接可以使用 new 关键字来调用构造方法进行初始化,之后使用这个类的对象来进行操作。” Writer writer new Writer(); writer.setName("少年");像上面这个…

Java生成 word报告

Java生成 word报告 一、方案比较二、Apache POI 生成三、FreeMarker 生成 在网上找了好多天将数据库信息导出到 word 中的解决方案,现在将这几天的总结分享一下。总的来说,Java 导出 word 大致有 5 种。 一、方案比较 1. Jacob Jacob 是 Java-COM Bri…

MATLAB的基础二维绘图

1.plot函数 (1)plot函数的基本用法 plot(x,y)其中,x和y分别用于存储x坐标和y坐标数据,通常x和y为长度相同的向量。 例如: x[2.3,3.3,4.3,1];y[1.3,2,1.8,3]plot(x,y) (2)plot(x,y,选项)其中选项包括颜色…

(C语言)sizeof和strlen的对比(详解)

sizeof和strlen的对⽐(详解) 1. sizeof sizeof是用来计算变量所占内存空间大小的, 单位是字节,如果操作数是类型的话,计算的是用类型创建的变量所占空间的大小。 sizeof 只关注占用内存空间的大小 ,不在乎内…

Linux——网络基础

计算机网络背景 网络发展 独立模式: 计算机之间相互独立 在早期的时候,计算机之间是相互独立的,此时如果多个计算机要协同完成某种业务,那么就只能等一台计算机处理完后再将数据传递给下一台计算机,然后下一台计算机再进行相应…

YOLOv9推理详解及部署实现

目录 前言零、YOLOv9简介一、YOLOv9推理(Python)1. YOLOv9预测2. YOLOv9预处理3. YOLOv9后处理4. YOLOv9推理 二、YOLOv9推理(C)1. ONNX导出2. YOLOv9预处理3. YOLOv9后处理4. YOLOv9推理 三、YOLOv9部署1. 源码下载2. 环境配置2.1 配置CMakeLists.txt2.2 配置Makefile 3. ONNX…

软件设计师9--总线/可靠性/性能指标

软件设计师9--总线/可靠性/性能指标 考点1:总线总线的分类例题: 考点2:可靠性系统可靠性分析--可靠性指标串联系统与并联系统N模混合系统例题: 性能指标例题: 考点1:总线 一条总线同一时刻仅允许一个设备发…

Stable Diffusion 模型分享:CG texture light and shadow(CG纹理光影)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 一个拥有cg质感和光影的融合模型,偏2.5D 条目内容类型大模型基础模型SD 1.5来…

HTML+CSS+BootStrap游乐园官网

一、技术栈 支持pc、pad、手机访问,页面自适应!! html5cssbootstrapjs 二、项目截图 接受项目定制,站内联系博主!!!