此处以编译usbmon驱动为例。
1、确认目标系统环境及内核信息
编译环境系统版本:Kylin-4.0.2-desktop,此版本系统内核为4.4.131,因此下载4.4.131版本内核源码编译。
2、获取内核源码
内核源码版本:4.4.131.tar.gz
3、解压内核源码执行编译
# tar -xvf linux-4.4.131.tar.gz
# cd linux-4.4.131/drivers/usb/mon
# vim Makefile
#
# Makefile for USB monitor
#
usbmon-y := mon_main.o mon_stat.o mon_text.o mon_bin.o
obj-$(CONFIG_USB_MON) += usbmon.o
查看Makefile文件中是否有多余的选项,此处只有一个驱动,因此不需要删除多余的选项,直接执行编译动作。
# make -C /lib/modules/$(uname -r)/build M=`pwd`
编译完成后可以看到当前目录多了很多以.o和.ko结尾的文件,这个usbmon.ko就是我们需要的文件,测试一下插入该驱动模块
#insmod usbmon.ko
#lsmod | grep usbmon
如果显示出结果则说明没问题。
注意:编译完成如果insmod后lsmod未查询到结果,则可通过dmesg查看之前执行操作的结果,可能会遇到提示校验失败的,dmesg日志如下
module verification failed: signature and/or required key missing - tainting kernel。
此时可通过修改Makefile文件重新编译解决问题。修改后Makefile文件内容如下:
#
# Makefile for USB monitor
#
#CONFIG_MODULE_SIG = n
usbmon-y := mon_main.o mon_stat.o mon_text.o mon_bin.o
obj-$(CONFIG_USB_MON) += usbmon.o