udev falha ao criar o symlink persistentemente chamado usando ID_PATH

2

Eu quero nomear um dispositivo (USB) persistentemente, dependendo da porta à qual ele está conectado.

Usando o udevadmin, encontrei as seguintes informações

# udevadm info --name=input/event3 | grep ID_PATH
E: ID_PATH=platform-ci_hdrc.1-usb-0:1.1.4:1.0
E: ID_PATH_TAG=platform-ci_hdrc_1-usb-0_1_1_4_1_0

O dispositivo parece ter as propriedades ID_PATH e ID_PATH_TAG, que parecem com o que eu quero.

Eu adicionei um udev.rule correspondente

SYMLINK+="foo-%E{ID_PATH_TAG} foo1-$env{ID_PATH} foo2-$env{ID_PATH_TAG}"

(As 3 variantes estavam apenas tentando desesperadamente ... uma deve ser suficiente, uma vez que funciona.)

A regra é executada e não há erro no log (log level = debug).

No entanto, os links simbólicos criados são chamados

/dev/foo-
/dev/foo1-
/dev/foo2-

Parece que as propriedades ID_PATH e ID_PATH_TAG ainda não estão definidas quando minha regra é executada. Preciso prestar atenção em qualquer pedido?

    
por Uwe Geuder 21.09.2015 / 18:12

2 respostas

0

Eu vi que as regras existentes usando ID_PATH são todas de 60 * ou mais. O meu era 45- * para nenhum particular exceto razões históricas.

Renomear meu arquivo de regras mostra que é o número da regra que faz a diferença:

  1. 59-foo.rules : ID_PATH / ID_PATH_TAG expanda para string vazia
  2. 60-foo.rules : ID_PATH / ID_PATH_TAG expanda para string vazia
  3. 61-foo.rules : ID_PATH / ID_PATH_TAG expandir corretamente

A explicação está em 60-persistent-input.rules contendo

SUBSYSTEMS=="pci|usb|platform|acpi", IMPORT{builtin}="path_id"

Não consegui encontrar documentação para os recursos internos, mas acredito que o path_id embutido coloque o ID_PATH / ID_PATH_TAG no ambiente.

    
por 22.09.2015 / 07:58
1

Primeiro, execute este comando para obter a lista de atributos do seu dispositivo.

udevadm info -a -p $(udevadm info -q path -n <devpath>)

então você pode fazer algo assim

... SYMLINK+=”device_$attr{serial}”, ...

às vezes você precisa definir uma variável de ambiente com os dados de que precisa, algo assim.

... ENV{SERIAL_NUMBER}="$attr{serial_number}"

para usá-lo mais tarde assim.

... SYMLINK+="device_$env{SERIAL_NUMBER}"
    
por 21.09.2015 / 21:23

Tags