サーバーに増設したカードとかUSB機器とか、ちゃんと認識されてるか確かめたい
どこを見たらええん?
【疑問】挿したデバイスが認識されてるか分からん。/proc・/sys・/dev と lspci・lsusb・lsmod・modprobe【LPICレベル1】
前提のおさらい。FHS で、/proc と /sys はカーネルの情報を見せる場所、/dev はデバイスファイルの場所と決まってる
>>1
3つの場所の役割
/proc:プロセスとカーネルの情報(cpuinfo・meminfo・interrupts・ioports・dma など)
/sys:カーネルが見ているデバイスやドライバの情報(sysfs)
/dev:プログラムがデバイスを読み書きするためのデバイスファイル
>>3
試した仮想マシンで/proc/cpuinfo に CPU の型番、/proc/meminfo に MemTotalls /sys/block → vda vdb とループデバイスls -l /dev/vda → 先頭が b(ブロックデバイス)、/dev/null は c(キャラクタデバイス)
>>4
/sys/block/vda/size は 268435456 やった。単位は512バイトのセクタやから
>>5
lsblk の SIZE も 128G で合ってた
>>1
つながってる機器の一覧は?
>>7
PCI の機器は lspci、USB は lsusb。lspci -k はそれぞれに使われてるカーネルドライバも出す
試したら Ethernet controller: Red Hat, Inc. Virtio 1.0 network device などが出て、Kernel driver in use: virtio-pci も見えた
>>8
lsusb は USB のない仮想マシンやと unable to initialize usb spec と出て、一覧は出えへんかった。lspci -v で詳しく、lsusb -t で木の形
>>1
ドライバがモジュールになってる場合は?
>>10lsmod で読み込まれてるモジュールの一覧(中身は /proc/modules)。読み込むのは modprobe モジュール名、外すのは modprobe -r。modprobe は modules.dep を見て、依存するモジュールも一緒に入れたり外したりする
>>11
insmod と rmmod は?
>>12
1つのモジュールファイルを入れる・外すだけで、依存は面倒を見ない。だからふだんは modprobe。情報は modinfo モジュール名。modprobe -n -v で実際には入れずに何をするかだけ見られる
>>11
試した仮想マシンはドライバをカーネルに組み込んだ作りで、lsmod は見出しだけやった。ディストリビューションの普通のカーネルはモジュールが多いから、たくさん出る
>>11
起動のたびに読ませないようにするのは?
>>15
/etc/modprobe.d/ の下の .conf に blacklist モジュール名。オプションを渡すなら options モジュール名 引数
>>2
/dev のファイルは誰が作ってるん?
>>17
udev。カーネルが機器を見つけると知らせが来て、udev がルールに従って /dev のファイルを作ったり名前を付けたりする。ルールは /usr/lib/udev/rules.d/ と /etc/udev/rules.d/。D-Bus はプログラム同士がメッセージをやり取りする仕組みで、機器の抜き差しをデスクトップなどに知らせるのに使われる
>>8
見るのは lspci・lsusb・lsmod、詳しくは /proc と /sys、モジュールは modprobe と modprobe -r。依存まで面倒を見るのが modprobe、で覚える
管理人のひとこと
- /proc はプロセスとカーネルの情報(cpuinfo・meminfo・interrupts・ioports・dma・modules)、/sys はデバイスとドライバの情報(sysfs)、/dev はデバイスファイル(b ブロック、c キャラクタ)。
lspci(-kでドライバ、-vで詳しく)、lsusb(-tで木の形)で接続された機器を見る。lsmodは読み込み中のモジュール。modprobeは依存も含めて読み込み、modprobe -rで外す。insmod・rmmod は依存を扱わない。modinfoで情報、/etc/modprobe.d/ のblacklist・optionsで読み込みの制御。- /dev のファイルは udev がルール(/usr/lib/udev/rules.d/、/etc/udev/rules.d/)に従って作る。D-Bus はプログラム間でメッセージをやり取りする仕組み。