为了了解 SATA 设备枚举过程,我正在研究 driver/ata/ata_piix.c,它在命令输出中显示为我的系统的 SATA 主机驱动程序lspci
。
00:1f.2 IDE interface: Intel Corporation NM10/ICH7 Family SATA Controller [IDE mode] (rev 01)
Subsystem: Elitegroup Computer Systems Device 2672
Kernel driver in use: ata_piix
Kernel modules: pata_acpi
AFAIK,SATA 主机控制器是连接在 PCI 总线上的 PCI 设备。现在,当ata_piix.c 的probe 方法执行时,它将初始化主机控制器,并且许多其他初始化序列将在probe 调用中完成。在探针方法的末尾执行以下代码:
/* perform each probe asynchronously */
for (i = 0; i < host->n_ports; i++) {
struct ata_port *ap = host->ports[i];
async_schedule(async_port_probe, ap);
}
因此,根据我的理解,调用aync_schedule()
将一一调用连接到主机端口的SATA设备的探测方法。以下是我的一些疑问
- 我的上述理解正确吗?这就是 SATA 设备枚举的工作原理,如果没有,则表明 Linux 内核如何处理 SATA 设备的枚举过程。
- 请建议具体如何
aync_schedule()
运作? - 如果
ata_piix.c
用作 SATA 主机控制器的内核驱动程序,那么为什么用于设备的内核模块显示为 命令输出pata_acpi
中的内容lspci
?