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

3

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 faz algum processamento de mensagens. Quando o driver carrega o seu em "Initialize Mode", que só responde a uma mensagem específica. Para reinicializar as comunicações, preciso 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 descarregar o que causa um enorme problema com o projeto acima de tudo.

É possível abrir uma conexão com um dispositivo de caractere sem realmente ter um nó de dispositivo? Agora eu uso fopen ('/ dev / spi') e tudo funciona bem até que eu precise recarregar e a questão acima segue. Existe algum tipo de chamada de sistema que possa resultar em um descritor de arquivo para um número de nó Major / Minor específico sem ter o arquivo / dev / spi real?

    
por jecxjo 19.06.2014 / 23:22

1 resposta

1

Se o aplicativo incorreto abrir apenas os nós de dispositivo na /dev tree , você poderá colocar o nó do dispositivo em outro lugar, se isso funcionar com seu próprio programa.

O sistema de arquivos no qual 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.

(Disclaimer: Eu não testei isso, mas eu fiz coisas semelhantes antes ...)

Um exemplo seria montar um pequeno sistema de arquivos tmpfs , por exemplo, /my-dev/ e criar o nó do dispositivo lá.

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 principais : números de dispositivos menores; veja as páginas de manual para mount e mknod respectivamente.

... E, em seguida, use fopen("/my-dev/spi") no seu programa.

(E, claro, certifique-se de que udev ou similar não crie um nó para o dispositivo.)

    
por 20.06.2014 / 00:17