ioctl
neigt dazu, mit einem /dev
Eintrag Hand in Hand zu gehen ; Ihr typischer Code würde reichen
fd=open("/dev/mydevice",O_RDRW);
ioctl(fd,.....);
Dies ist das Standard-Unix-Verhalten. Innerhalb des Kerneltreibers können Sie Zugriffskontrollen einfügen (z. B. nur root
einige Dinge tun oder eine bestimmte Funktion für einen feinkörnigeren Zugriff erfordern), was ihn ziemlich flexibel und leistungsstark macht.
Dies bedeutet natürlich, dass Geräte viel mehr als nur Block- / Zeichen-Lese- / Schreibaktivitäten verwenden können. Viele Dinge können über ioctl
Anrufe erledigt werden . Gar nicht so einfach zu verwenden , um von Shell - Skripten, aber ziemlich einfach aus C
oder perl
oder python
oder ähnlichem.
sysfs
Einträge sind eine weitere Möglichkeit, mit Treibern zu interagieren. Normalerweise hat jeder Befehlstyp einen anderen Eintrag, so dass das Schreiben des Treibers kompliziert sein kann, der Zugriff über den Benutzerbereich jedoch sehr einfach ist. Einfache Shell-Skripte können viele Dinge manipulieren, sind aber möglicherweise nicht sehr effizient
netlink
konzentriert sich hauptsächlich (glaube ich!) auf Netzwerkdatenübertragungen, könnte aber auch für andere Zwecke verwendet werden. Es ist wirklich gut für größere Datenübertragungsmengen und soll ioctl
in einigen Fällen ein Nachfolger sein .
Alle Optionen sind gut; Ihr Anwendungsfall kann besser bestimmen, welche Art von Schnittstelle von Ihrem Treiber verfügbar gemacht werden soll.