No kernel, cada driver fornece uma série de métodos para as várias operações que podem ser executadas em um arquivo: abrir, fechar, ler, escrever, procurar, ioctl, etc. Esses métodos são armazenados em um struct file_operations
. Para dispositivos, os métodos são fornecidos pelo driver que registrou esse dispositivo em particular (ou seja, aquela combinação específica de bloco / caractere, número principal e número menor).
Um driver pode implementar apenas alguns dos métodos; os padrões são fornecidos. Os padrões geralmente não fazem nada e retornam sucesso (se for sensato não fazer nada por esse método) ou EINVAL (se não houver nenhum padrão sensato e a falta de um método significa que o recurso não é suportado).
“Erro de gravação: argumento inválido” significa que o método write
do driver retorna EINVAL. A explicação mais provável é que esse driver não possui um método write
. É bastante rotineiro para os condutores não suportar certas acções, e. alguns drivers suportam apenas ioctl e não leitura / gravação, alguns drivers são intrinsecamente unidirecionais (por exemplo, um dispositivo de entrada) e suportam apenas leitura e não gravação ou vice-versa.
"Argumento inválido" não tem nada a ver com permissões, é o que o dispositivo é capaz de fazer. Você receberia um erro de permissão se não tivesse permissão de gravação, mas tem permissão para falar com o motorista. É só que o que você está pedindo ao motorista para fazer é algo que não tem noção.