Разница в использовании файлов устройств, ioctl, sysfs, netlink

Использование sed и перенаправление ввода-вывода:

{
  sed -n '1,64p' wizard-run;
  base64 package.deb;
  sed -n '66,$p' wizard-run;
} > wizard-run.tmp && mv wizard-run.tmp wizard-run
12
16.12.2018, 11:04
1 ответ

ioctl обычно идет рука об руку с записью / dev ; ваш типичный код будет делать

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

Это совершенно стандартное поведение Unix. Внутри драйвера ядра вы можете поместить элементы управления доступом (например, только root может делать некоторые вещи или требовать определенных возможностей для более детального доступа), что делает его довольно гибким и мощным.

Конечно, это означает, что устройства могут предоставлять гораздо больше, чем просто использовать блочно-символьные операции чтения-записи; многое можно сделать с помощью вызовов ioctl . Не так просто использовать из сценариев оболочки, но довольно просто из C или perl или python или аналогичных.

sysfs записи - это еще один способ взаимодействия с драйверами. Обычно каждый тип команды имеет отдельную запись, поэтому написать драйвер может быть сложно, но это очень упрощает доступ через пользовательское пространство; простые сценарии оболочки могут манипулировать множеством вещей, но могут быть не очень эффективными

netlink в первую очередь ориентирован (я думаю!) на передачу данных по сети, но его можно использовать для других вещей. Он действительно хорош для передачи больших объемов данных и в некоторых случаях может стать преемником ioctl .

Все варианты хороши; ваш вариант использования может лучше определить, какой тип интерфейса будет отображаться в вашем драйвере.

9
27.01.2020, 19:56

Теги

Похожие вопросы