目录
总述
方法一:整体编译,优点:命令比较简单,不需要多余的设置,不容易出错;缺点:每次编译需要检查所有的模块,特别耗时
方法二:单独编译,单独编译某一个内核模块,优点:节省时间,尤其适合调试阶段;缺点:需要配置一些变量,可能与内核的配置不一致
方法三:自定义编译,自己编写Makefile文件,优点:适用范围广,高效,比较好理解;缺点:内核中的源代码文件需要对比内核Makefile文件进行甄别,挑选出自己想要编译的部分,添加到objs中
整体编译
make -C 内核源代码路径 modules ARCH=处理器架构 CROSS_COMPILE=编译器路径
其中的路径要使用绝对路径,编译器路径也要绝对路径
编译完成可以使用命令导出
make modules_install INSTALL_MOD_PATH=安装路径 ARCH=处理器架构 CROSS_COMPILE=编译器路径
ARCH和CROSS_COMPILE变量也可以通过修改内核源码根目录下的Makefile指定
单独编译
例如单独编译drivers/usb/host/下的xhci-hcd.ko内核模块,可以使用以下方式
make CONFIG_USB_XHCI_HCD=m -C 内核源码路径 M=内核源码路径/drivers/usb/host modules ARCH=处理器架构 CROSS_COMPILE=编译器路径
CONFIG_USB_XHCI_HCD是查看drivers/usb/host/Makefile来的,m是编译成内核模块
自定义编译
自己编译Makefile文件
ARCH :=
CROSS_COMPILE :=
KDIR := 内核源码路径
obj-m := xxx.o
xxx-objs := xxx1.o xxx2.o
all:
$(MAKE) -C $(KDIR) M=$(shell pwd) modules ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE)
clean:
$(MAKE) -C $(KDIR) M=$(shell pwd) clean