我最近在工作中繼承了一些代碼,這是舊的2.4.X Linux內核驅動程序,我一直負責讓它們在較新的內核2.6或更高版本上工作。我在3.1.10內核上運行OpenSUSE 12.1。如何以編程方式在我的char設備上設置權限
我已經更新了來自register_chrdev()的原始代碼以使用class_create()/ device_create()調用,並且我可以正確地看到我的設備顯示在/ dev中。我現在的問題是,我的設備的權限被設置爲R/W僅用於用戶:
crw------- 1 root root 244, 0 Aug 7 07:57 gcanain
我知道我可以在「文件模式」通過命令行的文件,或者我可以設置udev的權限。 ..但無論如何,以編程方式執行此操作,以便當我發出insmod命令時,開發人員將使用正確的規則進行裝載?
是否有任何API可能存在,我可以調用這樣做,我在這些創建API之一中缺少的任何選項?
只是爲了澄清,我不想使用udev規則的部分原因是我不知道設備驅動程序的名稱提前。設備驅動程序是在一個循環中催生等名字都以數字追加,nNumDevs可相當多的東西:
for (i = 0; i < nNumDevs; i++) {
strcpy(Modname,GC_ANAIN_MODULE_NAME);
strcat(Modname,"%d");
device_create(c1, NULL, MKDEV(nMajor, GC_ANAIN_MINOR_VERSION+i), NULL, Modname, i);
}
我認爲你應該繼續使用'udev'。設備權限通常是本地管理員的權限,與設備驅動程序作者相比,本地管理員對訪問權限可能有不同的看法。你可以在'/ etc/udev/rules.d'中刪除默認設置。 – larsks 2012-08-07 13:07:57
瞭解了,但我們(我的團隊)是系統的管理員,所以如果我想讓所有東西都擁有777,我可以這麼做。另外,由於設備驅動程序的名稱是動態創建的,所以我在使用rules.d(在原始描述中更新)時遇到了問題......除非我誤解了如何使用udev。 – Mike 2012-08-07 13:32:43
@Mike:但是udev規則可以使用wildcars來匹配設備的名稱('KERNEL ==「foo *」'),並且它們也可以匹配驅動程序的名稱('DRIVERS ==「bar」')。 – rodrigo 2012-08-07 14:26:33