今回は残課題の⑪を調査します。

【関連記事】

  • 2019/8/30
⑪/lib/modules/3.14.79-pavement1234/の中をもうちょっと調べる

【PC-Linuxビルド】(2019/07/09:ビルド後編)ではドライバをインストールしたところで満足したが、ドライバのロード順を制御するmodule.orderとか調べたい。
  • 何はともあれ/lib/modules/3.14.79-pavement1234に行ってみる。
/lib/modules/3.14.79-pavement1234/をls -lしてみた。なんかいっぱいあるな…。
$ ls -l /lib/modules/3.14.79-pavement1234/
合計 3832
drwxr-xr-x 10 root root   4096  7月  9 18:22 kernel
-rw-r--r--  1 root root 947199  7月  9 16:48 modules.alias
-rw-r--r--  1 root root 930707  7月  9 16:48 modules.alias.bin
-rw-r--r--  1 root root   7004  7月  9 16:36 modules.builtin
-rw-r--r--  1 root root   9154  7月  9 16:48 modules.builtin.bin
-rw-r--r--  1 root root 372523  7月  9 16:48 modules.dep
-rw-r--r--  1 root root 548545  7月  9 16:48 modules.dep.bin
-rw-r--r--  1 root root    241  7月  9 16:48 modules.devname
-rw-r--r--  1 root root 153217  7月  9 16:36 modules.order
-rw-r--r--  1 root root    160  7月  9 16:48 modules.softdep
-rw-r--r--  1 root root 412275  7月  9 16:48 modules.symbols
-rw-r--r--  1 root root 515568  7月  9 16:48 modules.symbols.bin
カーネルモジュールの作り方を読んだ。特にmodules.orderについて触れていなかったが、カーネルモジュールをビルドするMakefileが載ってた。uname -rでカーネルのリリース番号を出力してKDIRを動的生成してる。私のPCでuname -rを打つと3.14.79-pavement1234と出力される。これは便利。
 Makefile

obj-m := test.o
KDIR    := /lib/modules/$(shell uname -r)/build
VERBOSE = 0

all:
        $(MAKE) -C $(KDIR) M=$(PWD) KBUILD_VERBOSE=$(VERBOSE) CONFIG_DEBUG_INFO=y modules
clean:
        rm -f *.o *.ko *.mod.c Module.symvers modules.order
とりあえず馴染みがある/lib/modules/3.14.79-pavement1234配下のath10grepしてみた。module.alias、modules.dep、modules.order、modules.symbolsがヒット。
$ grep ath10 /lib/modules/3.14.79-pavement1234/*
grep: /lib/modules/3.14.79-pavement1234/kernel: ディレクトリです
/lib/modules/3.14.79-pavement1234/modules.alias:alias pci:v0000168Cd0000003Csv*sd*bc*sc*i* ath10k_pci
バイナリファイル /lib/modules/3.14.79-pavement1234/modules.alias.bin に一致しました
/lib/modules/3.14.79-pavement1234/modules.dep:kernel/drivers/net/wireless/ath/ath10k/ath10k_core.ko: kernel/drivers/net/wireless/ath/ath.ko kernel/net/mac80211/mac80211.ko kernel/net/wireless/cfg80211.ko
/lib/modules/3.14.79-pavement1234/modules.dep:kernel/drivers/net/wireless/ath/ath10k/ath10k_pci.ko: kernel/drivers/net/wireless/ath/ath10k/ath10k_core.ko kernel/drivers/net/wireless/ath/ath.ko kernel/net/mac80211/mac80211.ko kernel/net/wireless/cfg80211.ko
バイナリファイル /lib/modules/3.14.79-pavement1234/modules.dep.bin に一致しました
/lib/modules/3.14.79-pavement1234/modules.order:kernel/drivers/net/wireless/ath/ath10k/ath10k_core.ko
/lib/modules/3.14.79-pavement1234/modules.order:kernel/drivers/net/wireless/ath/ath10k/ath10k_pci.ko
/lib/modules/3.14.79-pavement1234/modules.symbols:alias symbol:ath10k_warn ath10k_core
/lib/modules/3.14.79-pavement1234/modules.symbols:alias symbol:ath10k_core_start ath10k_core
/lib/modules/3.14.79-pavement1234/modules.symbols:alias symbol:ath10k_core_create ath10k_core
/lib/modules/3.14.79-pavement1234/modules.symbols:alias symbol:ath10k_core_register ath10k_core
/lib/modules/3.14.79-pavement1234/modules.symbols:alias symbol:ath10k_core_destroy ath10k_core
/lib/modules/3.14.79-pavement1234/modules.symbols:alias symbol:ath10k_info ath10k_core
/lib/modules/3.14.79-pavement1234/modules.symbols:alias symbol:ath10k_core_stop ath10k_core
/lib/modules/3.14.79-pavement1234/modules.symbols:alias symbol:ath10k_core_unregister ath10k_core
/lib/modules/3.14.79-pavement1234/modules.symbols:alias symbol:ath10k_err ath10k_core
バイナリファイル /lib/modules/3.14.79-pavement1234/modules.symbols.bin に一致しました
modules.depは依存関係が書いてあるみたい。行数を出した(viで: set nuした)。

ath10k_pci.ko
 +ath10k_core.ko
  +ath.ko
   +cfg80211.ko
  +mac80211.ko
   +cfg80211.ko
   1047 kernel/drivers/net/wireless/ath/ath10k/ath10k_core.ko:: kernel/drivers/net/wireless/ath/ath.ko kernel/net/mac80211/mac80211.ko kernel/net/wireless/cfg80211.ko
   1048 kernel/drivers/net/wireless/ath/ath10k/ath10k_pci.ko: kernel/drivers/net/wireless/ath/ath10k/ath10k_core.ko kernel/drivers/net/wireless/ath/ath.ko kernel/net/mac80211/mac80211.ko kernel/net/wireless/cfg80211.ko
   1050 kernel/drivers/net/wireless/ath/ath.ko: kernel/net/wireless/cfg80211.ko
   3785 kernel/net/wireless/cfg80211.ko:
   3878 kernel/net/mac80211/mac80211.ko: kernel/net/wireless/cfg80211.ko
modules.orderでこれらがどういう位置関係になっているか見た。依存関係の下層(今回で言うとcfg802.ko)が先に呼ばれるとかではなくて、アルファベット順のように見える。
   1048 kernel/drivers/net/wireless/ath/ath10k/ath10k_core.ko
   1049 kernel/drivers/net/wireless/ath/ath10k/ath10k_pci.ko
 …
   1051 kernel/drivers/net/wireless/ath/ath.ko
 …
   3786 kernel/net/wireless/cfg80211.ko
 …
   3879 kernel/net/mac80211/mac80211.ko

lsmodで実際にロードされているモジュールをリスト表示でき、依存関係もわかる。私のLinux PCに搭載された無線LANモジュールはIntelなのでiwlwifiが呼ばれてる。
$ lsmod
Module                  Size  Used by
btrfs                 880060  0
raid6_pq               97812  1 btrfs
xor                    21411  1 btrfs
autofs4                38754  0
ctr                    13049  1
ccm                    17773  1
arc4                   12608  2
rfcomm                 69064  8
iwlmvm                194784  0
bnep                   19624  2
mac80211              656781  1 iwlmvm
nls_iso8859_1          12713  1
snd_hda_codec_hdmi     46480  1
snd_hda_codec_realtek    65984  1
snd_hda_codec_generic    68348  1 snd_hda_codec_realtek
uvcvideo               80834  0
videobuf2_vmalloc      13216  1 uvcvideo
videobuf2_memops       13362  1 videobuf2_vmalloc
videobuf2_core         41043  1 uvcvideo
videodev              148362  2 uvcvideo,videobuf2_core
keucr                  71407  0
hid_multitouch         17407  0
intel_rapl             18773  0
coretemp               13475  0
kvm_intel             143079  0
kvm                   463071  1 kvm_intel
iwlwifi               177968  1 iwlmvm
crct10dif_pclmul       14289  0
crc32_pclmul           13113  0
cryptd                 20359  0
btusb                  28339  0
bluetooth             406881  22 bnep,btusb,rfcomm
joydev                 17381  0
6lowpan_iphc           18702  1 bluetooth
serio_raw              13462  0
snd_hda_intel          56531  3
snd_hda_codec         137502  4 snd_hda_codec_realtek,snd_hda_codec_hdmi,snd_hda_codec_generic,snd_hda_intel
snd_hwdep              13602  1 snd_hda_codec
cfg80211              519267  3 iwlwifi,mac80211,iwlmvm
snd_pcm               107781  3 snd_hda_codec_hdmi,snd_hda_codec,snd_hda_intel
snd_seq_midi           13324  0
snd_seq_midi_event     14899  1 snd_seq_midi
snd_rawmidi            30259  1 snd_seq_midi
sparse_keymap          13948  0
toshiba_bluetooth      12852  0
snd_seq                61616  2 snd_seq_midi_event,snd_seq_midi
i915                  797368  2
i2c_hid                18661  0
drm_kms_helper         48716  1 i915
snd_seq_device         14497  3 snd_seq,snd_rawmidi,snd_seq_midi
video                  19425  1 i915
parport_pc             32701  0
drm                   298219  3 i915,drm_kms_helper
dw_dmac                12814  0
dw_dmac_core           24251  1 dw_dmac
mac_hid                13205  0
snd_timer              29481  2 snd_pcm,snd_seq
ppdev                  17635  0
i2c_designware_platform    13006  0
i2c_designware_core    14768  1 i2c_designware_platform
snd                    69545  18 snd_hda_codec_realtek,snd_hwdep,snd_timer,snd_hda_codec_hdmi,snd_pcm,snd_seq,snd_rawmidi,snd_hda_codec_generic,snd_hda_codec,snd_hda_intel,snd_seq_device,snd_seq_midi
i2c_algo_bit           13413  1 i915
8250_dw                13437  0
lp                     17759  0
wmi                    19177  0
shpchp                 37032  0
soundcore              12680  1 snd
spi_pxa2xx_platform    23056  0
parport                42313  3 lp,ppdev,parport_pc
hid_generic            12548  0
usbhid                 52567  0
hid                   105788  4 i2c_hid,hid_multitouch,hid_generic,usbhid
usb_storage            66305  0
psmouse               106606  0
sdhci_acpi             13376  0
sdhci                  43023  1 sdhci_acpi
r8169                  71677  0
mii                    13934  1 r8169
ahci                   34014  3
libahci                32082  1 ahci

そのうちLinux起動時にドライバがどうやって読み込まれるのかを調べてみよう(今回はやらない)。

一応これで【PC-Linuxビルド】(xxx)は終わりです。読んでくださった方ありがとうございました。

終わり
IMG_20190824_091703



詳解 Linuxカーネル 第3版
Daniel P. Bovet
オライリー・ジャパン
2007-02-26


組み込みLinuxシステム構築 第2版
Karim Yaghmour
オライリージャパン
2009-10-26


Linuxデバイスドライバ 第3版
Jonathan Corbet
オライリージャパン
2005-10-22



スポンサードリンク