如何在 Linux 中检测 SD 卡插入(仅 SD 卡,而不是读卡器)?

如何在 Linux 中检测 SD 卡插入(仅 SD 卡,而不是读卡器)?

我有一台无头 Debian (3.2.0-3-686-pae),我想将一个独立的读卡器连接到它来自动处理我的照片。这个想法是,读卡器将一直插在电源上,我只需插入 SD 卡即可。

不幸的是,当我插入卡时它没有被检测到。

  • 读卡器被正确识别
  • 当我将读卡器与已插入的 SD 卡连接时,两者都能正确识别,并且卡会自动安装。

因此,这是将卡插入无法识别的工作读卡器的操作。/var/log/messages(或其他地方)中没有消息。插入读卡器后,消息是正确的:

Aug  4 14:25:03 server kernel: [711743.411320] usb 1-6: USB disconnect, device number 5
Aug  4 14:25:12 server kernel: [711751.964021] usb 1-6: new high-speed USB device number 6 using ehci_hcd
Aug  4 14:25:12 server kernel: [711752.097364] usb 1-6: New USB device found, idVendor=058f, idProduct=6366
Aug  4 14:25:12 server kernel: [711752.097369] usb 1-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Aug  4 14:25:12 server kernel: [711752.097373] usb 1-6: Product: Mass Storage Device
Aug  4 14:25:12 server kernel: [711752.097375] usb 1-6: Manufacturer: Generic
Aug  4 14:25:12 server kernel: [711752.097377] usb 1-6: SerialNumber: 058F63666433
Aug  4 14:25:12 server kernel: [711752.098062] scsi4 : usb-storage 1-6:1.0
Aug  4 14:25:13 server kernel: [711753.224612] scsi 4:0:0:0: Direct-Access     Multiple Card  Reader     1.00 PQ: 0 ANSI: 0
Aug  4 14:25:14 server kernel: [711753.810820] sd 4:0:0:0: [sdc] 1984000 512-byte logical blocks: (1.01 GB/968 MiB)
Aug  4 14:25:14 server kernel: [711753.811559] sd 4:0:0:0: [sdc] Write Protect is off
Aug  4 14:25:14 server kernel: [711753.829719]  sdc: sdc1
Aug  4 14:25:14 server kernel: [711753.840025] sd 4:0:0:0: [sdc] Attached SCSI removable disk

我想知道我是否在某个地方遗漏了什么(上述行为是开箱即用的 - 我不需要配置任何东西)-或者-从设计上来说,卡插入到已经连接的读卡器中根本无法被识别。


编辑:虽然论坛讨论声称缺少消息是正常的,但显然对某些人来说是正常的(感谢 Piskvor nad darnir 的评论)。我将保留未回答的问题并向 Debian 提交错误 - 如果有任何进展,将更新此帖子。

编辑:归档错误 #684306(bugs.debian.org)

答案1

以下是我解决这个问题的方法:

  1. 安装 udisks 包
  2. 运行 udisks --poll-for-media

然后,我通过 udev 规则触发一个脚本,该脚本负责自动从我的 CF 卡下载数据。

答案2

我怀疑块设备的轮询已被禁用。

检查该值

cat /sys/module/block/parameters/events_dfl_poll_msecs

是 0,则设为 2000

echo 2000 > /sys/module/block/parameters/events_dfl_poll_msecs

现在运行时检测应该可以工作了。

通常,udev 规则包含在此节点写入 2000 的属性。因此,如果缺少该 udev 包,请安装它。

答案3

编辑:请忽略(参见主问题中的编辑)。我留下“答案”,以便评论可以参考一些东西)

好吧,在浏览了各种论坛之后,看起来目前这是不可能的。从技术上讲,似乎有一种方法可以做到这一点(因为插入会产生特定的硬件事件),但这并没有实现。这非常不幸,因为有很多可能的应用程序。就我而言,这还不算太糟,因为读卡器是独立的,但对于内置的读卡器来说就比较棘手了(尽管在这种情况下,处理方式可能不同,我不知道,因为我没有读卡器)

相关内容