2009年5月25日

[plamo:29770] udev and /dev/cdrom, /dev/dvd, etc..

本多です

udev周りなのですが、defaultの状態だと次のような奇妙な現象が発生すると
思います。

条件: plamo-4.6で/etc/udev/rules.d/以下を変更していない。
#(但し、60-plamo_local.rulesの最初の数行(pmount関連)をcomment outしているのは可)
# udevのversionは137 - 142まで全て


現象:
1. cd等を挿入していない状態で起動。
2. /dev/cdrom, /dev/cdrw, /dev/dvd等が存在する事を確認。
3. cd (dvd)等を挿入。 mount,再生等はしない。挿入するのみ。
4. 不思議な事に/dev/cdrom, /dev/cdrw, /dev/dvdが消えています。

# よってdefaultでこれらを見に行くprogramsは動かない。
# net関連のdevciesでも以下の理由で不具合が発生する可能性があると思います。

理由:
これらはudevのcd/net generator_rulesが上手く動かないため、
/etc/udev/rules.d/70-persistent-cd.rules, 70-persistent-net.rules
に起動時attachされたcdとnet devicesが登録されない為です。
#実際 /etc/udev/rules.d/以下に70番台のfilesは出来ていないはずです
(通常は出来ていなくてはならない)。

詳細な過程を述べると、
1) rc.S の udevadm --triggerの時はrootfsはread onlyの状態です。
2) udevはtriggerによって、75番代のgenerator rulesを実行し
staticにattachされたcd/netのdevices情報を70-persistent-cd/net.rulesに
登録しようとします。しかし rootfsはread onlyなのでrule filesを/dev/.udev/以下に
作ります。(/lib/udev/rule_generator.fuctionsを参照)
3)cdが挿入されるとeventが発生して udevdが呼ばれます。
この時点では, rootfsはread可能な状態なので、udevは/etc/udev/rules.d/以下の
70-persistent-cd/net.rulesを確認しますが (本来はここにはsymlinkの操作が記述される)
これが空なのでsymlinkを削除してしまいます。

対策:
要はudevがtriggerされる時に,/etc/udevが書き込み可能な状態であるべきです。
rc.Sの起動順序を以下のように変更すると問題は解決します。

1) mount -w -n -t sysfs /sys /sys まではそのまま。
2) ここでrootfsのfsckとwrite update remountを実行
つまり、rc.Sのwrite test以降からremountまでの部分をここにもってくる。
3) mount -w -n -o mode=0755 -t tmpfs /dev /devを実行し
/devのstatic devicesを作成
4) udevを起動


Naofumi Honda

投稿者 xml-rpc : 2009年5月25日 12:54
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/85396
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。