最終更新:2017-06-23 (金) 17:23:13 (2470d)
Linux/カーネルモジュール/ビルド
ドキュメント
Building External Modules
CentOS Wiki
カーネルのコンパイルなしにカーネルモジュールをコンパイルする環境を作る
- カーネルモジュールはカーネル側の保持しているシンボルテーブルを知っている必要がある
- シンボルテーブルはModule.symversに保持されている。
- ところが、kernel.orgから直接ソースコードを落としてくる場合、上記のカーネルモジュールのコンパイルに必要なファイルが存在しない
make modules_prepare
- カーネルモジュールをコンパイルに必要なファイル(Module.symvers)を吐き出すことができる
- "make modules_prepare" will not build Module.symvers even if CONFIG_MODVERSIONS is set; therefore, a full kernel build needs to be executed to make module versioning work.
make
- make modules_prepare - Set up for building external modules
- make modules - Build all modules
- make modules_install - Install all modules to INSTALL_MOD_PATH (default: /)
Makefile
obj-m := hello.o KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) all: $(MAKE) -C $(KERNELDIR) M=$(PWD)
個別のモジュールだけビルド
- make M={モジュールのパス}
make modules_prepare make M=fs/cifs
- make SUBDIRS={モジュールのパス}
- -Cでカーネルソースツリーの場所を指定できる
make -C <path_to_kernel_src> M=$PWD
例
make -C /lib/modules/`uname -r`/build M=モジュールのソースコード modules_install
- depmod -a
The directory can be specified in several ways:
- 1) Use "M?=..." on the command line
- 2) Environment variable KBUILD_EXTMOD?
- 3) Environment variable SUBDIRS?
メモ
- make drivers/usb/host/xhci-hcd.ko
- https://kernelnewbies.org/KernelBuild
Module.symvers
- 何かバージョンチェックとかを行うためのファイル。