天天看點

由Android HAL想到的

終于鼓起勇氣寫點什麼了,

雖然一直做嵌入式,但是做的也不深,

最近開始了解android的開發,主要是為了管理友善,想看看android的studio如何,比eclipse如何。(雖然eclipse我也不會用)

然後想了解一下android系統的架構,大緻就是這個樣子

由Android HAL想到的

其中就提到了HAL層,是以也想知道它是怎麼工作的

然後就看到下面一個部落客寫的文章

http://blog.csdn.net/mr_raptor/article/details/8069588

這裡提到了HAL Stub的架構分析

http://blog.csdn.net/mr_raptor/article/details/8074549

簡單的總結一下

首先hardware的相關内容放在android目錄的下面

hardware/libhardware/include/hardware/hardware.h

hardware/libhardware/hardware.c

0:首先會有三個重要的結構體hw_device_t->hw_module_t->hw_module_methods_t(我們需要在各個硬體對應的so檔案中(即stub)定義它們)

1:硬體的基本操作都固定的.so檔案進行的,二這些so檔案的名城是有固定規則的。

2:我們可以調用hardware.c中的hw_get_module函數來dlopen上面提到的庫檔案

3:然後通過dlsym來擷取hw_device_t的結構體,進而擷取hw_device_t->hw_module_t->hw_module_methods_t->open函數的指針

4:然後通過open函數擷取各個硬體對應的hw_device_t指針(注意,這裡的hw_device_t可以根據各個不同的硬體進行重寫,比如有的有set/get等操作)

5:然後就可以調用hw_device_t中的各個函數指針了,這樣就達到通過硬體ID動态操作不同函數的目的。

要說明的是,HAL Stub僅僅是實作了這樣一個架構,具體到各個硬體的操作,還需要根據情況進行抽象,

大部分代碼都在hardware/libhardware裡面

不過,這個HAL怎麼被上層(APP/APP framwork?)調用的還不知道。

繼續閱讀