linux 驱动分类

来源:互联网 发布:淘宝私密优惠券地址 编辑:程序博客网 时间:2024/06/03 15:01

linux 驱动分类


        linux驱动的分类跟Wince不同,wince是分成流驱动和本机驱动两种类型,而linux分为字符设备驱动、网络设备驱动、块设备驱动。
如果要比较这两种系统的驱动类型的话,应该是字符设备驱动跟流驱动类似,本机驱动跟块设备驱动类似。


        今天其实准备写一个简单的驱动来模拟操作一下IO,参考其它代码的时候,一下子就被几个函数给弄混了。
        register_chrdev();platform_driver_register();misc_register();
        大家看明白了没有,它们对应char driver,platform driver,misc driver的注册。(注意这些函数的概念跟字符设备,块设备这些不是同级的概念,它们只是系统提供的驱动注册的一些方式。)
        我在SDK搜了一下上面三个函数,然后稍微归一下类:
        chrdev:scsi,macintosh,isdn\capi,char\pcmcia,\net\wan
        platform:serial,touchscreen,backlight,misc,otg,video,watchdog
        misc:watchdog,macintosh,\mtd\ubi
        总结:根据上面的信息来看,我觉得有些驱动三种方式都可以采用。更细的来说:
platform 机制将设备本身的资源注册进内核,由内核统一管理,在驱动程序中使用这些资源时通过 platform device 提供的标准接口进行申请并使用。这样提高了驱动和资源管理的独立性,并且拥有较好的可移植性和安全性 ( 这些标准接口是安全的 ) 。所以它的应用场景是适合那些比较独立的,跟CPU关联性强的驱动,如果SPI,serial等。
chrdev 没有platform严格,它比platform少了几个函数,可以合入内核也可以有module的方式从外部加载,方便调试。它的适应场景我觉得都可以,但是以platform为优先原则。
misc 我觉得内部应该跟chrdev是一样的,只是按名字来说是个杂项混合驱动,它的适应场景更应用于一些跟其它驱动相关的设备的驱动,比如说某些用I2C或SPI驱动的设备。