简单模块的实现与分析
Linux的模块机制是一种非常巧妙,非常有意识的东西。
先一个简单模块吧:
static void __exit sample_module_cleanup(void)
{
printk(KERN_DEBUG "cleanup sample module device/n");
}
module_init(sample_module_init);
module_exit(sample_module_cleanup);
MODULE_DESCRIPTION("sample module");
MODULE_LICENSE("GPL");
代码摘自http://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:modules:example具体编译,模块
装载见该连接。我对代码做了一些调整和删减。
默认情况下在模块装载,卸载的时候,minicom下是看不到输出的原因如下:
root:/> cat /proc/sys/kernel/printk
7 4 1 7
root:/> echo 8 > /proc/sys/kernel/printk
root:/> cat /proc/sys/kernel/printk
8 4 1 7
默认情况下控制台不会输出调试信息,经上面的修改之后就可以输出来了。具体关于printk输出等级的信息的网上很容易找到,这里就不多说了。
上面的代码意思还是比较容易看懂的,也没什么道理可讲差不多可以说是Linux规定的,不过具体模块机制的实现那就复杂了。
之前打算深入分析一下内核的模块机制,挣扎了一段时间还是决定暂时先放一放。时间有限,就先做最重要的事情了,现在只需知道怎么做,不管它是怎么实现的,系统的层次结构可以让我们少考虑很多的问题。