海王星(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中,并忽略测试bin
      source_dir: bin
      target_dir: bin
      ignore_files:
        - Test.bin
        - TestSuite.bin
    -
      # 将编译生成的out/my_board/my_product/libs目录下的文件拷贝到rootfs/lib中,忽略所有.a文件,并设置文件和文件夹的权限为644和755
      source_dir: libs
      target_dir: lib
      ignore_files:
        - .a
      dir_mode: 755
      file_mode: 644
    -
      source_dir: usr/lib
      target_dir: usr/lib
      ignore_files:
        - .a
      dir_mode: 755
      file_mode: 644
    -
      source_dir: config
      target_dir: etc
    -
      source_dir: system
      target_dir: system
    -
      source_dir: sbin
      target_dir: sbin
    -
      source_dir: usr/bin
      target_dir: usr/bin
    -
      source_dir: usr/sbin
      target_dir: usr/sbin
    -
      # 创建一个proc空目录
      target_dir: proc
    -
      target_dir: mnt
    -
      target_dir: opt
    -
      target_dir: tmp
    -
      target_dir: var
    -
      target_dir: sys
    -
      source_dir: etc
      target_dir: etc
    -
      source_dir: vendor
      target_dir: vendor
    -
      target_dir: storage

  fs_filemode:
    -
      file_dir: lib/ld-uClibc-0.9.33.2.so
      file_mode: 555
    -
      file_dir: lib/ld-2.24.so
      file_mode: 555
    -
      file_dir: etc/init.cfg
      file_mode: 400
  fs_symlink:
    -
      # 在rootfs/lib下创建软连接ld-musl-arm.so.1 -> libc.so
      source: libc.so
      link_name: ${fs_dir}/lib/ld-musl-arm.so.1
    -
      source: mksh
      link_name: ${fs_dir}/bin/sh
    -
      source: mksh
      link_name: ${fs_dir}/bin/shell
  fs_make_cmd:
    # 使用脚本将rootfs制作为ext4格式的image
    - ${root_path}/build/lite/make_rootfs/rootfsimg_linux.sh ${fs_dir} ext4
-
  fs_dir_name: userfs
  fs_dirs:
    -
      source_dir: storage/etc
      target_dir: etc
    -
      source_dir: data
      target_dir: data
  fs_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


## 最后

随着鸿蒙开发越来越火热,我了解到现在有很多小伙伴想入行鸿蒙,但又不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。我给大家整理了一份实用的鸿蒙(Harmony OS)开发学习手册资料用来跟着学习是非常有利于帮助大家提升鸿蒙开发技术的。

相对于网上那些碎片化的知识内容,这份学习资料的知识点更加系统化,更容易理解和记忆。资料包含了、应用开发导读(ArkTS)、HarmonyOS 概念、如何快速入门、开发基础知识、基于ArkTS 开发、等鸿蒙开发必掌握的核心知识要点,内容包含了(技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

通过这份资料,你将能够系统地学习鸿蒙开发的核心技术,避免在学习的过程中走弯路、浪费时间。相信在不久的将来,你将成为鸿蒙开发领域的佼佼者,为鸿蒙生态的繁荣发展贡献自己的力量。




- **鸿蒙学习路线图**:为您提供一个清晰的鸿蒙学习规划,助您高效掌握关键知识点。




![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0b5c7e0e3d724cc28faf450642facafb.png)


有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的《鸿蒙开发学习笔记》,内容包含ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

【有需要的朋友,可以扫描下方二维码免费领取!!!】

<img src="https://img-blog.csdnimg.cn/img_convert/f5bbc64c963eb17883ecc7805e2a9cc6.jpeg" style="margin: auto" />

## 《鸿蒙(HarmonyOS)开发学习指南》

**第一章 快速入门**

1、开发准备

2、构建第一个ArkTS应用(Stage模型)

3、构建第一个ArkTS应用(FA模型)

4、构建第一个JS应用(FA模型)

5、........




![图片](https://img-blog.csdnimg.cn/img_convert/de7f75b5927a38379877a1a18f5b57b8.png)

**第二章 开发基础知识**

1、应用程序包基础知识

2、应用配置文件(Stage模型)

3、应用配置文件概述(FA模型)

4、.......




![图片](https://img-blog.csdnimg.cn/img_convert/0b2427b1fa22661e5a433d44b8dd6fa4.png)

**第三章** **资源分类与访问**

1、 资源分类与访问

2、 创建资源目录和资源文件

3、 资源访问

4、.......



![图片](https://img-blog.csdnimg.cn/img_convert/30d0c7f650213330448e7dcfca35e43f.png)

**第四章 学习ArkTs语言**

1、初识ArkTS语言

2、基本语法

3、状态管理

4、其他状态管理

5、渲染控制

6、......



![图片](https://img-blog.csdnimg.cn/img_convert/ea69a731eb2124f84230ac191789798c.png)











**第五章 UI开发**

1.方舟开发框架(ArkUI)概述

2.基于ArkTS声明式开发范式

3.兼容JS的类Web开发范式

4.......



![图片](https://img-blog.csdnimg.cn/img_convert/272d51d930e34246718c80c0748a8975.png)

**第六章 Web开发**

1.Web组件概述

2.使用Web组件加载页面

3.设置基本属性和事件

4.在应用中使用前端页面JavaScript

5.ArkTS语言基础类库概述

6.并发

7.......





![图片](https://img-blog.csdnimg.cn/img_convert/f10e1e2f8969c21cd57e65a8d9ae02fb.png)

11.网络与连接

12.电话服务

13.数据管理

14.文件管理

15.后台任务管理

16.设备管理

17......



![图片](https://img-blog.csdnimg.cn/img_convert/b5644efdc093c0c10524840a03a3c1fe.png)

**第七章 应用模型**

1.应用模型概述

2.Stage模型开发指导

3.FA模型开发指导

4.......



![图片](https://img-blog.csdnimg.cn/img_convert/e5be07ce9705f10c9a0113ba607c0891.png)

扫描下方二维码免费领取,《鸿蒙(HarmonyOS)开发学习指南》



  • 26
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值