android下dev裝置的許可權問題

2021-08-08 15:04:41 字數 2125 閱讀 2848



**:博主寫的很好,留做筆記

倘若應用程式需要對/dev/***進行讀寫操作,就需要提公升其許可權。提權方法不唯一,需要根據具體需求情況而選擇。歸根結底,終究都落到chmod 777 /dev/*** 上,不同的是,chmod操作被執行在何時何地,在此做個分析總結。

核心啟動後會執行/system/init,傳說中的系統1號程序,init程式起初的任務是初始化,包括各種mkdir來構建檔案系統,得到硬體資訊建立裝置節點,安裝sigchld訊號來**殭屍程序的資源,解析init.rc啟動指令碼等等,然後init程式變身為property_service來管理系統的許可權。我們可以下手的地方有兩處: device_init和init.rc 

。這個方案是大家用的比較多的,在其中新增chmod操作很簡單不多說。

這個方案用的比較少,先了解下device.c。

device_init在/system/core/init/device.c中,詳細分析如下:

[cpp]view plain

copy

//分別遍歷/sys/class /sys/block /sys/devices

device_init()  

//後面有個遞迴 /sys下是核心生成的裝置,這就相當於udev的作用

do_coldboot()  

}  //從socket裡讀出add處理

handle_device_fd()   

}  //得到裝置的相關資訊建立裝置節點

make_device()   

get_device_perm()  

elseif(get_device_perm_inner(devperms,path, uid, gid, &perm) == 0)else

//得到devperms結構體的資訊

get_device_perm_inner  

else

*uid= perms[i].uid;  

*gid= perms[i].gid;  

*perm= perms[i].perm; //許可權位

return0;  

}  }  

這是devperms的具體內容  

structperms_ ;  

staticstructperms_ devperms = ,  

,  ,  

,  ,  

,  ,  

,  ,  

/* logger should be world writable (for logging) but not readable*/

,  /*these should not be world writable */

,  ,  

,  ,  

,  ,  

,  ,  

,  ,  

,  ,  

,  ,  

,  ,  

,  ,  

,  ,  

,  ,  

,  ,  

,  ,  

,  ,  

,  ,  

,  };  

init.rc指令碼和老版本android中的init.goldfish.rc指令碼很早就被parse_config_file()函式解析將指令碼內容分為幾個段,early-init,init,early-boot,boot,和各個服務。然後在不同的時間點上執行各個段得命令或者開啟各種服務。

init.c的一段節選:

[cpp]view plain

copy

intmain(intargc, 

char

**argv)    

device_init其實就是linux中的udev的乙個簡單的替代。把/sys/下的所有核心提供的裝置都安排在/dev下建立裝置節點。如果要改動/dev/一些裝置的許可權,可以把chmod 777寫在init.rc中,但是要注意寫的位置,不能太早執行,不能寫在early-init段內,因為那時/dev/下的裝置節點還沒有被建立。

在devices.c中修改的方法隱藏的較深不容易被發現,但是如果init.rc內再次修改就可能把之前的修改覆蓋掉。

為Android應用程式讀取 dev下裝置而提權2

在 為android應用程式讀取 dev下裝置而提權 一 中,簡單總結了提權的兩種方法 device init和init.rc 在此篇文章中,我將詳細總結的是稍一不留神,就容易把人弄暈乎的init.c device init和init.rc 三者之間的關係,ta們到底是如何工作的。ls一下syste...

dev下的檔案

dev 是裝置 device 的英文縮寫。這個目錄對所有的使用者都十分重要。因為在這個目錄中包含了所有linux系統中使用的外部裝置。但是這裡並不是放的外部裝置的驅動程式。這一點和我們常用的windows,dos作業系統不一樣。它實際上是乙個訪問這些外部裝置的埠。我們可以非常方便地去訪問這些外部裝置...

Linux的 dev裝置目錄詳解

在linux下,dev目錄是很重要的,各種裝置都在下面。下面簡單總結一下 dev是裝置 device 的英文縮寫。dev這個目錄包含了所有linux系統中使用的外部裝置。但是這裡並不是放的外部裝置的驅動程式,這一點和windows,dos作業系統不一樣。它實際上是乙個訪問這些外部裝置的埠,但是沒有入...