Como criar vários dispositivos em um subdiretório / dev / (driver do kernel)

0

Estou escrevendo um módulo do kernel. Eu posso facilmente criar um dispositivo de caractere em / dev / mas eu quero ter 3 dispositivos disponíveis para o meu usuário e seria bom colocá-los todos sob um subdiretório / dev / .

Exemplo possível (existe na minha caixa do openSUSE):

# ls -l /dev/bsg
total 0
crw-rw---- 1 root root 252, 0 Jul 17 14:28 0:0:0:0
crw-rw---- 1 root root 252, 1 Jul 17 14:28 0:0:1:0
crw-rw---- 1 root root 252, 2 Jul 17 14:28 0:0:2:0
crw-rw---- 1 root root 252, 3 Jul 17 14:28 0:0:3:0
crw-rw---- 1 root root 252, 4 Jul 17 14:28 0:0:4:0
crw-rw---- 1 root root 252, 5 Jul 17 14:28 1:0:0:0

(Eu olhei para o código bsg.c, mas estou perdendo para o que "pai" os dispositivos de caractere são adicionados).

Como posso fazer algo semelhante?

    
por Sman865 18.07.2018 / 00:10

1 resposta

0

Eu encontrei uma maneira que funciona para mim, uma que não usa regras do udev (eu prefiro fazer isso de forma programática). Isso é mais fácil do que eu pensava antes.

  1. alloc_chrdev_region para o número de dispositivos.
  2. Crie turmas para cada dispositivo (cada um com nomes diferentes)
  3. Defina o campo ' devnode ' das classes com sua função personalizada ex: return kasprintf(GFP_KERNEL, "name/%d", global++); . É aqui que a nomeação acontece. Udev deve honrar essa função.
  4. Crie cdevs com cdev_init & & cdev_add e defina seus papéis.
  5. Crie dispositivos com device_create (pai é NULL)

Note que não há hierarquia de dispositivos aqui, apenas dispositivos independentes que estão no mesmo diretório / dev /. Os nomes especificados nas etapas 2-5 terminarão em / sys /.

    
por 26.07.2018 / 19:48