Emulando um dispositivo de caractere do userspace

0

No momento, estamos trabalhando na construção de um sistema para visualização de dados para diferentes sensores.

Para tornar possível o desenvolvimento do aplicativo Linux, precisaríamos emular o comportamento dos diferentes dispositivos de caracteres, pois os drivers de dispositivos e o design do hardware ainda não estão prontos.

Então existe uma maneira de receber as chamadas do sistema (open (), read (), write () ...) em um arquivo específico dentro de um programa C, por exemplo, que também é executado a partir do userspace?

                                   read()
(Userspace Application/Database) <========= (~/mydev) <===== (dummy_driver)
    
por free_hat 22.10.2018 / 21:54

1 resposta

0

Você pode usar o cuse Dispositivo de caractere no espaço do usuário que faz parte de fuse , disponível como um pacote na maioria dos sistemas. Um exemplo de "driver" é cuse.c . Quando você compila e executa este exemplo como:

sudo ./cuse -f --name=mydevice

cria /dev/mydevice e recebe todas as chamadas de abertura, fechamento, leitura, gravação e ioctl. Para "desmontar" o dispositivo (na terminologia do fusível), apenas mate o processo.

O exemplo provavelmente não é distribuído, então para compilar, baixar (ou clonar) o zip , mude para libfuse/example directory, e compile como mostrado no arquivo C:

gcc -Wall cuse.c $(pkg-config fuse --cflags --libs) -o cuse -I.

Talvez seja necessário instalar um pacote fuse-devel ou semelhante para que isso funcione. Se você precisar implementar mais ioctls, confira este link fornecido como um comentário para a resposta deste pergunta do stackexchange .

As alternativas mais simples a serem consideradas são pty pseudo-tty, ou tty0tty que é um módulo do kernel que une duas portas seriais.

    
por 24.10.2018 / 13:38