Подстановка udev $kernel или%k некорректна

У меня много проблем с этим. Спасибо заранее за любую помощь.

Я пытаюсь передать $kernel или же %k к bash-скрипту на входе USB-рекордера. У меня есть два вопроса и 1 вызов.

  1. ни %k или же $kernel расширяется до "sdd" или "sdc" и т. д. Вместо этого я получаю кучу чисел.
  2. udev дважды запускает один и тот же сценарий при подключении, поэтому я могу думать только о том, что сценарий запускается один раз для основного ядра, например sdd, и снова для раздела sdd1. Но это только предположение.

Проблема, с которой я должен бороться, состоит в том, что многие из этих устройств физически подключены на расстоянии примерно нескольких секунд друг от друга. И все они совпадают. Я использовал usbmount для автоматического монтирования устройств после их установки, но даже при использовании "sleep" в скрипте bash. Итак... Я знаю, что мог бы смонтировать их сам, если бы мне было передано точное ядро ​​устройства в скрипт bash. Тем не менее, так как%k не расширяется до sdd или чего-то еще.. Я не могу запустить команду mount в скрипте bash. Ниже приведено правило, которое я придумал. Я что-то пропустил?

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0271", RUN+="/home/user/recorder.sh %k"

Если я бегу blkid он показывает мне список всех подключенных устройств и их путь к ядру, однако я не могу определить, какое из них относится к какому правилу udev выполняется.

Если никто не знает, в чем может быть проблема, я мог бы заставить кого-то вручную запустить скрипт после того, как все устройства подключены, который запускает команду blkidи затем разбирает эту информацию, чтобы начать монтировать их по отдельности, но я бы предпочел выяснить первый способ.

Кроме того, если 2-й путь - это путь, может кто-нибудь помочь мне разобраться, чтобы получить только эту информацию при запуске blkid, К вашему сведению, все после первого двоеточия можно расположить в другом порядке, как показано ниже, поэтому, если вы все время считаете%2 равным LABEL="WS_400S"... это не будет. пример:

/dev/sdd1: SEC_TYPE="msdos" LABEL="WS_400S" TYPE="vfat"
/dev/sde1: SEC_TYPE="msdos" TYPE="vfat" LABEL="WS_400S"
/dev/sdf1: LABEL="WS_400S" SEC_TYPE="msdos" TYPE="vfat"

просто интересует все, что соответствует LABEL и выводит только /dev/sd?? в переменную.

1 ответ

Решение
  • Проблема здесь заключается в соответствии правила. Когда один USB-диск подключен, серия udev генерируются события, соответствующие всем созданным узлам устройства (дерево USB). Лист - это раздел (блочное устройство), а верхний родитель - шина PCI.

    Таким образом, правило соответствует двум узлам, ни один из которых не был листом с именем ядра sdxY ни его прямой родительский узел (диск) sdx,

  • Чтобы увидеть все дерево и проверить, сработало ли ваше правило, выполните:

    udevadm info --attribute-walk --name=/dev/sdb1

    Udevadm info starts with the device specified by the devpath and then
    walks up the chain of parent devices. It prints for every device
    found, all possible attributes in the udev rules key format.
    A rule to match, can be composed by the attributes of the device
    and the attributes from one single parent device.
    
      looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host7/target7:0:0/7:0:0:0/block/sdb/sdb1':
        KERNEL=="sdb1"
        SUBSYSTEM=="block"
        DRIVER==""
        ATTR{ro}=="0"
        ATTR{size}=="7892024"
        ATTR{stat}=="     174      606     1347      360        0        0        0        0        0      356      356"
        ATTR{partition}=="1"
        ATTR{start}=="63"
        ATTR{discard_alignment}=="0"
        ATTR{alignment_offset}=="0"
        ATTR{inflight}=="       0        0"
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host7/target7:0:0/7:0:0:0/block/sdb':
        KERNELS=="sdb"
        SUBSYSTEMS=="block"
        DRIVERS==""
        ATTRS{ro}=="0"
        ATTRS{size}=="7892087"
        ATTRS{stat}=="     189      655     1411     2208        0        0        0        0        0      600     2204"
        ATTRS{range}=="16"
        ATTRS{discard_alignment}=="0"
        ATTRS{events}=="media_change"
        ATTRS{ext_range}=="256"
        ATTRS{events_poll_msecs}=="2000"
        ATTRS{alignment_offset}=="0"
        ATTRS{inflight}=="       0        0"
        ATTRS{removable}=="1"
        ATTRS{capability}=="51"
        ATTRS{events_async}==""
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host7/target7:0:0/7:0:0:0':
        KERNELS=="7:0:0:0"
        SUBSYSTEMS=="scsi"
        DRIVERS=="sd"
        ATTRS{rev}=="0.00"
        ATTRS{type}=="0"
        ATTRS{scsi_level}=="3"
        ATTRS{model}=="USB Flash Drive "
        ATTRS{state}=="running"
        ATTRS{queue_type}=="none"
        ATTRS{iodone_cnt}=="0xe7"
        ATTRS{iorequest_cnt}=="0xe7"
        ATTRS{device_busy}=="0"
        ATTRS{evt_capacity_change_reported}=="0"
        ATTRS{timeout}=="30"
        ATTRS{evt_media_change}=="0"
        ATTRS{max_sectors}=="240"
        ATTRS{ioerr_cnt}=="0x1"
        ATTRS{queue_depth}=="1"
        ATTRS{vendor}=="ADATA   "
        ATTRS{evt_soft_threshold_reached}=="0"
        ATTRS{device_blocked}=="0"
        ATTRS{evt_mode_parameter_change_reported}=="0"
        ATTRS{evt_lun_change_reported}=="0"
        ATTRS{evt_inquiry_change_reported}=="0"
        ATTRS{iocounterbits}=="32"
        ATTRS{eh_timeout}=="10"
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host7/target7:0:0':
        KERNELS=="target7:0:0"
        SUBSYSTEMS=="scsi"
        DRIVERS==""
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host7':
        KERNELS=="host7"
        SUBSYSTEMS=="scsi"
        DRIVERS==""
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0':
        KERNELS=="2-1.2:1.0"
        SUBSYSTEMS=="usb"
        DRIVERS=="usb-storage"
        ATTRS{bInterfaceClass}=="08"
        ATTRS{bInterfaceSubClass}=="06"
        ATTRS{bInterfaceProtocol}=="50"
        ATTRS{bNumEndpoints}=="02"
        ATTRS{supports_autosuspend}=="1"
        ATTRS{bAlternateSetting}==" 0"
        ATTRS{bInterfaceNumber}=="00"
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2':
        KERNELS=="2-1.2"
        SUBSYSTEMS=="usb"
        DRIVERS=="usb"
        ATTRS{bDeviceSubClass}=="00"
        ATTRS{bDeviceProtocol}=="00"
        ATTRS{devpath}=="1.2"
        ATTRS{idVendor}=="125f"
        ATTRS{speed}=="480"
        ATTRS{bNumInterfaces}==" 1"
        ATTRS{bConfigurationValue}=="1"
        ATTRS{bMaxPacketSize0}=="64"
        ATTRS{busnum}=="2"
        ATTRS{devnum}=="13"
        ATTRS{configuration}==""
        ATTRS{bMaxPower}=="98mA"
        ATTRS{authorized}=="1"
        ATTRS{bmAttributes}=="80"
        ATTRS{bNumConfigurations}=="1"
        ATTRS{maxchild}=="0"
        ATTRS{bcdDevice}=="0100"
        ATTRS{avoid_reset_quirk}=="0"
        ATTRS{quirks}=="0x0"
        ATTRS{serial}=="a01782d293d17d"
        ATTRS{version}==" 2.00"
        ATTRS{urbnum}=="689"
        ATTRS{ltm_capable}=="no"
        ATTRS{manufacturer}=="ADATA"
        ATTRS{removable}=="removable"
        ATTRS{idProduct}=="c96a"
        ATTRS{bDeviceClass}=="00"
        ATTRS{product}=="ADATA USB Flash Drive"
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1':
        KERNELS=="2-1"
        SUBSYSTEMS=="usb"
        DRIVERS=="usb"
        ATTRS{bDeviceSubClass}=="00"
        ATTRS{bDeviceProtocol}=="01"
        ATTRS{devpath}=="1"
        ATTRS{idVendor}=="8087"
        ATTRS{speed}=="480"
        ATTRS{bNumInterfaces}==" 1"
        ATTRS{bConfigurationValue}=="1"
        ATTRS{bMaxPacketSize0}=="64"
        ATTRS{busnum}=="2"
        ATTRS{devnum}=="2"
        ATTRS{configuration}==""
        ATTRS{bMaxPower}=="0mA"
        ATTRS{authorized}=="1"
        ATTRS{bmAttributes}=="e0"
        ATTRS{bNumConfigurations}=="1"
        ATTRS{maxchild}=="8"
        ATTRS{bcdDevice}=="0000"
        ATTRS{avoid_reset_quirk}=="0"
        ATTRS{quirks}=="0x0"
        ATTRS{version}==" 2.00"
        ATTRS{urbnum}=="258"
        ATTRS{ltm_capable}=="no"
        ATTRS{removable}=="unknown"
        ATTRS{idProduct}=="0020"
        ATTRS{bDeviceClass}=="09"
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2':
        KERNELS=="usb2"
        SUBSYSTEMS=="usb"
        DRIVERS=="usb"
        ATTRS{bDeviceSubClass}=="00"
        ATTRS{bDeviceProtocol}=="00"
        ATTRS{devpath}=="0"
        ATTRS{idVendor}=="1d6b"
        ATTRS{speed}=="480"
        ATTRS{bNumInterfaces}==" 1"
        ATTRS{bConfigurationValue}=="1"
        ATTRS{bMaxPacketSize0}=="64"
        ATTRS{authorized_default}=="1"
        ATTRS{busnum}=="2"
        ATTRS{devnum}=="1"
        ATTRS{configuration}==""
        ATTRS{bMaxPower}=="0mA"
        ATTRS{authorized}=="1"
        ATTRS{bmAttributes}=="e0"
        ATTRS{bNumConfigurations}=="1"
        ATTRS{maxchild}=="3"
        ATTRS{bcdDevice}=="0313"
        ATTRS{avoid_reset_quirk}=="0"
        ATTRS{quirks}=="0x0"
        ATTRS{serial}=="0000:00:1d.0"
        ATTRS{version}==" 2.00"
        ATTRS{urbnum}=="26"
        ATTRS{ltm_capable}=="no"
        ATTRS{manufacturer}=="Linux 3.13.0-49-generic ehci_hcd"
        ATTRS{removable}=="unknown"
        ATTRS{idProduct}=="0002"
        ATTRS{bDeviceClass}=="09"
        ATTRS{product}=="EHCI Host Controller"
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.0':
        KERNELS=="0000:00:1d.0"
        SUBSYSTEMS=="pci"
        DRIVERS=="ehci-pci"
        ATTRS{irq}=="17"
        ATTRS{subsystem_vendor}=="0x1028"
        ATTRS{broken_parity_status}=="0"
        ATTRS{class}=="0x0c0320"
        ATTRS{companion}==""
        ATTRS{consistent_dma_mask_bits}=="32"
        ATTRS{dma_mask_bits}=="32"
        ATTRS{local_cpus}=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,0000000f"
        ATTRS{device}=="0x3b34"
        ATTRS{uframe_periodic_max}=="100"
        ATTRS{enable}=="1"
        ATTRS{msi_bus}==""
        ATTRS{local_cpulist}=="0-3"
        ATTRS{vendor}=="0x8086"
        ATTRS{subsystem_device}=="0x040a"
        ATTRS{numa_node}=="-1"
        ATTRS{d3cold_allowed}=="1"
    
      looking at parent device '/devices/pci0000:00':
        KERNELS=="pci0000:00"
        SUBSYSTEMS==""
        DRIVERS==""
    
    1. SUBSYSTEM=="usb" Матчи: usb2, 2-1, 2-1.2, 2-1.2:1.0
    2. ATTRS{idVendor}=="125f" Матчи: 2-1.2, 2-1.2:1.0, host7, target7:0:0, 7:0:0:0, sdb, sdb1
    3. ATTRS{idProduct}=="c96a" Матчи: 2-1.2, 2-1.2:1.0, host7, target7:0:0, 7:0:0:0, sdb, sdb1 (такой же как ATTRS{idVendor}=="07b4")

    Для запуска правила все условия должны совпадать. Так только 2-1.2 & 2-1.2:1.0 узлы вызовут это правило.

  • Способ подтверждения написать новые правила как:

    ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="125f", ATTRS{idProduct}=="c96a", RUN+="/bin/sh -c 'echo `date` %k %p >> /tmp/usb-key-nodes.log' "
    

    После перезагрузки правил и подключения ключа:

    tail /tmp/usb-key-nodes.log

    Mon Jul 6 17:08:38 CET 2015 1-2 /devices/pci0000:00/0000:00:14.0/usb1/1-2
    Mon Jul 6 17:08:38 CET 2015 1-2:1.0 /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0
    
Другие вопросы по тегам