Chinaunix首页 | 论坛 | 博客
  • 博客访问: 143762
  • 博文数量: 24
  • 博客积分: 1550
  • 博客等级: 上尉
  • 技术积分: 252
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-29 17:25
文章分类

全部博文(24)

文章存档

2018年(1)

2017年(3)

2016年(2)

2014年(2)

2013年(2)

2012年(2)

2011年(2)

2010年(2)

2009年(8)

我的朋友

分类: LINUX

2009-12-28 23:22:33

匆匆看完了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) |
给主人留下些什么吧!~~