linux如何发现和枚举设备?

时间:2018-07-16 13:28:01

标签: android linux-kernel linux-device-driver

引导(或插入某些东西)时,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

插入设备时如何保持?中断会触发内核进行处理吗?我可以说,插入新设备时,它将在链中稍后枚举(在上面的示例中,无论PCI地址如何,任何UART都将被枚举为/ dev / ttyS3)。

编辑:我应该指定-这是一个未安装udev的 android 系统-我什至不知道它是否具有devfs(但是必须如此,因为它看起来像/ dev目录只包含所需的内容。)

2 个答案:

答案 0 :(得分:0)

/dev/中的文件不是由内核本身创建的,而是由名为udev的用户空间守护程序创建的。它使用通常位于/lib/udev/rules.d/和/或/etc/udev/rules.d/处的一组规则来命名设备。

答案 1 :(得分:0)

枚举hot-pluggable device的方式与枚举pci deviceplatform decvice的方式不同。 pci device仅在引导时枚举(除非您进行手动pci总线重新扫描),而platform device则在平台总线探测设备的引导时或运行期间枚举平台驱动程序加载的时间。 枚举了像USB这样的可热插拔设备,因为USB总线会定期轮询USB端点(EP)以检测是否有新的USB设备连接或为现有的USB端点提供服务

probe()是一个回调函数,当bus_match_driver()例程返回success时,无论是否存在硬件都将被调用。当安装probe认为应该处理的device时,将调用driver-core函数; probe函数应检查传递给它的有关设备的信息,并确定驱动程序是否真正适合该设备。 device filemknod手动创建或由udev自动创建,与probe函数没有直接关系。