07.06.2013 Views

Scsi - Index of

Scsi - Index of

Scsi - Index of

SHOW MORE
SHOW LESS

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 />

里,

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!