0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【OpenHarmony技術(shù)峰會(huì)】生態(tài)與互聯(lián)分論壇 | 梁開祝:OpenHarmony驅(qū)動(dòng)開發(fā)實(shí)踐

HiHope社區(qū)官方號(hào) ? 2023-03-28 16:54 ? 次閱讀

在2月25日剛剛圓滿閉幕的首屆開放原子開源基金會(huì)OpenHarmony技術(shù)峰會(huì)(2023)生態(tài)與互聯(lián)分論壇上,潤和軟件旗下子公司江蘇潤開鴻數(shù)字科技有限公司(簡稱:潤開鴻)資深軟件開發(fā)工程師梁開祝發(fā)表了題為《OpenHarmony的驅(qū)動(dòng)框架原理和實(shí)踐》的主題演講,從實(shí)踐角度重點(diǎn)講解了OpenHarmony驅(qū)動(dòng)框架的具體實(shí)現(xiàn)細(xì)節(jié)和“一次開發(fā),多系統(tǒng)部署”的驅(qū)動(dòng)開發(fā)實(shí)踐,幫助OpenHarmony設(shè)備驅(qū)動(dòng)開發(fā)者深入理解驅(qū)動(dòng)框架工作流程和工作細(xì)節(jié)。

70e87e16-cd37-11ed-ad0d-dac502259ad0.jpg

技術(shù)背景

OpenHarmony引入全新驅(qū)動(dòng)開發(fā)理念和框架

7108c342-cd37-11ed-ad0d-dac502259ad0.png

OpenHarmony是一個(gè)面向萬物互聯(lián)/萬物智聯(lián)大場(chǎng)景的分布式操作系統(tǒng),它面對(duì)的是硬件性能和功能需求千差萬別的設(shè)備,比如智能手環(huán)與手機(jī)之間的硬件差異。為了統(tǒng)一適配能力差別巨大的設(shè)備,OpenHarmony設(shè)計(jì)了一個(gè)多內(nèi)核的架構(gòu),能力弱的設(shè)備選用簡單的內(nèi)核(如LiteOS)、能力強(qiáng)的設(shè)備選用復(fù)雜的內(nèi)核(如Linux),這意味著生態(tài)圈中的硬件產(chǎn)品在系統(tǒng)內(nèi)核層面上就存在巨大的差異。然而這些產(chǎn)品很有可能會(huì)用到相近甚至相同的外圍硬件,比如,家里的智能門禁系統(tǒng)、智能電視、平板電腦、手機(jī)上所使用的攝像頭模組都可能是同一個(gè)型號(hào)或同系列的,而在設(shè)備端運(yùn)行不同內(nèi)核的操作系統(tǒng),就需要為不同內(nèi)核開發(fā)各自的驅(qū)動(dòng)程序,這會(huì)造成驅(qū)動(dòng)程序的復(fù)用性、可移植性、可維護(hù)性較差,不利于產(chǎn)品開發(fā)和維護(hù),也不利于硬件生態(tài)圈的成長。

作為一個(gè)全新的操作系統(tǒng),OpenHarmony必須要開發(fā)一套更優(yōu)秀的驅(qū)動(dòng)開發(fā)框架,幫助開發(fā)者、企業(yè)更便捷地開發(fā)和管理硬件設(shè)備的驅(qū)動(dòng)程序,助力打造自己的硬件生態(tài)。OpenHarmony的驅(qū)動(dòng)框架,采用C語言面向?qū)ο?a href="http://ttokpm.com/v/tag/1315/" target="_blank">編程模型構(gòu)建,通過平臺(tái)解耦、內(nèi)核解耦,來達(dá)到兼容不同內(nèi)核,統(tǒng)一平臺(tái)底座的目的,從而幫助開發(fā)者實(shí)現(xiàn)驅(qū)動(dòng)一次開發(fā),多系統(tǒng)部署的效果。

7124153e-cd37-11ed-ad0d-dac502259ad0.png

OpenHarmony的內(nèi)核子系統(tǒng)(多內(nèi)核)與驅(qū)動(dòng)子系統(tǒng)(統(tǒng)一的驅(qū)動(dòng)框架)是松耦合的關(guān)系,僅通過一個(gè)OSAL(Operating System Abstraction Layer,操作系統(tǒng)抽象層)進(jìn)行交互。OSAL只為驅(qū)動(dòng)框架提供內(nèi)核部分關(guān)鍵能力的抽象接口,而隱藏了接口在不同內(nèi)核中的實(shí)現(xiàn)細(xì)節(jié)。驅(qū)動(dòng)框架通過OSAL來適配不同的內(nèi)核,而具體的設(shè)備則完全基于驅(qū)動(dòng)框架提供的能力來實(shí)現(xiàn)驅(qū)動(dòng)程序并通過HDI(Hardware Driver Interface,硬件驅(qū)動(dòng)接口)對(duì)上層提供驅(qū)動(dòng)服務(wù),設(shè)備驅(qū)動(dòng)完全不需要知道(也不會(huì)知道)自己運(yùn)行在什么樣的內(nèi)核之上。

技術(shù)干貨

OpenHarmony中的驅(qū)動(dòng)框架實(shí)現(xiàn)詳解

代碼結(jié)構(gòu)

712dfdb0-cd37-11ed-ad0d-dac502259ad0.png

圖為OpenHarmony的驅(qū)動(dòng)框架以及與驅(qū)動(dòng)開發(fā)相關(guān)代碼部署。驅(qū)動(dòng)框架主要在//drivers/hdf_core/目錄下實(shí)現(xiàn)。

lframework/目錄是C語言實(shí)現(xiàn)的驅(qū)動(dòng)框架核心源代碼(包括驅(qū)動(dòng)框架、配置管理、配置解析、驅(qū)動(dòng)通用模型、硬件通用平臺(tái)能力接口等),

注意點(diǎn):這里的部分代碼是內(nèi)核態(tài)驅(qū)動(dòng)框架與用戶態(tài)驅(qū)動(dòng)框架共用的,需要大家在閱讀代碼時(shí)區(qū)分清楚;

l adapter/目錄下是驅(qū)動(dòng)框架適配不同內(nèi)核的適配代碼和編譯腳本,也包括用戶態(tài)驅(qū)動(dòng)框架適配不同系統(tǒng)類型(輕量系統(tǒng)和標(biāo)準(zhǔn)系統(tǒng))的適配代碼和編譯腳本。

l //drivers/peripheral/目錄下是部署在OpenHarmony用戶空間的各種外圍設(shè)備驅(qū)動(dòng)相關(guān)的HDI、HAL、驅(qū)動(dòng)模型及測(cè)試用例等的實(shí)現(xiàn)代碼和編譯配置。

l //drivers/interface/目錄下是用于管理各驅(qū)動(dòng)模塊的HDI接口定義,這些接口定義使用IDL語言描述并以.idl文件形式保存。

l 其他與驅(qū)動(dòng)開發(fā)相關(guān)的代碼目錄還包括//device/目錄和//vendor/目錄下的相關(guān)部分目錄,它們是具體的芯片方案、產(chǎn)品方案、產(chǎn)品定義、產(chǎn)品配置等相關(guān)信息和適配代碼的匯總,為設(shè)備驅(qū)動(dòng)的實(shí)現(xiàn)提供一定的支持。

編譯與鏈接

驅(qū)動(dòng)框架適配不同內(nèi)核的編譯配置,在代碼結(jié)構(gòu)的//drivers/hdf_core/adapter/目錄下,主要還是通過對(duì)應(yīng)的BUILD.gn和Makefile文件將相關(guān)的源代碼進(jìn)行串聯(lián)和依賴,以完成驅(qū)動(dòng)框架整體的編譯與鏈接。

對(duì)于不同的內(nèi)核,則在對(duì)應(yīng)內(nèi)核的編譯腳本中加入編譯驅(qū)動(dòng)框架的入口和鏈接描述。

715195a4-cd37-11ed-ad0d-dac502259ad0.png

圖中代碼示例是在LiteOS_A內(nèi)核的編譯腳本中include驅(qū)動(dòng)框架的編譯入口,同時(shí)也在鏈接腳本中加入一個(gè)hdf.driver的只讀數(shù)據(jù)段,用以描述驅(qū)動(dòng)框架專用的數(shù)據(jù)結(jié)構(gòu)。

715f42f8-cd37-11ed-ad0d-dac502259ad0.png

圖中代碼示例是在Linux內(nèi)核的編譯腳本中,將驅(qū)動(dòng)框架的關(guān)鍵代碼以patch的形式打入Linux源代碼中(實(shí)際仍是代碼目錄的軟鏈接形式加入Linux內(nèi)核中),同時(shí)也在鏈接腳本vmlinux.lds.S中加入一個(gè)hdf.driver的只讀數(shù)據(jù)段,用以描述驅(qū)動(dòng)框架專用的數(shù)據(jù)結(jié)構(gòu)。

當(dāng)編譯到OpenHarmony內(nèi)核時(shí),編譯工具鏈通過上述腳本的描述一并將驅(qū)動(dòng)框架編譯成中間文件,然后鏈接和打包到內(nèi)核鏡像中使用。

內(nèi)核態(tài)驅(qū)動(dòng)框架及用戶態(tài)驅(qū)動(dòng)框架啟動(dòng)流程

內(nèi)核態(tài)驅(qū)動(dòng)框架的啟動(dòng)流程

718e6bd2-cd37-11ed-ad0d-dac502259ad0.png

如圖所示,部署在內(nèi)核態(tài)的驅(qū)動(dòng)框架作為一個(gè)相對(duì)獨(dú)立的部分,要么因?yàn)閮?nèi)核(LiteOS_A內(nèi)核)的其他模塊的直接調(diào)用而啟動(dòng),要么作為內(nèi)核(Linux內(nèi)核)的一個(gè)模塊(module)而自動(dòng)加載和啟動(dòng)。在進(jìn)入驅(qū)動(dòng)框架的啟動(dòng)入口之后,驅(qū)動(dòng)框架就會(huì)進(jìn)入一個(gè)與內(nèi)核無關(guān)的工作流程中(與內(nèi)核相關(guān)部分會(huì)通過OSAL接口對(duì)接到內(nèi)核提供的功能)。

用戶態(tài)驅(qū)動(dòng)框架的啟動(dòng)流程

71a5eeb0-cd37-11ed-ad0d-dac502259ad0.png

如圖所示,部署在用戶態(tài)的驅(qū)動(dòng)框架則分為若干個(gè)獨(dú)立的服務(wù)進(jìn)程,在系統(tǒng)啟動(dòng)到用戶態(tài)階段時(shí),由Init進(jìn)程根據(jù)啟動(dòng)配置文件的描述逐一拉起,各進(jìn)程之間通過IPC進(jìn)行交互并逐步建立起各自的數(shù)據(jù)結(jié)構(gòu)關(guān)系。

以上兩張示意圖均為以功能模塊劃分的啟動(dòng)流程概略圖,梁開祝老師在閱讀理解OpenHarmony驅(qū)動(dòng)框架的代碼時(shí),以API為粒度整理了一份詳細(xì)的啟動(dòng)流程圖,以及在驅(qū)動(dòng)框架啟動(dòng)過程中一步步建立起來的數(shù)據(jù)結(jié)構(gòu)關(guān)系圖,感興趣的讀者可到資源倉庫下載、閱讀。

用戶態(tài)與內(nèi)核態(tài)的交互

71d16d42-cd37-11ed-ad0d-dac502259ad0.png

內(nèi)核態(tài)的驅(qū)動(dòng)框架與用戶態(tài)的驅(qū)動(dòng)框架是各自獨(dú)立的兩部分,內(nèi)核態(tài)驅(qū)動(dòng)框架直接管理具體硬件設(shè)備的驅(qū)動(dòng),并以服務(wù)的形式向用戶態(tài)提供服務(wù)接口,而用戶態(tài)驅(qū)動(dòng)框架則通過HDI接口使用內(nèi)核態(tài)驅(qū)動(dòng)框架提供的驅(qū)動(dòng)服務(wù)。

HDI接口使用IO Service和IO Dispatcher機(jī)制為驅(qū)動(dòng)框架提供進(jìn)行統(tǒng)一的交互接口,其實(shí)現(xiàn)主要有兩種形式:

l 當(dāng)驅(qū)動(dòng)以內(nèi)核態(tài)組件形式部署時(shí),客戶端程序需要通過系統(tǒng)調(diào)用(system call)方式訪問驅(qū)動(dòng)程序。驅(qū)動(dòng)接口通過IO Service請(qǐng)求將消息通過系統(tǒng)調(diào)用陷入內(nèi)核,并將消息分發(fā)到IO Dispatcher進(jìn)行處理。

l 當(dāng)驅(qū)動(dòng)以用戶態(tài)服務(wù)形式部署時(shí),客戶端進(jìn)程需要通過IPC方式訪問驅(qū)動(dòng)服務(wù)進(jìn)程,IO Service完成IPC 通信的客戶端消息請(qǐng)求封裝,IO Dispatcher完成驅(qū)動(dòng)服務(wù)端消息請(qǐng)求封裝,客戶端消息通過IPC送達(dá)服務(wù)端再分發(fā)給IO Dispatcher處理。

注意點(diǎn):該交互過程涉及比較復(fù)雜的數(shù)據(jù)處理流程,需要結(jié)合代碼進(jìn)行深入理解。

通用的驅(qū)動(dòng)示例程序

以一個(gè)通用的驅(qū)動(dòng)示例程序來簡單驗(yàn)證基于OpenHarmony驅(qū)動(dòng)框架的設(shè)備驅(qū)動(dòng)開發(fā)基本要點(diǎn)。

71f71d30-cd37-11ed-ad0d-dac502259ad0.png

本驅(qū)動(dòng)示例程序,包含了驅(qū)動(dòng)框架的一些基本要素,如上層的應(yīng)用程序、內(nèi)核的驅(qū)動(dòng)程序、硬件的驅(qū)動(dòng)配置信息、適配不同內(nèi)核和不同類型系統(tǒng)的編譯腳本等。小伙伴們可以跟著里面的README文檔的操作說明,從簡單到復(fù)雜一步步去驗(yàn)證前文提到的驅(qū)動(dòng)框架知識(shí)要點(diǎn),也可以非常方便地將這個(gè)示例程序移植到不同的開發(fā)板上進(jìn)行驗(yàn)證,以此體驗(yàn)OpenHarmony驅(qū)動(dòng)框架“一次開發(fā),多系統(tǒng)部署”的好處。

“以技術(shù)賦能開源共建,持續(xù)發(fā)揮生態(tài)引領(lǐng)作用”。潤和軟件將深入貫徹“2+N”行業(yè)戰(zhàn)略(深耕金融、能源“2”大行業(yè),廣泛賦能智慧城市、醫(yī)療、教育、工業(yè)等“N”個(gè)行業(yè)),圍繞行業(yè)場(chǎng)景落地不斷夯實(shí)軟硬件底座,推動(dòng)應(yīng)用創(chuàng)新,助力體驗(yàn)提升;吸引更多企業(yè)及個(gè)人開發(fā)者融入生態(tài)、參與共建,持續(xù)為OpenHarmony繁榮發(fā)展貢獻(xiàn)力量。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 驅(qū)動(dòng)
    +關(guān)注

    關(guān)注

    12

    文章

    1820

    瀏覽量

    85110
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3641

    瀏覽量

    16061
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    第三屆OpenHarmony技術(shù)大會(huì)在上海成功舉辦

    了來自全球的開源操作系統(tǒng)技術(shù)精英、前沿實(shí)踐專家、廣大開發(fā)者以及學(xué)術(shù)界大咖,面向全球展示了OpenHarmony的最新技術(shù)、
    發(fā)表于 10-13 11:14

    九聯(lián)鴻閃耀HDC2024,展示OpenHarmony生態(tài)創(chuàng)新

    的最新進(jìn)展以及OpenHarmony原生應(yīng)用的開發(fā)實(shí)踐。作為華為OpenHarmony使能伙伴以及開放原子開源基金會(huì)OpenHarmony
    的頭像 發(fā)表于 06-24 10:15 ?1006次閱讀

    報(bào)名開啟!第二屆OpenHarmony開發(fā)者大會(huì)2024重磅來襲!

    OpenHarmony 開發(fā)者大會(huì)2024,為開發(fā)者、產(chǎn)業(yè)組織、生態(tài)伙伴和行業(yè)用戶搭建一個(gè)交流、分享和學(xué)習(xí)的平臺(tái)。大會(huì)以 OpenHarmony
    發(fā)表于 05-14 15:23

    OpenHarmony社區(qū)運(yùn)營報(bào)告(2023年12月)

    隆重舉行。作為開放原子開發(fā)者大會(huì)最重要的技術(shù)論壇之一,此次論壇不僅展示了 2023 年 OpenHar
    發(fā)表于 01-10 15:44

    技術(shù)創(chuàng)新,照見未來 | 2023 開放原子開發(fā)者大會(huì) OpenHarmony 論壇圓滿舉行

    OpenHarmony 論壇(以下簡稱“論壇”)在無錫隆重舉行。作為開放原子開發(fā)者大會(huì)最重要的技術(shù)
    的頭像 發(fā)表于 12-22 09:58 ?427次閱讀
    <b class='flag-5'>技術(shù)</b>創(chuàng)新,照見未來 | 2023 開放原子<b class='flag-5'>開發(fā)</b>者大會(huì) <b class='flag-5'>OpenHarmony</b> <b class='flag-5'>分</b><b class='flag-5'>論壇</b>圓滿舉行

    鴻AT32開發(fā)平臺(tái)通過OpenHarmony兼容性測(cè)評(píng)

    Release版本兼容性測(cè)評(píng),助力潤鴻基于該開發(fā)平臺(tái)全新研發(fā)推出的行業(yè)終端設(shè)備順利融入OpenHarmony生態(tài),也為OpenHarmony
    發(fā)表于 12-21 17:20

    技術(shù)創(chuàng)新,照見未來 | 2023開放原子開發(fā)者大會(huì)OpenHarmony論壇圓滿舉行

    OpenHarmony論壇(以下簡稱“論壇”)在無錫隆重舉行。作為開放原子開發(fā)者大會(huì)最重要的技術(shù)
    的頭像 發(fā)表于 12-18 15:55 ?435次閱讀

    精彩預(yù)告 | 首屆開放原子開發(fā)者大會(huì)OpenHarmony論壇議程搶鮮看

    現(xiàn)。如何更好地讓技術(shù)創(chuàng)新的汗水,滋養(yǎng)進(jìn)未來世界的商業(yè)項(xiàng)目中,是所有開發(fā)者和開源企業(yè)需要思考的問題。 ? 2023開放原子開發(fā)者大會(huì)的OpenHarmony
    的頭像 發(fā)表于 12-15 16:15 ?326次閱讀

    【報(bào)名開啟】繁榮生態(tài),人才先行︱首屆OpenHarmony人才生態(tài)大會(huì)即將在上海召開

    共建單位代表等,介紹OpenHarmony社區(qū)生態(tài)及人才進(jìn)展、展示OpenHarmony操作系統(tǒng)的技術(shù)革新、分享階段性技術(shù)成果,圍繞
    發(fā)表于 12-04 16:23

    OpenHarmony Meetup 2023北京站圓滿舉辦

    圖形架構(gòu)、基于 RISC-V 架構(gòu)的 OpenHarmony 應(yīng)用實(shí)踐、面向互聯(lián)和智能的交互技術(shù)變遷、基于 OpenHarmony 的移動(dòng)
    發(fā)表于 11-29 09:51

    OpenHarmony亮相MTSC 2023 | 質(zhì)量&amp;效率共進(jìn),賦能應(yīng)用生態(tài)發(fā)展

    和平臺(tái)。OpenAtom OpenHarmony(簡稱“OpenHarmony”)通過專場(chǎng)論壇議題分享和展區(qū)展品精彩展示,為與會(huì)者帶來一場(chǎng)技術(shù)盛宴。
    發(fā)表于 11-28 15:41

    上海站報(bào)名啟動(dòng)! 2023年開源產(chǎn)業(yè)生態(tài)大會(huì)OpenHarmony生態(tài)論壇

    聯(lián)合體共同指導(dǎo),上海開源信息技術(shù)協(xié)會(huì)統(tǒng)籌主辦。 屆時(shí),大會(huì)將攜手OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)項(xiàng)目群生態(tài)委員會(huì)舉辦
    發(fā)表于 11-24 14:55

    精彩預(yù)告 | OpenHarmony即將亮相MTSC 2023

    業(yè)的認(rèn)可和大力支持。 大咖云集、精英齊聚,共享 OpenHarmony 最新生態(tài)進(jìn)展 本次 OpenHarmony 專場(chǎng)論壇大咖云集、精英
    發(fā)表于 11-22 10:28

    OpenHarmony技術(shù)大會(huì) | 硬件(南向)生態(tài)論壇嘉賓金句

    點(diǎn)擊藍(lán)字 ╳ 關(guān)注我們 開源項(xiàng)目 OpenHarmony 是每個(gè)人的 OpenHarmony 原文標(biāo)題:OpenHarmony技術(shù)大會(huì) | 硬件(南向)
    的頭像 發(fā)表于 11-14 15:15 ?372次閱讀

    OpenHarmony技術(shù)大會(huì) | 應(yīng)用(北向)生態(tài)論壇嘉賓金句

    點(diǎn)擊藍(lán)字 ╳ 關(guān)注我們 開源項(xiàng)目 OpenHarmony 是每個(gè)人的 OpenHarmony 原文標(biāo)題:OpenHarmony技術(shù)大會(huì) | 應(yīng)用(北向)
    的頭像 發(fā)表于 11-14 15:10 ?254次閱讀