基于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。当前的文件树如下:

arduino 复制代码
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。

scss 复制代码
# 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", # 选择的内核版本
ruby 复制代码
{
    "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,这样就可以确定了需要编译适配了哪个内核的单板。

DD一下: 欢迎大家关注公众号<程序猿百晓生>,可以了解到一下知识点。
erlang 复制代码
1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案) 
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......

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

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

csharp 复制代码
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: 挂载命令
bash 复制代码
{
    "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为例介绍如何配置芯片、开发板、产品解决方案来构建编译。

相关推荐
花先锋队长1 小时前
鸿蒙生态日日新,鸿蒙原生版支付宝下载量突破230万
华为·harmonyos
星之卡比*2 小时前
前端知识点---库和包的概念
前端·harmonyos·鸿蒙
刘大猫262 小时前
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
操作系统·自动化运维·设计
别说我什么都不会3 小时前
使用Multipass编译OpenHarmony工程
操作系统·嵌入式·harmonyos
轻口味5 小时前
【每日学点HarmonyOS Next知识】多继承、swiper容器、事件传递、滚动安全区域、提前加载网络图片
华为·harmonyos·harmonyosnext
别说我什么都不会5 小时前
鸿蒙轻内核M核源码分析系列二一 05 文件系统FatFS
操作系统·嵌入式·harmonyos
Georgewu6 小时前
【HarmonyOS Next】鸿蒙应用故障处理思路详解
前端·vue.js·harmonyos
盖世栗子6 小时前
HarmonyOS中Image组件的缩放模式
harmonyos
蓝天下小溪旁戴着耳机去放羊6 小时前
详解数据传输——零拷贝、direct IO
性能优化·操作系统
银色火焰战车10 小时前
基于编译器特性浅析C++程序性能优化
开发语言·c++·重构·系统架构·操作系统