關於Android硬體抽象層

2021-06-28 13:37:50 字數 872 閱讀 3496

1.為什麼需要硬體抽象層?

硬體抽象層是把部分的驅動的工作放到使用者態,這樣做是因為linux遵循gun license 發布的時候需要公開源**,而android是遵循apache license,無需公布源**。顯然如果把驅動/晶元相關的所有**都對外公開會傷害商家的利益。

2.硬體驅動層的基本架構是怎樣的?

我們可以將硬體驅動層的架構分成三部分,乙個是驅動部分,完成一些基礎的對暫存器的讀/寫以及設定等操作;然後是乙個所謂的硬體抽象層,他主要是對底層硬體資料的處理,對應用層操作的分析運算和處理,簡單的說硬體抽象層就是乙個具有專利及技術價值的邏輯和運算單元,硬體抽象層的**會被封裝成so庫。最後最上層的是最終的應用,應用不是像以前一樣直接操作驅動,而是載入之前的硬體抽象層編譯出來的動態鏈結庫,通過他提供的介面間接操作驅動。

3.應用層怎麼使用硬體抽象層?

首先硬體抽象層就是乙個so庫,在這個so庫裡面有兩個關鍵的結構體***_module_t 和 ***_device_t ,其中***_module_t是對應應用層的,***_device_t 是對應驅動的。而在***_module_t的第乙個變數一定是結構體hw_module_t ,這個是十分關鍵的,應用層首先依據名字找到這個so檔案然後用dlopen載入這個so庫。那他還需要獲得乙個***_module_t來操作裡面的函式介面。方法就是:獲得so的控制代碼之後呼叫dlsym()獲得hw_module_t物件的位址,然後強制轉換成***_module_t物件,這個轉換時絕對安全的因為

***_module_t的第乙個變數一定是結構體hw_module_t ,他們的位址是一致的。

4.hw_get_module 這個函式的主要功能是根據模組

idload

去開啟動態鏈結庫並從中獲取硬體模組結構體位址,也就是***_module_t啦

Android 硬體抽象層(HAL)

出發點 保護廠商利益 android的硬體抽象層,簡單來說,就是 對linux核心驅動程式的封裝,向上提供介面,遮蔽低層的實現細節。也就是說,把對硬體的支援分成了兩層,一層放在使用者空間 user space 一層放在核心空間 kernel space 其中,硬體抽象層執行在使用者空間,而linux...

android學習之旅 硬體抽象層

1 為什麼會新增硬體抽象層?如果不新增硬體抽象層,我們在android所用的linux核心中新增和修改 就要遵循gpl協議,將 公開。把對硬體的驅動程式的 公開,會損害移動裝置廠商的利益,因為這相當於暴露了硬體的實現細節和引數。所以android源 是遵循apache license協議,它允許移動...

硬體抽象層 HAL

本章主要講硬體抽象層 hal硬體抽象層是建立在linux驅動之上的一套程式庫。這套程式庫並不屬於linux核心,而是屬於linux核心層上的應用層。google為android加入hal主要有以下目的 統一硬體的呼叫介面。由於hal有標準的呼叫介面,所以可以利用hal遮蔽了linux驅動複雜 不統一...