Różnica w użyciu między plikami urządzeń, ioctl, sysfs, netlink


12

Próbuję wyjaśnić, która jest najbardziej użyteczną (pod względem funkcjonalności) metodą interakcji z urządzeniami w systemie Linux. Jak rozumiem, pliki urządzeń ujawniają tylko część funkcjonalności (bloki adresowe w urządzeniach blokowych, strumienie w urządzeniach znakowych itp.). ioctl(2)wydaje się być najczęściej używany, ale niektórzy twierdzą, że to nie jest bezpieczne i tak dalej.

Przydałoby się kilka dobrych artykułów lub innych istotnych wskazówek.

Odpowiedzi:


9

ioctlzwykle idzie w parze z /devwpisem; zrobiłby to twój typowy kod

fd=open("/dev/mydevice",O_RDRW);
ioctl(fd,.....);

Jest to całkowicie standardowe zachowanie Uniksa. Wewnątrz sterownika jądra można umieścić kontrolę dostępu (np. rootMożna wykonywać tylko niektóre czynności lub wymagać specjalnej zdolności w celu uzyskania bardziej szczegółowego dostępu), co czyni go dość elastycznym i wydajnym.

Oczywiście oznacza to, że urządzenia mogą ujawniać znacznie więcej niż blokowe / znakowe działania do odczytu i zapisu; wiele rzeczy można zrobić za pośrednictwem ioctlpołączeń. Nie jest tak łatwy w użyciu ze skryptów powłoki, ale dość łatwo z Club perllub pythonlub podobny.

sysfswpisy są innym sposobem interakcji z kierowcami. Zazwyczaj każdy typ polecenia ma inną pozycję, więc napisanie sterownika może być skomplikowane, ale bardzo łatwo jest uzyskać dostęp za pośrednictwem przestrzeni użytkownika; proste skrypty powłoki mogą manipulować wieloma rzeczami, ale mogą nie być bardzo wydajne

netlinkkoncentruje się przede wszystkim (tak sądzę!) na przesyłaniu danych w sieci, ale można go wykorzystać do innych celów. Jest to naprawdę dobre w przypadku większych wolumenów przesyłania danych i ioctlw niektórych przypadkach ma być następcą .

Wszystkie opcje są dobre; Twój przypadek użycia może lepiej określić, jaki typ interfejsu ma zostać ujawniony przez sterownik.


1
Dodając więcej do pomieszania: "ioctl: Jednak ioctl jest nieaktualny w jądrze i trudno będzie uzyskać jakiekolwiek sterowniki z nowymi zastosowaniami ioctl akceptowanymi w górę. Opiekunowie jądra nie lubią ioctl, ponieważ sprawia, że ​​kod jądra i kod aplikacji są zbyt współzależne , i ciężko jest utrzymać je obie w wersjach jądra i architekturach. ” [Strona 255] „Mastering Embedded Linux Programming” autorstwa Chrisa Simmondsa [2017].
Israr

To dodaje pytanie: Czy możemy uzyskać dostęp do sysfs z C?
Israr
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.