como descobrir se o kernel ou o udev criaram um nó de dispositivo?

6

Existe alguma maneira de descobrir quem criou um nó de dispositivo? Se foi udev ou o próprio kernel?

No caso específico do meu, eu tenho duas webcams. Nós criados para eles são /dev/video0 e /dev/video1 . Infelizmente, isso não é uma tarefa constante. Agora eu pensei que seria o caso ao usar udev , mas quando eu crio uma regra udev , parece-me que video0 e video1 nós já foram criados antes de udev ser capaz de atribuir mais nó constante como /dev/videoLogitech .

Espero receber algumas sugestões sobre qual arquivo de registro ou qual comando pode me ajudar a descobrir o que acontece aqui.

    
por humanityANDpeace 01.02.2015 / 14:04

1 resposta

5

Se você quiser verificar a ordem das ações, use:

udevadm monitor --property

ao fazer isso, você recebe uma lista de ações. Quando você adiciona sua câmera, é provável que uma das primeiras entradas seja algo como:

KERNEL[110935.814197] add      /devices/.../video4linux/video1 (video4linux)
ACTION=add
DEVNAME=/dev/video1  <<<<---- devname

Como destacado por @goldilocks :

Unfortunately, if you are using systemd, it's version of udev has a complex "persistent naming scheme" that's hard coded into udevd, so you are right, just parsing the rules.d stuff could leave a lot of mysteries.

Também de man udev para systemd:

The following keys can get values assigned:

NAME The name to use for a network interface. See systemd.link(5) for a higher-level mechanism for setting the interface name. The name of a device node cannot be changed by udev, only additional symlinks can be created.

Nomeação e depuração

Sua melhor opção provavelmente usará algo como:

udevadm test $(udevadm info -q path -n video1)

Ele oferece uma "execução de teste" na (s) regra (s) e informa todos os erros.

Depois de adicionar / alterar uma regra, lembre-se de recarregar com:

udevadm control --reload-rules

Quando se trata de nomear um dispositivo, você provavelmente terá algo como:

NAME="smile2thecamera" ignored, kernel device nodes can not be renamed; 
      please fix it in /etc/udev/rules.d/83-webcam.rules:6

Você poderia usar um SYMLINK (se isso for suficiente) como em:

KERNEL=="video[0-9]", .... SYMLINK+="video-logitech"

Deve ser algo assim no teste:

creating link '/dev/video-logitech' to '/dev/video1'
creating symlink '/dev/video-logitech' to 'video1'

DEVLINKS=.... /dev/video-logitech
    
por 01.02.2015 / 15:18

Tags