作者:罗宇哲,中国科学院软件研究所智能软件研究中心
在上一期中,我们介绍了Linux内核编译方法,这一期我们用一个例子来介绍如何向Linux内核中增加一个模块。
一、LKM内核模块
LKM是Loadable Kernel Module的缩写,意思是可加载内核模块。它有点儿像动态链接库,可在运行时加载,成为内核代码和数据的一部分,访问全部内核地址空间,也可运行时动态卸载(需要解决依赖关系,并释放内存空间),所谓的更新就是加载—>卸载—>加载的过程。LKM是大部分设备驱动、文件系统的存在形式。
为了编写内核模块,我们需要准备好编写的环境。首先要指定内核源码或源码的头文件(即本模块是为哪个内核版本编写的),然后可以用VIM等编辑器编写,最后可以用gcc编译。
下图展示了一个简单的内核模块的示例代码:
在示例代码中我们可以看到两个重要的宏:moduleinit和moduleexit。这两个宏