在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

深入理解OpenHarmony系統啟動 輕松踏上設備軟件開發之旅

OpenAtom OpenHarmony ? 來源:OpenAtom OpenHarmony ? 作者:OpenAtom OpenHarmony ? 2022-08-13 10:31 ? 次閱讀

如何優雅地參與開源貢獻,向頂級開源項目提交PR(Pull Request),跟著大咖30分鐘成為OpenAtom OpenHarmony(簡稱“OpenHarmony”)Contributor。戰“碼”先鋒直播間第五期,邀請華為終端BG OpenHarmony基礎軟件SIG/技術專家Handy為大家分享《OpenHarmony設備啟動過程與模塊化開發實踐》。分享主要分為四個部分:OpenHarmony設備啟動的基本過程,基于qemu平臺的最小系統介紹,init進程的設計理念,以及如何基于qemu進行init的擴展模塊開發。

● 第一部分,是從宏觀上了解OpenHarmony在設備上的啟動引導過程,了解操作系統啟動引導的基本概念和相關術語。

● 第二部分,介紹基于qemu虛擬機平臺的最小系統,如何在不要開發板的情況下進行OpenHarmony標準系統基礎軟件的開發。

● 第三部分,介紹OpenHarmony第一個用戶態進程init的設計理念。

● 第四部分,介紹如何基于qemu虛擬機平臺進行init的模塊化開發。

1. 設備啟動過程

1.1 OS啟動引導技術概述

ec00193e-1a85-11ed-ba43-dac502259ad0.png

在介紹OpenHarmony操作系統啟動引導過程前,Handy老師先回顧了傳統PC行業操作系統的引導過程。上圖是傳統PC硬件和操作系統的大致結構,其中底層的是硬件主板,在主板上板載的firmware將完成主板的自啟;然后掃描存儲設備,包括硬盤、光盤、U盤等;再從存儲設備上識別已安裝的操作系統,最終從這些操作系統上啟動。

在PC環境下,firmware都遵循UEFI標準。UEFI是一個非常復雜的標準,由CPU廠商,PC主板廠商和OS廠商聯合開發,主要包括Win-Tel。該標準詳細定義了固件和操作系統之間的接口,適應了PC硬件的開放式架構,使得不同的操作系統都可以在各個不同廠商的CPU、主板、硬盤、內存上運行。UEFI標準的實現包括EDK2、coreboot、LinuxBoot等。

但在嵌入式系統中,這些標準則相對簡化。因為嵌入式設備不像早期PC一樣可以任意組裝。嵌入式設備就像一體機,SOC、RAM、EMMC、外設以及操作系統等都是在設備出廠時預制好,消費者開箱即用。因此,SOC板載的firmware一般相對簡化,只需要加載到bootloader,操作系統開發人員基本不關心SOC的firmware。

Bootloader是操作系統的直接上游,操作系統需要由Bootloader來加載并運行。在嵌入式系統中,一般都采用uboot。在uboot中可以指定操作系統鏡像在存儲器中的具體位置,這次主要基于u-boot介紹OpenHarmony標準系統的啟動引導過程。

另外還有兩個基本概念:分區表和OS鏡像。分區表是用來把存儲器的存儲區域進行劃分,不同區域存放不同的OS鏡像。

1.2 OpenHarmony啟動引導分區加載過程

ec389dae-1a85-11ed-ba43-dac502259ad0.png

上圖為我們指明了OpenHarmony相關的OS鏡像。u-boot首先加載boot.img和ramdisk.img。boot.img是內核鏡像,ramdisk.img是最早的用戶態進程鏡像,其中就包括init進程。通過這兩個OS鏡像,系統可以啟動到最基本的shell,這里還沒有啟動任何業務。

在ramdisk.img的init進程里,會主動掛載system.img和vendor.img,并掃描其中的啟動配置文件,拉起各個進程。system.img和vendor.img是OpenHarmony中各個子系統編譯后產物的集合。

從上圖右側文字我們可以看到,u-boot和OpenHarmony鏡像啟動時都需要知道分區表信息。分區表信息有多種方式傳遞,一般包括GPT分區表,bootargs分區表。圖中示意的是u-boot通過blkdevparts這個bootargs傳遞給內核。內核會根據這些信息創建對應的block設備。同時還有root這個節點,告知內核從哪里掛載根文件系統,從而啟動init。

ramdisk里的init最重要的幾個事件包括:創建并掛載根文件系統,包括tmpfs、dev節點、procfs等。同時,需要掛載system.img和vendor.img,這兩個是啟動過程的必選分區。當前Release版本里是通過ramdisk.img里的required.fstab文件來配置system、vendor分區的掛載參數;最新master版本還支持通過ohos.required_mount.xxx bootargs參數來提供這些掛載參數;具體參考文檔可以參考《啟動子系統概述》(https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-boot-overview.md)。

ramdisk里的init完成system/vendor的掛載后,就開始進入system/vendor系統中,開始第二階段并發啟動的過程。此時,init會掃描/{system,vendor}/etc/init下的各個啟動配置文件,拉起各個子系統的服務,并最終拉起應用。在分區掛載方面,還有一個重要的配置文件/vendor/etc/fstab.{hardware};這個可以定義更多需要掛載的分區,包括data分區,以及產品擴展的分區。

1.3 OpenHarmony系統進程啟動過程

ec7ac1a2-1a85-11ed-ba43-dac502259ad0.png

隨后,Handy老師為我們介紹了進入OpenHarmony系統后,用戶態進程的啟動概況。從上圖中,我們可以把啟動的進程分為以下幾類:

● UHDF類系統進程UHDF類系統進程為系統提供HDI接口,這類進程為系統服務提供芯片無關的硬件訪問接口。這類進程都通過hdf_devmgr管理。

● SA類系統進程SA是OpenHarmony的基礎系統元能力,每個SA是一個獨立的so,根據配置一個或多個SA可以部署到同一個進程中,我們稱這類進程為SA類系統服務。每個SA類系統服務進程都是通過sa_main進程解析配置文件啟動,向sa_mgr服務注冊支持的SA;訪問SA服務時需要先根據SA的ID向sa_mgr獲取該SA的句柄。

● Linux原生系統服務OpenHarmony除了支持SA類和UHDF類系統進程外,也支持啟動Linux原生的系統進程。通過Linux原生系統服務可以快速使用Linux社區已有的成熟能力。

● 應用進程每個應用進程都是從appspawn孵化而來,appspawn預加載了應用運行時需要的資源,主要是ArkUI相關的依賴庫。

init拉起每個進程的方式都是通過配置文件來完成,其格式都是如下所示的JSON格式;每個進程的配置文件安裝到/system/etc/init或/vendor/etc/init目錄下,init會掃描這些配置,按照配置拉起對應的進程。下面我們將結合qemu最小系統來介紹下init的詳細設計。

{   "services" : [{           "name" : "watchdog_service",           "start-mode" : "condition",           "path" : ["/system/bin/watchdog_service", "10", "2"],           "disabled" : 1,           "sandbox" : 0,           "uid" : "watchdog",           "gid" : ["watchdog", "log", "readproc"],           "secon" : "uwatchdog_service:s0"      }  ]}

2. 基于qemu的最小系統

2.1 Why qemu

硬件設備開發人員在開發工作中,需要使用到各種各樣的開發板。每個開發板的連接線纜、接線方式、升級燒寫方式各不相同,且上手門檻高;開發時的便攜性和調試效率等都比較低。特別是init相關的開發調試,修改后還需要整機燒寫。為了能像應用開發者一樣,可以隨時隨地,相對高效且“體面”地開發底層系統服務。于是,構建了基于qemu的OpenHarmony最小系統,希望能讓硬件設備開發人員只需一臺筆記本就可以隨時開發調試底層系統服務。

2.2 關于qemu-arm-linux-min

ecaf69f2-1a85-11ed-ba43-dac502259ad0.png

OpenHarmony的qemu最小系統名稱是qemu-arm-linux-min。從名稱可以看出,它是用qemu模擬的ARM32位運行平臺,使用Linux內核運行的OpenHarmony最小系統部件集合。其部件集合的定義在vendor/ohemu/qemu_arm_linux_min/config.json里,包含約20個部件,主要是系統基礎的啟動、DFX、安全、samgr、軟總線相關的部件。

編譯命令只需要指定qemu-arm-linux-min產品名即可,運行也只需要一個qemu-run.sh命令。詳細的信息可以跳轉到文末的device/qemu/arm_virt虛擬平臺的文檔。

qemu-arm-linux-min的優勢:

● 代碼倉少,只需要96個倉代碼(-g ohos:chipset -m chipsets/qemu.xml),詳細說明參考https://gitee.com/openharmony/manifest。

● 編譯快:只需要編譯5000個文件(完整系統需3萬個)。

● 免燒寫:qemu-run.sh直接運行。

因此,開發者僅需一臺筆記本,就可以隨時隨地寫代碼,輕松為OpenHarmony做貢獻。

2.3 DEMO TIME

ecebb34e-1a85-11ed-ba43-dac502259ad0.png

了解qemu-arm-linux-min介紹后,Handy老師為我們介紹了如何使用它。

arm_virt網頁上已經比較詳細地介紹了運行虛擬機的準備工作了。前面編譯環境準備以及下載代碼的都是通用的,編譯命令前面也說明了,只需要指定qemu-arm-linux-min即可。運行前,需要先安裝qemu,請下載5.2以上版本的qemu,并對源碼進行編譯。

qemu-run.sh運行腳本有兩個運行模式,普通模式直接啟動,虛擬機只有虛擬磁盤,沒有網絡。-n選項可以創建虛擬網橋,使得虛擬機和主機之間可以通過網絡通信,使用hdc等命令。下面我們演示如何使用qemu-arm-linux-min進行gdb調試。

調試環境如下圖所示:主機上通過qemu-run.sh創建了虛擬網橋,用于與虛擬機通信。同時,為了在虛擬機上訪問源碼進行gdb調試,在主機上啟動了smbd服務。虛擬機的內核默認開啟了cifs模塊,可以掛載主機上的smb共享目錄。

● 使能虛擬機的網絡接口:


# 使能虛擬機網絡接口ifconfig eth0 192.168.100.2# 測試與主機側的網絡連接ping192.168.100.1-t4

● 在虛擬機掛載主機的samba共享目錄:


# 創建掛載點mkdir /mnt/smb# 掛載cifs文件系統mount -t cifs -o username=xxx,password=xxx,vers=2.1      //192.168.100.1/handy /mnt/smb# 可選建立hdc連接hdc_stdtconn192.168.100.2:5555
● 使用gdb:
# gdb在主機samba服務器的tools目錄# 調試代碼在主機samba服務器的ohos目錄
# 運行調試程序/mnt/smb/tools/gdb /mnt/smb/ohos/out/qemu-arm-linux/exe.unstripped/startup/init/gdbtest
# 關聯源碼目錄directory /mnt/smb/ohos/out/qemu-arm-linux
#其它命令:r, bt

arm版的gdb可以從以下網站獲?。?/p>

https://github.com/therealsaumil/static-arm-bins/(需解決網絡問題)

https://gitee.com/stesen/ohos_cross_tools

3. init進程的設計理念

3.1 init進程的模塊劃分

ecff3932-1a85-11ed-ba43-dac502259ad0.png

通過前文的介紹,可以知道init進程是系統從內核態向用戶態引導的核心進程;該進程是所有用戶態進程的父進程。

init的模塊劃分如上圖所示,啟動過程大體分為第一階段和第二階段。第一階段用于創建基礎的根文件系統,包括procfs、sysfs、dev設備節點、tmpfs等。第二階段提供了系統參數服務,服務腳本解析能力;然后就進入了腳本配置啟動的過程。

具體配置參考《init啟動引導組件》(https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-boot-init.md。

這里很重要的部分是init里提供了模塊化引擎,提供了擴展模塊開發的對外API,可以在不改變init框架的基礎上擴展init各個模塊的功能。例如可以擴展腳本配置的命令,擴展服務管理功能,在腳本運行前擴展鉤子執行等。

3.2 init進程的啟動順序與擴展機制說明

ed3ca786-1a85-11ed-ba43-dac502259ad0.png

上圖是init進程啟動的詳細過程,主要分為三個部分:

● 第一階段如前面描述,完成基礎根文件系統的構建。

● 第二大部分提供了系統參數服務,并且完成了配置腳本的掃描與解析。

● 第三大部分進入了腳本化運行的階段。

第一部分邏輯固定,不提供擴展;第二部分都是native代碼,可以通過開發擴展模塊向紅色擴展點注冊鉤子函數來擴展功能。第三部分通過配置腳本進行擴展,每個系統服務都可以編寫各自的配置文件在指定階段完成相應功能。

3.3 init腳本化啟動過程說明

ed7ea898-1a85-11ed-ba43-dac502259ad0.png

腳本化啟動過程大體可以分為三個階段:

● pre-init完成腳本化早期工作,包括ueventd、data分區掛載等。

● init階段完成samgr和hdf_devmgr的啟動,這兩個進程是各個SA進程以及HDI服務進程的管理中心,公共依賴需提前啟動。

● post-init階段是各個子系統服務啟動的階段。為了保障整機開機啟動速度,這個階段各個服務都是并行啟動的,服務之間如果有依賴關系,需要進行運行時同步設計。init提供了系統參數服務,可以提供wait和watch機制,輔助各個服務進行同步。

4. init擴展模塊開發示例

init擴展模塊代碼都放在base/startup/init_lite/services/modules目錄下,代碼引用API頭文件定義及插件代碼入口:
#include "init_module_engine.h"
MODULE_CONSTRUCTOR(void){   // 加載插件代碼入口,dlopen此插件庫時自動執行}
MODULE_DESTRUCTOR(void){   // 卸載插件代碼入口,dlclose此插件庫時自動執行}
BUILD.gn編譯腳本依賴及插件安裝目錄:
ohos_shared_library("libinit_example_module") { ... external_deps = [ "init:libinit_module_engine" ] module_install_dir = "lib/init/" ...}
OpenHarmony期待你的加入,與Handy老師一起,深入理解OpenHarmony系統啟動,提PR,輕松踏上設備軟件開發之旅,成為貢獻達人,為OpenHarmony生態發展貢獻力量。

附錄:

啟動恢復子系統概述:

https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-boot-overview.md

qemu ARM Virt 標準系統教程

https://gitee.com/openharmony/device_qemu/tree/master/arm_virt/linux

qemu-arm-linux-min代碼倉說明:

https://gitee.com/openharmony/manifest

qemu ARM Virt 標準系統教程:

https://gitee.com/openharmony/device_qemu/tree/master/arm_virt/linux

Arm版的gdb可以從以下網站獲?。?/p>

https://github.com/therealsaumil/static-arm-bins/

https://gitee.com/stesen/ohos_cross_tools

init啟動引導組件:

https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-boot-init.md

審核編輯 :李倩


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

    關注

    3

    文章

    3533

    瀏覽量

    43289
  • 模塊化
    +關注

    關注

    0

    文章

    336

    瀏覽量

    21742
  • OpenHarmony
    +關注

    關注

    26

    文章

    3804

    瀏覽量

    17849

原文標題:30分鐘成為Contributor|深入理解OpenHarmony系統啟動 輕松踏上設備軟件開發之旅

文章出處:【微信號:gh_e4f28cfa3159,微信公眾號:OpenAtom OpenHarmony】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    OpenHarmony默認30秒熄屏太麻煩?觸覺智能鴻蒙開發板教你輕松取消

    OpenHarmony系統開機后 30 秒會自動息屏,教大家兩招輕松取消自動息屏,觸覺智能Purple Pi OH鴻蒙開發板演示,已適配全新Open
    的頭像 發表于 12-09 11:45 ?513次閱讀
    <b class='flag-5'>OpenHarmony</b>默認30秒熄屏太麻煩?觸覺智能鴻蒙<b class='flag-5'>開發</b>板教你<b class='flag-5'>輕松</b>取消

    深入理解C語言:循環語句的應用與優化技巧

    能讓你的代碼更加簡潔明了,還能顯著提升程序執行效率。本文將詳細介紹C語言中的三種常見循環結構——while循環、for循環和do...while循環,帶你深入理解
    的頭像 發表于 12-07 01:11 ?450次閱讀
    <b class='flag-5'>深入理解</b>C語言:循環語句的應用與優化技巧

    TPS65982和TPS65986快速入門和系統啟動

    電子發燒友網站提供《TPS65982和TPS65986快速入門和系統啟動.pdf》資料免費下載
    發表于 10-08 11:15 ?2次下載
    TPS65982和TPS65986快速入門和<b class='flag-5'>系統啟動</b>

    ECU電控軟件開發及測試介紹

    本文重點介紹符合AutoSar架構的應用軟件開發、MBD開發模式下的軟件質量評估與優化方案、復雜場景下的ECU性能壓力測試方案。
    的頭像 發表于 09-26 14:25 ?3820次閱讀
    ECU電控<b class='flag-5'>軟件開發</b>及測試介紹

    瑞芯微RK3566鴻蒙開發OpenHarmony標準系統應用兼容性測試指導

    本文OpenHarmony標準系統應用兼容性測試指導,適用鴻蒙系統軟件開發測試的新手入門學習課程,設備為觸覺智能的瑞芯微RK3566開發板,
    的頭像 發表于 09-10 11:56 ?869次閱讀
    瑞芯微RK3566鴻蒙<b class='flag-5'>開發</b>板<b class='flag-5'>OpenHarmony</b>標準<b class='flag-5'>系統</b>應用兼容性測試指導

    深入理解FPD-link III ADAS解串器HUB產品

    電子發燒友網站提供《深入理解FPD-link III ADAS解串器HUB產品.pdf》資料免費下載
    發表于 09-06 09:58 ?1次下載
    <b class='flag-5'>深入理解</b>FPD-link III ADAS解串器HUB產品

    Jama Connect for Automotive,汽車行業需求管理解決方案,加速汽車軟件開發

    軟件開發
    龍智DevSecOps
    發布于 :2024年08月05日 13:55:24

    嵌入式軟件開發與AI整合

    嵌入式軟件開發與AI整合是當前技術發展的重要趨勢之一。隨著人工智能技術的快速發展,嵌入式系統越來越多地集成了AI算法,以實現更復雜的智能功能。以下是關于嵌入式軟件開發與AI整合的詳細分析
    的頭像 發表于 07-31 09:25 ?1157次閱讀
    嵌入式<b class='flag-5'>軟件開發</b>與AI整合

    鴻蒙OpenHarmony南向/北向快速開發教程-迅為RK3568開發

    4.1學習之旅了嗎?快來加入我們,一起探索鴻蒙4.1系統的無限魅力吧! 【北京迅為】OpenHarmony學習開發系列教程(第1期 北向基礎篇一) P0_先導課 P1_
    發表于 07-23 10:44

    名單公布!【書籍評測活動NO.38】OpenHarmony開發與實踐 | 基于紅莓RK2206開發

    OpenHarmony操作系統的SIMPLEGUI顯示模塊,幫助讀者快速開發應用程序界面;第7章通過一系列開發示例,幫助讀者深入理解
    發表于 07-19 10:57

    OpenHarmony之開機優化

    OpenHarmony已經支持了Bootchart工具,我們可以直接使用Bootchart工具,Bootchart工具介紹如下: 概述 Bootchart是一個用于系統啟動過程性能分析的開源軟件工具
    發表于 07-01 16:39

    【《軟件開發珠璣》閱讀體驗】+ 心得

    【《軟件開發珠璣》閱讀體驗】+ 心得 感謝電子發燒友論壇提供的讀書機會。讀這本書使我在編程方面多了位資深老師。 在軟件項目開發領域的時,我閱讀了《軟件開發珠璣》這本書。它以獨特的視角和
    發表于 06-23 17:56

    上位機軟件開發用什么語言

    上位機軟件開發是指開發用于與下位機(如PLC、單片機等)進行通信、控制和數據處理的計算機軟件。上位機軟件在工業自動化、物聯網、智能家居等領域有著廣泛的應用。選擇合適的編程語言對于
    的頭像 發表于 06-06 10:44 ?2811次閱讀

    淺談存內計算生態環境搭建以及軟件開發

    ,還包括對操作系統、文件系統等底層支持的優化。 綜上,存內計算環境的搭建不僅促使硬件技術的創新,也推動了軟件開發方法的變革。在這種環境中,軟件性能和效率的提升依賴于
    發表于 05-16 16:40

    誠邁科技賦能商用設備通過OpenHarmony 4.0 Release版本兼容性測評

    在開源鴻蒙(OpenHarmony)生態蓬勃發展的浪潮中,誠邁科技以卓越的技術實力和對開源生態的深入理解,展現了在推動生態繁榮和行業創新的關鍵作用。
    的頭像 發表于 05-10 09:50 ?583次閱讀
    誠邁科技賦能商用<b class='flag-5'>設備</b>通過<b class='flag-5'>OpenHarmony</b> 4.0 Release版本兼容性測評
    主站蜘蛛池模板: 在线综合网 | 欧美日韩一区二区三区视视频 | 九九热在线视频观看 | 日日噜噜噜夜夜爽爽狠狠 | 色综合色 | 精品一区二区三区免费爱 | 中文天堂最新版资源新版天堂资源 | 色视频在线网站 | 欧美精品一二区 | 综合色影院 | 日韩免费看 | 狠狠干夜夜爽 | 免费能直接在线观看黄的视频 | 黄色的视频在线免费观看 | 国产精品久久久亚洲 | 老司机51精品视频在线观看 | 美国一级毛片片aa久久综合 | 黄色在线免费看 | 天天插日日插 | 免费免费啪视频视频观看 | 一级中文字幕乱码免费 | 99热久久国产精品 | 免费特黄| 国产精品视频久久久 | 免费看欧美一级特黄a大片一 | 久久综合久久88 | 国产视频一二三 | 国产一区二区高清 | 202z欧美成人| 美女黄色毛片免费看 | 丁香婷婷久久大综合 | 伊人网在线观看 | 免费抓胸吻胸激烈视频网站 | 色婷婷99综合久久久精品 | 欧美性xx18一19| 欧美一区二区三区影院 | 国语对白一区二区三区 | 国产午夜精品福利 | 黄色大秀视频 | 精品综合久久88色鬼首页 | 亚洲日本一区二区三区在线不卡 |