本文將以用戶自定義的內核節點/dev/wf_bt為例,手把手教會讀者如何在JNI層獲得對該節點的訪問權限。
第一步:找到需要訪問該內核節點的進程(process),筆者自己這個節點由system_server進程來訪問
第二步:打開文件AndroidL/android/external/sepolicy/file_contexts.be
仿照這個文件裡的寫法,為你的節點定義一個你想要的名字:
wf_bt_device是自定義,其他左右兩邊的內容都和上面的範例一致。
第三步:打開文件AndroidL/android/external/sepolicy/device.te
仿照這個文件裡的寫法,將剛剛第二步寫的wf_bt_device聲明為dev_type:
第四步:
AndroidL/android/external/sepolicy/目錄下很多.te文件都是以進程名來結尾的,比如有針對surfaceflinger進程的surfaceflinger,有針對vold進程的vold.te,
剛剛從第一步得到,這個節點是由system_server進程來訪問,所以,我們找到system_server.te打開,加入允許這個進程對/dev/wf_bt的讀寫權限,
這句話的意思是:允許system_server進程擁有對wf_bt_device的這個字符設備的讀寫權限。
改了這些之後,你就可以make installclean;make -j16編譯image來驗證權限是否獲取成功。
fd =open("/dev/wf_bt",O_RDONLY | O_NOCTTY); 絕對成功!!!!!
沒有留言:
張貼留言