0x00 引言
在Linux中,驱动的本质就是一个内核模块。Shell中有关于mod的几个命令insmod/lsmod/rmmod/modinfo就是对内核模块的操作,另外dmesg命令能够显示内核所有的打印信息。
模块可以被选择”静态编译”或”模块化编译”,两者区别:前者将模块代码集成到内核源码包中,跟随Linux内核一块编译;后者独立编译,编译时只需要内核头文件与Makefile。
本文主要针对模块化编译入手讲解,其他方法查阅资料[1]。
一个最简单的模块只需要Makefile与模块文件,下面从这两个文件的最简写法入手。
0x01 内核态Makefile
用户态的Makefile与内核态的Makefile不同,其实也很好理解,在Linux中内核态编译需要生成.ko文件,所以也自带了一套生成规则。实际上驱动模块的内核态Makefile是非常模式化的,要改动的地方很少:
1 | # 指定"内核头文件所在目录" |
0x02 模块文件
一个最简单的内核模块一共由三部分组成:实现函数,注册功能以及模块描述,摘自文献[2]。具体写法如下:
1 |
|
0x03 使用方法
1 | # 编译内核模块 |
0x04 引用文献
[1]https://blog.csdn.net/qq_28992301/article/details/52287792
[2]https://blog.csdn.net/qq_28992301/article/details/52279934