ioctl
tiende a ir de la mano con una /dev
entrada; tu código típico haría
fd=open("/dev/mydevice",O_RDRW);
ioctl(fd,.....);
Este es un comportamiento perfectamente estándar de Unix. Dentro del controlador del kernel puede colocar controles de acceso (por ejemplo, solo root
puede hacer algunas cosas o requerir una capacidad específica para un acceso más preciso) lo que lo hace bastante flexible y potente.
Por supuesto, esto significa que los dispositivos pueden exponer mucho más que usar la actividad de lectura / escritura de bloque / carácter; Se pueden hacer muchas cosas a través de ioctl
llamadas. No es tan fácil de usar desde scripts de shell, pero bastante fácil de C
o perl
o python
o similar.
sysfs
Las entradas son otra forma de interactuar con los controladores. Normalmente, cada tipo de comando tendría una entrada diferente, por lo que puede ser complicado escribir el controlador, pero hace que sea muy fácil acceder a través del espacio de usuario; los scripts de shell simples pueden manipular muchas cosas, pero pueden no ser muy eficientes
netlink
se centra principalmente (¡creo!) en transferencias de datos de red, pero podría usarse para otras cosas. Es realmente bueno para grandes volúmenes de transferencia de datos y está destinado a ser un sucesor ioctl
en algunos casos.
Todas las opciones son buenas; su caso de uso puede determinar mejor qué tipo de interfaz exponer de su controlador.