Abra o dispositivo de personagem sem criar um nó de dispositivo

Abra o dispositivo de personagem sem criar um nó de dispositivo

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 devdefinida 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 tmpfssistema 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 mounte mknodrespectivamente.

...E então use fopen("/my-dev/spi")no seu programa.

(E, claro, certifique-se de que isso udevou algo semelhantenãocrie um nó para o dispositivo.)

informação relacionada