匆匆看完了ldd3,觉得有个整体的把握很必要,接下来就重点学习usb驱动的编写。
感觉不同设备驱动比较起来学习会理解的更深,于是稍微看了下字符设备和usb设备两种设备驱动编写的不同,写下来免得以后忘了。
发现废话挺多的,第一次写嘛,原谅了。
ldd3中的字符设备scull就是内存中模拟的一块,而scull driver当然就是将这个设备和内核连接起来的有力武器,具体到实现就是struct scull_device了,struct scull_device通过struct scull_qset *data将scull设备联系起来,而另一个成员struct cdev cdev当然就是用来和内核(或者用户空间)联系的东东,它也证明了scull确实是一个字符设备。话说起来好像简单,真正理解又是一会事。
再看usb设备,不同于字符设备的接口的固定,比如data总是一个固定的地址,实际中的设备也会是一个固定的i/o地址,其实主要还是这个地址上的设备的功能比较固定;而usb却是可插拔的,而且插入的设备用来干什么还不知道(U盘,摄像头,键盘..数不清的),这怎么办呢,linux内核就通过usb core抽象所有的设备,你只要负责写你的设备的driver了,什么时候你的设备插上了,usb core就会去调用你为这个设备写得driver,这之中有一个struct usb_device_id比较重要,它用在driver中表示这个driver支持的设备标识,如果这个设备标识插上了,usb core就会知道告诉driver了。这些注定usb驱动的书写比起字符设备来说会复杂一些,(当然我说硬件操作复杂差不多的情况下,大家别拍我),好在内核给我们做了很多的事,实际写起来还不是复杂,但要弄清楚内部的机制还是挺困难的。
先写这些吧,现在开始了我的usb设备驱动深入研究,同时比较不同设备的驱动书写来加深理解。
阅读(2419) | 评论(0) | 转发(0) |