启动时(或插入某些东西时(,linux如何发现设备的存在?更具体地说,我想弄清楚是什么创建了现有的排序。
我目前的直觉是,它从最高或最低地址开始遍历和探测PCI地址,并对其进行排序。例如:
device address enumerated as
UART 0 PCI 0:24.0 /dev/ttyS0
UART 1 PCI 0:24.1 /dev/ttyS1
UART 2 PCI 0:24.2 /dev/ttyS2
当设备插入电源时,这是如何保持的?中断是否会触发内核去处理它?我可以看出,当一个新设备插入时,它会在链的后面枚举它(在上面的例子中,任何UART都会被枚举为/dev/ttyS3,而不管PCI地址如何(。
编辑:我应该指定-这是一个没有安装udev的android系统-我甚至不知道它是否有devfs(但它必须这样做,因为它看起来/dev/目录只包含所需的内容。(
枚举hot-pluggable device
的方式与枚举pci device
或platform decvice
的方式不同。pci device
本质上只在引导时枚举(除非您手动重新扫描pci总线(,而platform device
则在平台总线探测设备的引导时枚举,或在加载平台驱动程序的运行时枚举。而像usb这样的热插拔设备是枚举的,因为usb总线定期轮询usb端点(EP(,以检测是否连接了任何新的usb设备或为现有的usb端点提供服务
probe()
是一个回调函数,当bus_match_driver()
例程返回success
时,无论是否存在h/w,都会调用它。当安装了driver-core
认为应该处理的device
时,会调用probe
函数;CCD_ 12功能应该对传递给它的关于该设备的信息执行检查并且决定该驱动程序是否真的适合该设备。device file
由mknod
手动创建或由udev
自动创建,与probe
功能没有直接关系。
/dev/
中的文件不是由内核本身创建的,而是由名为udev
的用户空间守护进程创建的。它使用一组通常位于/lib/udev/rules.d/
和/或/etc/udev/rules.d/
的规则来命名设备。