>>>>什么是module以及如何写一个module[1]
不知道在什幺时候,Linux出现了module这种东西,的确,它是Linux的一大革新。有了module之后,写devicedriver不再是一项恶梦,修改kernel也不再是一件痛苦的事了。因为你不需要每次要测试driver就重新compilekernel一次。那简直是会累死人。Module可以允许我们动态的改变kernel,加载devicedriver,而且它也能缩短我们driverdevelopment的时间。在这篇文章里,我将要跟各位介绍一下module的原理,以及如何写一个module。
module翻译成中文就是模块,不过,事实上去翻译这个字一点都没意义。在讲模块之前,我先举一个例子。相信很多人都用过RedHat。在RedHat里,我们可以执行sndconfig,它可以帮我们config声卡。config完之后如果捉得到你的声卡,那你的声卡马上就可以动了,而且还不用重新激活计算机。这是怎幺做的呢?就是靠module。module其实是一般的程序。但是它可以被动态载到kernel里成为kernel的一部分。载到kernel里的module它具有跟kernel一样的权力。可以access任何kernel的datastructure。你听过kdebug吗?它是用来debugkernel的。它就是先将它本身的一个module载到kernel里,而在userspace的gdb就可以经由跟这个module沟通,得知kernel里的datastructure的值,除此之外,还可以经由载到kernel的module去更改kernel里datastructure。
我们知道,在写C程序的时候,一个程序只能有一个main。Kernel本身其实也是一个程序,它本身也有个main,叫start_kernel(。当我们把一个module载到kernel里的时候,它会跟kernel整合在一起,成为kernel的一部分。请各位想想,那module可以有main吗?答案很明显的,是No。理由很简单。一个程序只能有一个main。在使用module