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.
-
alloc_chrdev_region
para o número de dispositivos. - Crie turmas para cada dispositivo (cada um com nomes diferentes)
- 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. - Crie cdevs com
cdev_init
& &cdev_add
e defina seus papéis. - 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 /.