歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> 學習Linux

第九章------HAL,時光之刃第九章

第九章------HAL,時光之刃第九章


第九章------HAL,時光之刃第九章


HAL是建立在Linux驅動之上的的程序庫,他是一個應用層,它的作用保護內部私有。有一種是位於Android層次的系統運行庫層,Linux中只保留與寄存器相互的代碼,通過HAL進行數據的傳遞。

為Android加入HAL的主要目的是:

統一硬件的調用接口。

解決GPL版權問題。

資源等特殊要求。

這個是新版的Android HAL架構,與原來的區別增加了新的代碼入口。他只需要用ID來定位,用Service程序庫。

 

在LED實驗中可以加入HAL,他不需要關心他們之間的交互方式,像普通的API就可以交互,將所有的邏輯從LED驅動移動到HAL模塊,而先前的LED驅動只保留讀寫寄存器的功能。

編寫一款支持HAL的Linux驅動程序的步驟:

新改進了以後的LED的build.sh的腳本可以支持多個設備,處理多個設備,而不需要每一次都去關閉Android模擬器。

在測試讀寫寄存器時,因為是LED接受的不是字符串,而是字節類型的數據,因此以字節形式輸入在進行測試即可。

編寫調用LED驅動的HAL模塊

HAL規定不能直接使用hw_module_t結構體,因此在外部還要加一層結構體,要使用led函數指針,定義打開和關閉的指針。設置文件的句柄,控制LED開關的通用函數,根據它的開關輸出響應的日志信息,存儲發送被設置文件或者從設備接收的數據,設置第一個字節為讀取GPMDAT寄存器數據的狀態,讀取數據,保留有關數據。使用switch…case語句調用led;打開指定的led,led_off控制led,關閉設備函數;在初始化寄存器,打開設備為其分配內存空間,先清零,在設置。

總結它的原理和步驟:

在Android系統中使用Linux驅動有兩種方式:傳統方式直接與Linux驅動交互,例如讀取文件;還有就是HAL:本質上就是通過Linux共享庫(.so)與Linux驅動交互,然後再訪問Linux共享庫。

http://xxxxxx/Linuxjc/1135725.html TechArticle

Copyright © Linux教程網 All Rights Reserved