Fedoraインストール後にまずやることはサービスを止めることなんだけど、いつも、udev,hald,dbusを止めていいのかどうか迷うことと思います。
だから何?
ここでは、そこらへんの周辺の話を書いていこうと思います。今後、Fedoraをインストールしたあとの作業時に参考にしていただければ幸いです
(Linuxのここらへんの話は大変流動的なようで、来週にはここに書いてあることが無駄になるかもしれません : 2007-7-15(Sun))
かつて混沌としていたLinuxのドライバまわり(自分でinsmod書いたりhotplugとかmurasameとかdevfsとか懐かしいなー。嘘ですdevfs全然知らない。)。 しかし、そういった話は大体思い出の中だけの話で、今ではLinuxでも大体のものはそれなりにうまく動いてる。
さて、ここらへんを支えている技術のひとつが、udevとか、そういう系なのだけど、ここらへんはもうちょっと理解してから書く
atodekaku !
おげーわからん。ちょっと読めばわかると思ったのだけど。
/lib/modules/uname-r/modules.* を見てなんかやってるのがあるのだと思う(誰が?)
udevdの挙動を簡単に説明すると、なんかデバイスが見つかると、適切なノードを/dev以下に作る、といったところだろうか
これを実現するには、デバイスが見つかったときに、そのことがカーネルからudevdに通知されなければならない。
udevdはどうやってこのタイミングを通知してもらってるのだろうか。また、デバイスによっては、さらにいくつか必要な情報があるだろうけど、udevdはをどうやってカーネルから取得してるのだろうか
カーネルがユーザ空間にイベントを通知する仕組みとして、ueventというのがある。
netlinkのソケットを通じて、デバイスが繋がった、外された、等のイベントが文字列として送られてくるだけ。
↓以下のプログラムで動作が確認できる(要root)
#include <sys/socket.h> #include <linux/netlink.h> #include <string.h> int main() { struct sockaddr_nl snl; char buf[512]; int r; int fd; memset( &snl, 0, sizeof(snl) ); snl.nl_family = AF_NETLINK; snl.nl_pid = getpid(); snl.nl_groups = 1; fd = socket( PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT ); if ( fd < 0 ) perror("socket"); r = bind( fd, (struct sockaddr*)&snl, sizeof(snl) ); if ( r < 0 ) perror("bind"); while ( 1 ) { int len = recv( fd, buf, sizeof(buf), 0 ); if ( len < 0 ) break; puts( buf ); } }
udevdは、カーネルからueventが通知されると、その情報を使って/dev以下にノードを作る…のだけど、実際、 (atodekaku)
namedevてなに
僕があとで読む用
http://wiki.flowernet.gr.jp/?UdhHowto : 概要
http://www.gentoo.org/doc/ja/udev-guide.xml : Gentooでの設定
http://opentechpress.jp/kernel/03/06/05/2134218.shtml: namedev