Estou tendo um problema em que um aplicativo de terceiros está abrindo um nó de dispositivo que não deveria.
Eu escrevi um driver de dispositivo SPI Slave que processa algumas mensagens. Quando o driver carrega, ele está no "Modo de inicialização", que responde apenas a uma mensagem específica. Para reinicializar as comunicações, devo descarregar e recarregar o driver. O problema é que o sistema possui um aplicativo de terceiros, rodando como root, que abre todos os dispositivos de caracteres. A única maneira de fazer tudo isso funcionar é parar o aplicativo e descarregá-lo, o que causa um grande problema em todo o projeto.
É possível abrir uma conexão com um dispositivo de personagem sem realmente ter um nó de dispositivo? No momento eu uso fopen('/dev/spi') e tudo funciona bem até que eu precise recarregar e o problema acima ocorra. Existe algum tipo de chamada de sistema que possa resultar em um descritor de arquivo para um número de nó Principal/Secundário específico sem ter o arquivo/dev/spi real?
Responder1
Se o aplicativo incorreto abrir apenas nós de dispositivos na /dev
árvoreentão você pode colocar o nó do seu dispositivo em outro lugar, se isso funcionar com o seu próprio programa.
O sistema de arquivos em que o nó do dispositivo reside deve ter a opção de montagem dev
definida para ter tratamento especial dos arquivos do nó do dispositivo como tal.
(Isenção de responsabilidade: não testei isso, mas já fiz coisas semelhantes antes...)
Um exemplo seria montar um pequeno tmpfs
sistema de arquivos, por exemplo, /my-dev/
e criar o nó do dispositivo nele.
mkdir -p /my-dev
mount -t tmpfs -o dev,size=<size> tmpfs /my-dev
mknod /my-dev/spi <type> <maj> <min>
onde<size>
é o tamanho do tmpfs,<type>
é o tipo de nó do dispositivo e<maj> <min>
são os números de dispositivos principais: secundários; veja as páginas de manual de mount
e mknod
respectivamente.
...E então use fopen("/my-dev/spi")
no seu programa.
(E, claro, certifique-se de que isso udev
ou algo semelhantenãocrie um nó para o dispositivo.)