Android系統修改硬體裝置訪問許可權

2021-07-02 13:12:08 字數 2238 閱讀 5365

android系統修改硬體裝置訪問許可權

注:本文主要針對熱插拔裝置,板卡自帶的裝置可以在init.project.rc檔案中修改(在系統啟動時就提公升裝置訪問許可權)。

在硬體抽象層模組檔案(so)檔案中,提供的函式呼叫open函式來開啟裝置檔案,比如/dev/gpio,如果不修改裝置檔案/dev/gpio的訪問許可權,那麼應用程式通過jni介面來呼叫硬體抽象層提供的函式介面來呼叫open函式開啟裝置檔案就會失敗,這表示當前使用者沒有許可權開啟裝置檔案/dev/gpio檔案。在預設情況下,只有root使用者才有許可權訪問系統的裝置檔案,由於一般的應用程式沒有root許可權的。

為了解決上面的問題,需要為使用者賦予訪問裝置檔案/dev/gpio的許可權。在linux系統中,可通過udev規則在系統啟動時修改裝置檔案的訪問許可權,但在android系統中沒有實現udev規則,而是提供uevent機制,可以在系統啟動時修改裝置檔案的訪問許可權。

在system/core/rootdir目錄下有乙個名為ueventd.rc的配置檔案,我們可以再裡面增加下面一行內容來修改裝置檔案/dev/freg的訪問許可權

/dev/gpio   0666 root  root

這表示所有的使用者均可以訪問裝置檔案/dev/gpio,修改了ueventd.rc檔案後可以重新編譯android源**工程才能生效,但為了節省時間可通過另一種簡單的方式。

在編譯android系統時,檔案/system/core/rootdir/uevent.rc會被拷貝到/out/target/product/prj/root目錄下,並且最終打包在ramdisk.img映象檔案(最小的檔案系統,它包括了初始化android系統所需要的全部核心檔案)中。當android系統啟動時,會把ramdisk.img映象檔案中的ueventd.rc檔案安裝在裝置根目錄下,並且由init程序來解析它的內容和修改相應的裝置訪問許可權:

所以只要我們能夠修改ramdisk.img映象檔案中的ueventd.rc檔案的內容,就可以修改裝置檔案/dev/gpio的訪問許可權了,下面介紹詳細的修改辦法。

1.     檢視ramdisk.img檔案格式

在\mediatek\source\kernel\trace32目錄下可以找到hsimobile77_ics2_ramdisk.img檔案,在\out\target\product\hsimobile77_ics2下有ramdik.img,我也把

hsimobile77_ics2_ramdisk.img拷貝到此目錄下,用file命令來檢視著兩個檔案(大小一樣)的型別,卻不一樣,分別是gzip compressed data,from unix和ramdisk.img,很奇怪為什麼不一樣。下面以hsimobile77_ics2_ramdisk.img舉例。

2.     解壓hsimobile77_ics2_ramdisk.img

從圖2可知hsimobile77_ics2_ramdisk.img是乙個gzip檔案,所以我們可以執行gunzip檔案來解壓。

先將hsimobile77_ics2_ramdisk.img該名為ramdisk.img.gz,然後用gunzip命令對它解壓,加壓後得到的ramdisk.img檔案儲存在cw6577目錄中。

3.     還原ramdisk.img映象檔案

解壓後的ramdisk.img檔案是乙個cpio格式的檔案(包含其他檔案盒有關資訊的歸檔檔案),因此我們可以執行cpio命令對它解除歸檔:

解除歸檔後的內容儲存在ramdisk目錄下,如下圖:

4.     修改ueventd.rc檔案

進入圖5的目錄,修改ueventd.rc檔案,增加下面的內容:

/dev/gpio   0666 root  root

5.     重新打包ramdisk.img映象檔案

先把ramdisk目錄歸檔成為cpio檔案,然後壓縮成為gzip檔案

Android系統修改硬體裝置訪問許可權

在硬體抽象層模組檔案 so 檔案中,提供的函式呼叫open函式來開啟裝置檔案,比如 dev gpio,如果不修改裝置檔案 dev gpio的訪問許可權,那麼應用程式通過jni介面來呼叫硬體抽象層提供的函式介面來呼叫open函式開啟裝置檔案就會失敗,這表示當前使用者沒有許可權開啟裝置檔案 dev gp...

遍歷系統硬體裝置資訊

以下 段演示如何顯示已經安裝的所有硬體裝置的列表 include include include include include int main int argc,char argv char envp enumerate through all devices in set.deviceinfo...

裝置系統功能修改

工作內容 1.頁面新增字段,當 合同型別 選擇 監理 增加對應的施工合同 監理總監字段 js 為 1 function else 10 11 增加的施工合同 監理總監字段,使用者點選會彈出乙個頁面,使用者在彈出的頁面中選擇對應資訊,該資訊會回填到施工合同 監理總監欄位中,施工合同頁面 為 1 2st...