ioctl
tende a andar de mãos dadas com uma /dev
entrada; seu código típico faria
fd=open("/dev/mydevice",O_RDRW);
ioctl(fd,.....);
Esse é o comportamento Unix perfeitamente padrão. Dentro do driver do kernel, você pode colocar controles de acesso (por exemplo, apenas root
pode fazer algumas coisas ou exigir uma capacidade específica para acesso mais refinado), o que o torna bastante flexível e poderoso.
Obviamente, isso significa que os dispositivos podem expor muito mais do que usar atividades de leitura e gravação de bloco / caractere; muitas coisas podem ser feitas através de ioctl
chamadas. Não é tão fácil de usar a partir de scripts de shell, mas muito fácil a partir de C
ou perl
ou python
ou similar.
sysfs
entradas são outra maneira de interagir com os motoristas. Normalmente, cada tipo de comando teria uma entrada diferente; portanto, pode ser complicado escrever o driver, mas facilita o acesso pelo espaço do usuário; scripts shell simples podem manipular muitas coisas, mas podem não ser muito eficientes
netlink
é focado principalmente (eu acho!) nas transferências de dados da rede, mas poderia ser usado para outras coisas. É realmente bom para grandes volumes de transferência de dados e deve ser um sucessor ioctl
em alguns casos.
Todas as opções são boas; seu caso de uso pode determinar melhor que tipo de interface expor a partir do seu driver.