You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
的Linux 内核划分为许许多多个小的模块,对于编写设备驱动程序的那帮家伙来说,从此以后他<br />
们可以编写设备驱动程序却不需要把她编译进内核,不用reboot 机器,她只是一个模块,当你需<br />
要她的时候,你可以把她抱入怀中(insmod),当你不再需要她的时候,你可以把她一脚踢开,甚至,<br />
你可以对她咆哮:"滚吧,贱人!"(rmmod).她不能成为你的手足,只能算你的衣服.<br />
也许在现实世界里不会这样,但是在Linux 的虚拟世界里,确实可以是如此,time and time<br />
again,我问自己,模块是否就像现实生活中的妓女一样呢?Linux 内核是嫖客,当他需要这个模<br />
块<br />
的时候,他就把人家揽入怀中,当他不需要人家的时候,就把别人踢开,而且,模块总是能够逆来顺<br />
受,尽管Linux 内核会一次次抛弃她,但是每当Linux 内核再次需要她的时候,当内核再次执行<br />
insmod 的时候,模块依然会尽自己的能力去取悦内核,这是否太可悲了些!记得孔子曾经说过,<br />
读<br />
懂Linux内核代码不难,难得是读懂Linux内核代码背后的哲学!难道这就是传说中的藏在Linux<br />
代码背后的哲学!天哪!<br />
抛开这见鬼的哲学吧.让我们从一个伟大的例子去认识模块.这就是传说中的"Hello World!",这<br />
个梦幻般的名字我们看过无数次了,每一次她出现在眼前,就意味着我们开始接触一种新的计算<br />
机语言了,或者,如此刻,开始描述一个新的故事.<br />
请看下面这段代码,她就是Linux 下的一个最简单的模块.当你安装这个模块的时候,她会用她<br />
特有的语言向你表白,"Hello,world!",千真万确,她没有说"Honey,I love you!",虽然,她可以这<br />
7<br />
么说,如果你要求她这么说.而后来你卸载了这个模块,你无情抛弃了她,她很伤心,她很绝望,但她<br />
没有抱怨,她只是淡淡地说,"Goodbye,cruel world!"(再见,残酷的世界!)<br />
++++++++++++++++++hello.c++++++++++++++++++++<br />
1 #include /* Needed for the macros */<br />
2 #include /* Needed for all modules */<br />
3 MODULE_LICENSE("Dual BSD/GPL");<br />
4 MODULE_AUTHOR("fudan_abc");<br />
5<br />
6 static int __init hello_init(void)<br />
7 {<br />
8 printk(KERN_ALERT "Hello, world!\n");<br />
9 return 0;<br />
10 }<br />
11<br />
12 static void __exit hello_exit(void)<br />
13 {<br />
14 printk(KERN_ALERT "Goodbye, cruel world\n");<br />
15 }<br />
16<br />
17 module_init(hello_init);<br />
18 module_exit(hello_exit);<br />
++++++++++++++++++++++++++++++++++++++++++++++++<br />
你需要使用module_init()和module_exit(),你可以称她们为函数,不过实际上她们是一些<br />
宏(macro),现在你可以不用去知道她们背后的故事,只需要知道,在Linux Kernel 2.6 的世界<br />
里,