【问题标题】:udev $kernel or %k substitution not expanding correctlyudev $kernel 或 %k 替换未正确扩展
【发布时间】:2015-03-11 22:31:47
【问题描述】:

我在这方面遇到了很多麻烦。提前感谢您的帮助。

我正在尝试将 $kernel%k 传递给 USB 录音机输入上的 bash 脚本。我有两个问题和一个挑战。

  1. %k$kernel 都不会扩展为“sdd”或“sdc”等,而是得到一堆数字。
  2. udev 在连接时运行相同的脚本两次,所以我唯一能想到的是因为该脚本为主内核运行一次,例如sdd 并再次用于分区 sdd1。但这只是猜测。

我必须应对的挑战是,有许多这样的设备在物理上以大约几秒钟的间隔插入。他们都匹配。我使用 usbmount 在插入设备后自动挂载设备,但即使在 bash 脚本中使用“睡眠”也是如此。所以.. 我知道如果我将确切的设备内核传递给 bash 脚本,我可以自己安装它们。但是,由于 %k 没有扩展到 sdd 或其他什么......我无法在 bash 脚本中运行 mount 命令。以下是我提出的规则。我错过了什么吗?

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

如果我运行blkid,它会显示所有插入设备的列表及其内核路径,但是我无法区分哪个与正在运行的 udev 规则有关。

如果没有人知道可能是什么问题,我可以让某人在插入所有设备后手动运行一个脚本,运行命令blkid,然后解析该信息以开始单独安装它们,但我更愿意找出第一种方法。

另外,如果第二种方法是要走的路,有人可以在运行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 的任何内容感兴趣??变成一个变量。

【问题讨论】:

  • 您正在采取什么行动来设置%k$kernel 的值? (您正在运行什么程序,或???)。祝你好运。
  • 我认为由于 udev 规则在设备输入上被激活,udev 知道设备是什么路径......因此%k 或 $kernel 会提供该信息。特别是因为如果我使用%n,它会正确扩展设备的正确内核编号。

标签: linux bash debian udev


【解决方案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" 匹配:usb22-12-1.22-1.2:1.0
    2. ATTRS{idVendor}=="125f" 匹配:2-1.22-1.2:1.0host7target7:0:07:0:0:0sdbsdb1
    3. ATTRS{idProduct}=="c96a" 匹配:2-1.22-1.2:1.0host7target7:0:07:0:0:0sdbsdb1(与 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
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 2020-09-10
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多