halandroid
❶ Android中HAL層與內核驅動之間的關系
hal通過linux的用戶空間介面去間接的使用內核驅動,內核驅動再去控制實際的硬體。
❷ android在hal下 如何獲得對一個內核節點的
Android 5.0以上,我們發現jni通過hal層去操作內核節點時PERMISSION DENIED 即使在Android源代碼工程目錄下,進入到system/core/rootdir目錄,裡面有一個名為ueventd.rc文件,往裡面添加一行:/dev/hello 0666 root root ,此操作仍然不能讓上層去讀寫相應的節點, 因為5.0以上採取了SEAndroid/SElinux的安全機制,即使擁有root許可權,或者對某內核節點設置為777的許可權,仍然無法在JNI層訪問。
解決辦法:
1.找到需要訪問該內核節點的進程(process)我的是以system_server進程來訪問
2.打開文件AndroidL/android/external/sepolicy/file_contexts.be
添加
/dev/hello u:object_r:hello_device:s0 1
3.打開文件AndroidL/android/external/sepolicy/device.te
將剛剛第二步寫的hello_device聲明為dev_type:
type hello_device, dev_type; 1
4.AndroidL/android/external/sepolicy/目錄下很多.te文件都是以進程名來結尾的,比如有針對surfaceflinger進程的surfaceflinger,有針對vold進程的vold.te,
我們是由system_server進程來訪問這個節點的,所以,我們找到system_server.te打開,加入允許這個進程對/dev/hello的讀寫許可權。
❸ 怎樣實現Android系統的HAL(硬體適配層
HAL層有既定的編寫規范,在規范下來寫,然後添加自己想提供給framework層的介面.
可以參考一下 http://blog.csdn.net/luoshengyang/article/details/6567257 。
裡面的博文從一到六,完整的描述的底層到應用層的調用,對於理解HAL有很大的幫助。
在android 4.4之前,這些介面調用不涉及到許可權問題,android 5.0 之後涉及到許可權問題,需要添加許可權。
❹ 有沒有那本書介紹android hal層
書到沒見過,只有一些資料而已:
Android HAL層即硬體抽象層是Google響應廠家「希望不公開源碼」的要求推出的概念
1,源代碼和目標位置
源代碼: /hardware/libhardware目錄,該目錄的目錄結構如下:
/hardware/libhardware/hardware.c編譯成libhardware.so,目標位置為/system/lib目錄
Android.mk中lib文件默認使用LOCAL_MODULE_PATH是等於TARGET_OUT_SHARED_LIBRARIES的。
/hardware/libhardware/include/hardware目錄下包含如下頭文件:
hardware.h 通用硬體模塊頭文件hw_mole_t和hw_get_mole_by_class的定義
bit.h bit模塊頭文件
gralloc.h gralloc模塊頭文件
lights.h 背光模塊頭文件
overlay.h overlay模塊頭文件
qemud.h qemud模塊頭文件
sensors.h 感測器模塊頭文件
/hardware/libhardware/moles目錄下定義了很多硬體模塊
這些硬體模塊都編譯成xxx.xxx.so,目標位置為/system/lib/hw目錄