<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙OpenHarmony開發板:【產品配置規則】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-05-09 10:32 ? 次閱讀

產品配置規則

產品解決方案為基于開發板的完整產品,主要包含產品對OS的適配、部件拼裝配置、啟動配置和文件系統配置等。產品解決方案的源碼路徑規則為:vendor/{產品解決方案廠商}/{產品名稱} _。

產品解決方案的目錄樹規則如下:

vendor                              
└── company                         # 產品解決方案廠商
    ├── product                     # 產品名稱
    │   ├── init_configs
    │   │     ├── etc               # init進程啟動配置(可選,僅linux內核需要)
    │   │     └── init.cfg          # 系統服務啟動配置
    │   ├── hals                    # 產品解決方案OS適配
    │   ├── BUILD.gn                # 產品編譯腳本
    │   └── config.json             # 產品配置文件
    │   └── fs.yml                  # 文件系統打包配置
    └── ......

icon-note.gif注意 :新增產品須按如上的規則創建目錄和文件,編譯構建系統將按該規則掃描已配置的產品。
開發前請熟悉鴻蒙開發指導文檔:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]點擊或者復制轉到。
關鍵的目錄和文件詳細介紹如下:

  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]
            }, 
            ......
        ]
    }
    
  3. vendor/company/product/init_configs/hals 解決方案廠商對OS的適配,需要實現的接口請見各個部件的readme說明文檔。

  4. 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" ] }   # 選擇的部件和部件特性配置
             ]
           },
           {
            ......
           }
          ......
          更多子系統和部件
         }
     }
    
  5. 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_symlink、fs_make_cmd字段支持以下變量:

    • rootpath代碼根目錄,對應gn的{ohos_root_path}
    • outpath產品out目錄,對應gn的{root_out_dir}
    • ${fs_dir} 文件系統目錄,由以下變量拼接而成
    • ${root_path}
    • ${fs_dir_name}

icon-note.gif注意 :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
    
  2. 拼裝產品 在新建的產品目錄下新建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":[] }  # 選擇的部件和部件特性
            ]
          },
          ...
          {
             更多子系統和部件
          }
        ]
    }
    

    icon-note.gif注意 :編譯構建系統編譯前會對device_company,board,kernel_type,kernel_version、subsystem、component字段進行有效性檢查,其中device_company,board,kernel_type,kernel_version應與已知的芯片解決方案匹配,subsystem、component應與build/lite/components下的部件描述匹配。

  3. 適配OS接口 在產品目錄下創建hals目錄,并將產品解決方案對OS適配的源碼和編譯腳本放入該目錄下。

  4. 配置系統服務 在產品目錄下創建init_configs目錄,并在init_configs目錄下創建init.cfg文件,按需配置要啟動的系統服務。

  5. 配置init進程(僅linux內核需要) 在init_configs目錄下創建etc目錄,然后在etc下創建init.d文件夾和fstab文件。最后按產品需求在init.d文件下創建并編輯rcS文件和Sxxx文件。

  6. 配置文件系統鏡像(可選,僅支持文件系統的開發板需要) 在產品目錄下創建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
    
  7. 配置產品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
    
  8. 編寫編譯腳本 在產品目錄下創建BUILD.gn文件,按產品實際情況編寫腳本。以步驟1中的wifiiot為例,BUILD.gn示例如下:

    group("wifiiot") {             # target名稱與產品名一致
      deps = []
      deps += [ "init_configs" ]   # 拷貝init配置
      deps += [ "hals" ]           # 將hals加入編譯
      ......                       # 其他
    }
    
    `HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`
    

搜狗高速瀏覽器截圖20240326151547.png

  1. 編譯產品。 主要有兩種編譯方式,[命令行方式和hb方式],這里以命令行方式為例,假設編譯的產品名是hispark_taurus_standard,則編譯命令是:
    ./build.sh --product-name hispark_taurus_standard --ccache
    

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 開發板
    +關注

    關注

    25

    文章

    4560

    瀏覽量

    94861
  • 鴻蒙
    +關注

    關注

    55

    文章

    1919

    瀏覽量

    42195
  • OpenHarmony
    +關注

    關注

    24

    文章

    3442

    瀏覽量

    15286
收藏 人收藏

    評論

    相關推薦

    鴻蒙OpenHarmony開發板解析:【Rust模塊配置規則和指導】

    Rust是一門靜態強類型語言,具有更安全的內存管理、更好的運行性能、原生支持多線程開發等優勢。Rust官方也使用Cargo工具來專門為Rust代碼創建工程和構建編譯。 OpenHarmony為了集成
    的頭像 發表于 05-10 11:32 ?743次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OpenHarmony</b><b class='flag-5'>開發板</b>解析:【Rust模塊<b class='flag-5'>配置</b><b class='flag-5'>規則</b>和指導】

    鴻蒙開發板試用】HiSpark Wi-Fi IoT 鴻蒙開發板 試用活動名單公布

    ``開發板來了~抱歉讓大家久等了~ 經過10天的申請,截止今天一共有399位開發者提交了HiSpark Wi-Fi IoT 鴻蒙開發板試用申請。試用鏈接:https
    發表于 09-21 19:57

    美女產品經理視角玩轉鴻蒙開發板

    美女產品經理視角玩轉鴻蒙開發板——羅楚(深開鴻鴻蒙生態業務部資深產品專家)
    發表于 11-02 15:06

    XR806芯片、XR806開源鴻蒙開發板簡介

    ??蓮V泛滿足 智能家居、智慧樓宇、工業互聯、兒童玩具、電子競賽、極客DIY 等領域的無線連接需求。芯片框圖芯片參數XR806開源鴻蒙開發板介紹XR806開發板是基于XR806芯片設計開發
    發表于 11-15 17:08

    XR806芯片、XR806開源鴻蒙開發板簡介

    ??蓮V泛滿足 智能家居、智慧樓宇、工業互聯、兒童玩具、電子競賽、極客DIY 等領域的無線連接需求。芯片框圖芯片參數XR806開源鴻蒙開發板介紹XR806開發板是基于XR806芯片設計開發
    發表于 11-15 18:32

    基于OpenHarmony應用開發的簽名配置

    開發OpenHarmony應用的第一步就是配置環境,如果你需要使用開發板(真機)進行調試,那就免不了配置簽名信息,本文詳細介紹了基于
    發表于 03-11 15:32

    鴻蒙openharmony刷到RK3566開發板上的步驟

    開發板可以控制更多的硬件,通過軟硬結合得方式更好得體驗鴻蒙。本文介紹的是如何把鴻蒙openharmony刷到瑞芯微RK3566開發板上。網上
    發表于 03-15 14:36

    軟通動力OpenHarmony啟鴻開發板搭配鴻蒙智能編程平臺助力青少年編程學習

    啟鴻開發板,是一款基于海思3861L芯片和OpenHarmony開發板,兼容micro:bit生態的國產編程學習開發板;它尺寸小易收納,同時集成多種傳感器,金手指的設計拓展豐富,支持
    發表于 05-18 15:48

    RK3568開發板鴻蒙OpenHarmony系統固件燒寫步驟

    ”)的壓縮包到 Windows 的任意路徑,然后解壓壓縮包會得到 RKDevTool_release_v2.84 文件夾  2 拷貝鴻蒙鏡像到燒寫器中,鴻蒙鏡像網盤下載地址為“iTOP-3568 開發板
    發表于 07-15 16:15

    OpenHarmony 致遠開發板開發指南

    、在線教育等諸多行業需求?!爸逻h”開發板外觀圖如圖1所示:圖1:致遠開發板外觀圖致遠開發板開發指南本文檔用來指導開發者在致遠
    發表于 07-21 11:03

    每日推薦 | 鴻蒙IPC開發板免費試用,OpenHarmony內核對象隊列算法詳解

    HiSpark IPC DIY Camera開發板免費試用啦,想要申請的小伙伴看過來啦!推薦理由:各位開發者看過來了,還沒有試用過這塊鴻蒙IPC開發板
    發表于 08-10 10:26

    迅為RK3568開發板鴻蒙OpenHarmony系統固件燒寫步驟

    1、迅為RK3568開發板鴻蒙OpenHarmony系統固件燒寫首先拷貝燒寫器(燒寫器在光盤資料“iTOP-3568 開發板\01_【iTOP-RK3568
    發表于 08-26 17:45

    【軟通動力鴻湖萬聯揚帆系列“競”開發板試用體驗】鴻湖萬聯揚帆系列“競”開發板試用測評報告一初識鴻蒙系統

    鴻蒙操作系統的內容,但細心觀察會發現,我們拿到的鴻蒙開發板的系統叫 OpenHarmong,那么這個OpenHarMony 和HarMony 是什么關系呢?經過一番查詢資料,大概了解
    發表于 09-18 23:29

    【觸覺智能 Purple Pi OH 開發板體驗】一、OpenHarmony鴻蒙系統)開發環境配置以及示例代碼

    不同HarmonyOS 支持 previewer 預覽、模擬器運行、真機運行三種方式;OpenHarmony 支持 previewer 預覽、真機(目前主要使用 3516 系列開發板)運行。首先,目前
    發表于 08-31 11:03

    鴻蒙OpenHarmony開發板:【子系統配置規則

    通過build倉下的subsystem_config.json可以查看所有子系統的配置規則。
    的頭像 發表于 05-08 22:07 ?84次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OpenHarmony</b><b class='flag-5'>開發板</b>:【子系統<b class='flag-5'>配置</b><b class='flag-5'>規則</b>】
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>