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.

目录下执行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);

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

Saved successfully!

Ooh no, something went wrong!