You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
目录下执行make 了.Ok,make 之后你就应该看到一个叫做hello.ko 的文件生成了,恭喜你,<br />
这<br />
就是你将要测试的模块.<br />
执行命令,<br />
#insmod hello.ko<br />
同时在另一个窗口,用命令tail -f /var/log/messages 察看日志文件,你会看到<br />
Hello world 被打印了出来.<br />
再执行命令,<br />
#rmmod hello.ko<br />
此时,在另一窗口你会看到Goodbye,cruel world!被打印了出来.<br />
到这里,我该恭喜你,因为你已经能够编写Linux 内核模块了.这种感觉很美妙,不是吗?你可以<br />
嘲笑秦皇汉武略输文采唐宗宋祖稍逊风骚,还可以嘲笑一代天骄成吉思汗只识弯弓射大雕了. 是<br />
的,Twins 姐姐(s)告诉我们,只要我喜欢,还有什么不可以.<br />
日后我们会看到,2.6 内核中,每个模块都是以module_init 开始,以module_exit 结束.大多<br />
数来说没有必要知道这是为什么,记住就可以了,相信每一个对Linux 有一点常识的人都会知道<br />
这一点的,对大多数人来说,这就像是1+1 为什么等于2 一样,就像是两点之间最短的是直线,不<br />
需要证明,如果一定要证明两点之间直线最短,可以扔一块骨头在B点,让一条狗从A 点出发,你会<br />
发现狗走的是直线,是的,狗都知道,你还能不知道吗?<br />
9<br />
想到达明天现在就要启程<br />
既然知道了怎么编写一个模块,那么编写设备驱动程序自然也就不难了.我相信,每一个会写模块<br />
的人都不会觉得写设备驱动有困难.对自己行不行不确定的话,可以去问一下葛优,他准说:"(神州<br />
行),我看行."<br />
真的,我没说假话.写驱动不是什么难事,你完全可以很自信的说,你已经可以写Device Driver<br />
了.<br />
对,没错,飘柔,就这么自信.<br />
前面说了每一个模块都是以module_init 开始,以module_exit 结束,那么我们就来看一下U<br />
盘的驱动的这个模块.在茫茫人海中,我们很容易找到这个文件:drivers/usb/storage/usb.c,<br />
在这个文件中又不难发现下面这段:<br />
/****************************************************************<br />
*******<br />
1056 * Initialization and registration<br />
1057 **********************************************************<br />
*************/<br />
1058<br />
1059 static int __init usb_stor_init(void)<br />
1060 {<br />
1061 int retval;<br />
1062 printk(KERN_INFO "Initializing USB Mass Storage driver...\n");<br />
1063<br />
1064 /* register the driver, return usb_register return code if error */<br />
1065 retval = usb_register(&usb_storage_driver);