Ich habe vor kurzem einige Code bei der Arbeit geerbt, das ist alt 2.4.X Linux-Kernel-Treiber und ich habe damit beauftragt, sie auf einem neueren Kernel 2.6 oder höher arbeiten. Ich laufe auf OpenSUSE 12.1 mit einem 3.1.10 Kernel.Wie kann ich programmatisch Berechtigungen auf meinem Char-Gerät festlegen
Ich habe den ursprünglichen Code von register_chrdev() aktualisiert, um Aufrufe von class_create()/device_create() zu verwenden, und ich kann meine Geräte in/dev korrekt angezeigt werden. Mein aktuelles Problem ist, dass die Berechtigungen für das Gerät eingestellt werden, um r/w für Benutzer nur:
crw------- 1 root root 244, 0 Aug 7 07:57 gcanain
Ich weiß, ich kann „chmod“ die Datei über die Befehlszeile und oder ich kann udev Berechtigungen einrichten. .. aber gibt es das irgendwie programmatisch zu tun, so dass, wenn ich den Befehl insmod ausstelle, der Entwickler mit den richtigen Regeln schon an seinem Platz ist?
Gibt es eventuell vorhandene APIs, die ich aufrufen kann, irgendwelche Optionen, die ich in einer dieser Erstellungs-APIs vermisse?
Nur um zu verdeutlichen, ist ein Teil des Grundes, warum ich keine udev-Regeln verwenden möchte, dass ich die Namen der Gerätetreiber im Voraus nicht kenne. Die Gerätetreiber hervorgebracht werden in einer Schleife und so werden die Namen mit einer Ziffer angehängt, nNumDevs kann so ziemlich alles sein:
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);
}
Ich denke, dass Sie einfach gehen und 'udev' verwenden sollten. Geräteberechtigungen sind normalerweise der Pervue des lokalen Administrators, der möglicherweise andere Vorstellungen über den Zugriff hat als der Gerätetreiberautor. Sie könnten die Standardeinstellungen in '/ etc/udev/rules.d' oder etwas löschen. – larsks
Verstanden, aber wir (meine Gruppe) sind der Administrator des Systems, also wenn ich alles 777 haben wollte, könnte ich es tun. Außerdem habe ich ein Problem mit der Verwendung von rules.d (in der ursprünglichen Beschreibung aktualisiert), da die Namen der Gerätetreiber dynamisch erstellt werden ... es sei denn, ich missverstand die Verwendung von udev. – Mike
@Mike: Aber udev Regeln können Wildcars verwenden, um den Namen der Geräte ('KERNEL ==" foo * "') zu entsprechen und sie können auch den Namen des Treibers ('DRIVERS ==" bar "') zuordnen. – rodrigo