ioctl
прагне йти поруч із /dev
записом; ваш типовий код буде робити
fd=open("/dev/mydevice",O_RDRW);
ioctl(fd,.....);
Це абсолютно стандартна поведінка Unix. Всередині драйвера ядра ви можете поставити елементи управління доступом (наприклад, root
робити лише деякі речі або вимагати певної можливості для більш тонкого доступу), що робить його досить гнучким і потужним.
Звичайно, це означає, що пристрої можуть виявити набагато більше, ніж використовувати активність читання / запису блоку / символу; багато речей можна зробити за допомогою ioctl
дзвінків. Не так легко використовувати з сценаріїв оболонки, але досить легко з C
або perl
або python
або аналогічним.
sysfs
записи - це ще один спосіб взаємодії з драйверами. Зазвичай кожен тип команд матиме різний запис, тому писати драйвер може бути складним, але це дозволяє дуже легко отримати доступ через простір користувачів; прості сценарії оболонки можуть маніпулювати великою кількістю матеріалів, але можуть бути не дуже ефективними
netlink
в першу чергу орієнтована (я думаю!) на мережеві передачі даних, але це може бути використане для інших матеріалів. Це дійсно добре для більших обсягів передачі даних і має на увазі стати наступником ioctl
у деяких випадках.
Усі варіанти хороші; ваш випадок використання може краще визначити, який тип інтерфейсу можна експонувати у вашого драйвера.