tetsuya.ooka
2014年9月19日 13時22分
お世話になっております。ロームの大岡です。
Armadillo実践開発ガイドの「第8章 8.7.1 USBメモリを使用してのアップデート」に記載されているudevのルール
「図8.13 USBメモリが接続された時にスクリプトを実行するudevルール(z99_usb_image_update.rules)」は
内容が間違ってはいませんか?
実際にこの通り試してみるとUSB取り外し時にスクリプトが実行されず、
以下のように修正すると期待通り動作しました。
KERNEL=="sd*[0-9]*",BUS=="usb",ACTION=="add",RUN+="/etc/config/usb_image_update.sh start $KERNEL" KERNEL=="sd*[0-9]*",ACTION=="remove",RUN+="/etc/config/usb_image_update.sh stop"
メーリングリストにも以前に以下の投稿があって、
多分この人も実践開発ガイドを参考にして間違えてしまったのではないでしょうか。
[Armadillo:08908] シリアルUSBの挿抜のイベント取得について
http://lists.atmark-techno.com/pipermail/armadillo/2013-June/008911.html
コメント
at_daisuke.sasaki
佐々木大輔です。
ご指摘ありがとうございます。
ACTION=”remove”の検出時にSYSFSのエントリを見にいく「BUS(SUBSYSTEMS *)」を指定するのは不適切ですね。
KernelからのUEVENTをudevdが受け取り、SYSFSを見に行った時には、
既にファイルが無くなってしまっているようです。
*: Armadilloのudevでは、BUSとSUBSYSTEMSのどちらでもルールが書けますが、
udev 174でBUSは削除され、SUBSYSTEMSでルールを記載するようになっています。
確実にUSBストレージが抜けた事を、条件に入れたい場合は、「DEVPATH」を入れると良いです。
KERNEL=="sd*[0-9]*", DEVPATH=="*usb*", ACTION=="remove", RUN+="/etc/config/usb_image_update.sh stop"
UEVENTに対しどのようなDEVPATHとなっているかは、
udevmonitor に「--env]オプションを付加する事で調べる事ができます。
[[armadillo ~]# udevmonitor --env udevmonitor prints the received event from the kernel [UEVENT] and the event which udev sends out after rule processing [UDEV] ・・・省略・・・ UEVENT[947003397.256274] remove@/devices/platform/fsl-ehci.1/usb2/2-1/2-1:1.0/host56/target56:0:0/56:0:0:0/block/sda/sda1 ACTION=remove DEVPATH=/devices/platform/fsl-ehci.1/usb2/2-1/2-1:1.0/host56/target56:0:0/56:0:0:0/block/sda/sda1 SUBSYSTEM=block MAJOR=8 MINOR=1 DEVTYPE=partition SEQNUM=3177 ・・・省略・・・
余談になりますが、DEVPATHを以下のように書くと、USBストレージが抜けたポートも条件に入れる事ができます。
・Armadillo-440の下段のUSBストレージが抜けた事を検知しシェルスクリプトを動作させる
KERNEL=="sd*[0-9]*", DEVPATH=="/devices/platform/fsl-ehci.1/usb2/*", ACTION=="remove", RUN+="/etc/config/usb_image_update.sh stop"
・Armadillo-440の上段のUSBストレージが抜けた事を検知しシェルスクリプトを動作させる
KERNEL=="sd*[0-9]*", DEVPATH=="/devices/platform/fsl-ehci.0/usb1/*", ACTION=="remove", RUN+="/etc/config/usb_image_update.sh stop"
ご指摘いただいた、Armadillo 実践開発ガイド 第2部の記述については、
今後のアップデートで修正します。
izawa
2014年9月19日 15時11分
毎度お世話様、伊澤@ITTOです。
この件、私の方でも丁度昨日引っ掛かりまして、やはり同じように解決しました。
まぁ、目的はアップデートではありませんでしたが。
ポイントは二点ですね。
・ダブルクォーテーションが余計
・ACTION="remove"にBUS指定は不要
重ねて報告まで。