Niedawno odziedziczyłem jakiś kod w pracy, to są stare sterowniki jądra 2.4.X Linuksa i miałem zadanie, aby działały na nowszym jądrze 2.6 lub nowszym. Używam wersji OpenSUSE 12.1 z jądrem 3.1.10.Jak mogę programowo ustawić uprawnienia do mojego urządzenia char? Dowego
Zaktualizowałem oryginalny kod z register_chrdev(), aby używać wywołań class_create()/device_create(), i widzę, że moje urządzenia są prawidłowo wyświetlane w/dev. Mój obecny problem jest to, że uprawnienia dla mojego urządzenia są ustawione na R/W tylko użytkownik:
crw------- 1 root root 244, 0 Aug 7 07:57 gcanain
wiem, że może „chmod” plik poprzez linię poleceń, a czy mogę skonfigurować uprawnienia udev. ... ale czy jest tak, aby zrobić to programowo, tak, że kiedy wydam komendę insmod, dev zostanie zamontowany z poprawnymi regułami już istniejącymi?
Czy istnieją jakieś interfejsy API, które mogę wywołać w tym celu, wszelkie opcje, których brakuje w jednym z tych interfejsów API tworzenia?
Dla wyjaśnienia, część powodów, dla których nie chcę używać reguł udev, to fakt, że nie znam nazw sterowników urządzeń z wyprzedzeniem. Sterowniki urządzeń są zrodził się w pętli, a więc nazwy są dołączane z cyfrą, nNumDevs może być prawie wszystko:
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);
}
Myślę, że powinieneś po prostu użyć "udev". Uprawnienia dostępu do urządzenia są zazwyczaj związane z lokalnym administratorem, który może mieć inne pomysły na dostęp niż autor sterownika urządzenia. Możesz usunąć ustawienia domyślne w '/ etc/udev/rules.d' lub coś podobnego. – larsks
Zrozumiałem, ale my (moja grupa) jesteśmy administracją systemu, więc gdybym chciał, aby wszystko miało 777, mógłbym to zrobić. Mam również problem z używaniem rules.d (zaktualizowany w oryginalnym opisie), ponieważ nazwy sterowników urządzeń są tworzone dynamicznie ... chyba że źle zrozumiem jak używać udev. – Mike
@Mike: Ale reguły udev mogą używać dzianek w celu dopasowania nazwy urządzeń ('KERNEL ==" foo * "') i mogą również pasować do nazwy sterownika ('DRIVERS ==" bar "'). – rodrigo