web-dev-qa-db-ja.com

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

私はどこかに何かが足りないのではないかと思っていました(上記の動作はそのままです-何も構成する必要はありませんでした)-or-すでに接続されているカードリーダーにカードを挿入することは、設計上は認識されていません。


[〜#〜] edit [〜#〜]:フォーラムの議論では、メッセージの欠如は正常であると主張していますが、明らかに一部の人にとっては機能します(Piskvorに感謝します)コメントについてはnad darnirをご覧ください)。私は質問に答えずにDebianにバグを報告します-進展があればこの投稿を更新します。

[〜#〜] edit [〜#〜]:filed Bug#684306 (bugs.debian.org)

9
WoJ

これが私がこの問題を解決した方法です:

  1. Udisksパッケージをインストールします
  2. Udisks--poll-for-mediaを実行します

次に、udevルールを使用して、CFカードからのデータの自動ダウンロードを処理するスクリプトをトリガーします。

4
Erik Forsberg

[〜#〜] edit [〜#〜]:無視してください(メインの質問の編集を参照)。コメントが何かを参照できるように、「回答」を残します)

さて、さまざまなフォーラムを巡回した後、これは現在不可能のようです。技術的には(挿入によって特定のHWイベントが生成されるため)それを実行する方法があるように見えますが、これは実装されていません。考えられるアプリケーションがたくさんあるので、これは非常に残念です。私の場合、カードリーダーはスタンドアロンであるため、これはそれほど悪くはありませんが、組み込みのものには注意が必要です(ただし、その場合は処理が異なる可能性がありますが、カードリーダーがないためわかりません)。

0
WoJ

ブロックデバイスのポーリングが無効になっていると思われます。

この値を確認してください

cat /sys/modules/block/parameters/events_dfl_poll_msecs

その0は2000にする

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

これで、実行時検出が機能するはずです。

通常、udevルールにはこのノードで2000を書き込むための属性が含まれているため、そのudevパッケージがない場合はインストールしてください。

0
mrigendra