keywords:
linux 驱动匹配
这两天因为手上杂牌pad adb驱动的问题看了些linux驱动的东西,不过问题还是没解决……,总结一下,如有错误希望指正。
首先 设备(Device) 与驱动(Driver) 是多对一的关系 ,一个Device同一时间只能由一个Driver驱动 ,但一个Driver同一时间可以控制多个Device。
Device是挂载总线(Bus)上的,比如PCI总线、USB总线等,一个Device插入后,内核会检测到这个Device,调用Bus的match函数来搜索这个Device的Driver,每个Driver中都有一个内置支持的Device列表和一个动态的列表(我猜就是sysfs里new_id添加的),Bus得到所有匹配的Driver后依次调用probe函数以确认确实可以驱动这个Device,probe成功后即返回,否则调用下一个Driver的probe直到找到一个合适的Driver。
设备号是Driver返回的,所以一个设备号对应什么驱动不是固定的,要看系统当时的状态,举个例子:
usb转串口驱动,常见的有2个:pl2303和FT232芯片,他们返回的主设备号都是188 ttyUSB 但这个188的设备结点到底用的什么驱动就要看是哪个驱动返回的设备号了
douniwan@ubuntu:/sys/bus/usb/drivers$ ll ftdi_sio/
总用量 0
drwxr-xr-x 2 root root 0 2012-05-22 17:28