典型的PCI和USB总线就是通过设备ID去匹配的, 而PPC和ARM的CPU总线也是通过外设ID来匹配。 本帖最后由 linuxfellow 于 2014-09-12 10:08 编辑
回复 10# Tinnal
你是对的, /dev需要设备号来map到对应的操作函数
sysfs就不用了
本帖最后由 linuxfellow 于 2014-09-12 10:09 编辑
回复 11# Tinnal
这点我同意,norflash/nand/usb好多是通过id来匹配。
/dev下所有的设备文件都需要设备号,包括字符设备和块设备,你可以ls -l查看一下。因为/dev目录其实是一个正常的文件目录,如果不指定文件类型为字符设备(c)或块设备(b),那这个文件就会当正常的文件使用,而指定为设备文件时,主设备号是必选参数。
关于你说的第二个关于USB的问题,你还是搞混了内核的驱动模型和用户态的驱动接口两个概念。
驱动,未必需要提供或不直接提供用户态的驱动接口。当驱动不需要跟用户态的应用进行交互时,它可以不在/dev下创建文件,但根据Linux规范,它一定要用device_add或其衍生函数加入内核的设备模型,并且它也确实可以让硬件工作起来。下面我举两个例子:
1. 不需要提供用户态的驱动接口:
如果我们想写一个USB盘的usb gadget驱动(是把装Linux的机器作U盘,不是用U盘),因为操作U盘的是主机,而非Linux上的应用,因此这种场合不需要创建/dev文件。
2. 不直接提供用户态的驱动接口:
如果我们写一个USB串口的驱动,我们也不需要自己去创/dev下的文件,但它最终会通过内核串口框架在/dev个以ttySXXX呈现出来。
你还是搞混了内核的驱动模型和用户态的驱动接口两个概念,这两件事情绝大部份是同时工作的。以i2c, spi为例,i2c,spi只能一个BUS,我们的真正止的是什么,要不这个i2c是一个温度芯片,我们最终会在/dev下创建一个读温度的接口,要不这是一个视频芯片的接口,那v4L本身就有/dev下有接口。最极端的情况下,它是内存条的spd芯片,这种情况,就是就属于“不需要提供用户态的驱动接口”的一类。至于mtd层,那就更典型了,会同时出现/dev/mtdX和/dev/mtdblockX。他们属于“不直接提供用户态的驱动接口”类别,而且/dev/mtdblockX是mount命令的主要参数。
回复 14# Tinnal
忍不住冒泡点赞了:)
页:
1
[2]