Android深度探索(卷1)HAL與驅動開發閱讀心得9

來源:互聯網
上載者:User

標籤:

硬體抽象層:HAL

Google為Android加入HAL主要有如下的目的:

1.統一硬體的調用介面。由於HAL有標準的調用介面,所以可以利用 HAL屏蔽Linux驅動複雜、不統一的介面;

2.解決了GPL著作權問題。由於Linux核心基於GPL協議,而Android基於Apache Licence 2.0協議。因此Google玩了個“穿越”,將原本位於Linux驅動中的敏感代碼向上移了一個層次。這樣這些敏感代碼就擺脫GPL協議的束縛,那些不想開源的Linux驅動作者也就沒必要開源了。

3.針對一些特殊的要求。對於有些硬體,可能需要訪問一些使用者空間的資源,或在核心空間不方便完成的工作以及特殊需求。在這種情況下,可以利用位於使用者空間HAL代碼來輔助Linux驅動完成一些工作。

編寫一款支援HAL的Linux驅動程式要比編寫普通的 Linux 驅動程式複雜一些,但這些付出 是值得。因為加入HAL會使組成 Linux 驅動的一整套Library的各部分更獨立,更容易維護。步驟1.編寫Linux驅動

“編寫Linux驅動”,從表明上看是廢話,但如果要為Linux驅動添加HAL,而且想盡量保護敏 感資料。Linux驅動的代碼就要盡量簡潔,儘可能將商務邏輯放HAL Library中。

步驟2.編寫HAL Library

HAL Library就是普通的Linux Library(*.so )檔案。但這類庫檔案有一個介面。通過HAL_MODULE_INFO_SYM變數實現。Service Library通過在這個介面中定義的ID定位HAL Library的。

步驟3.編寫 Service Library

儘管這步並不是必需的,但新的HAL架構要求我們這樣做。Service Library 也是Linux Library。這一步比較靈活。Service Library可以是一般的Linux Library,也可以是JNI Library。實際上這一步除了用C/C++件實現的*.so庫檔案外,還應該包含Java編寫的服務管理類 (ServiceManager)。ServiceManager會調用Service Library。而APK程式會調用ServiceManager類來訪問Service Library。

Android深度探索(卷1)HAL與驅動開發閱讀心得9

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.