深入理解PCI设备的配置与访问
1. 设备检测与初始化
在设备检测过程中,会遍历设备列表,找到匹配的设备并进行初始化。以下是一段示例代码:
if (!dev) /* no more devices are there */ break; for (idptr = devlist; idptr->vendor; idptr++) { if (dev->vendor != idptr->vendor) continue; if (dev->device != idptr->device) continue; break; } if (!idptr->vendor) continue; /* not one of ours */ jail_init_one(dev); /* device-specific initialization */ found++;这段代码的逻辑如下:
1. 检查设备是否存在,如果不存在则跳出循环。
2. 遍历设备列表,找到与当前设备供应商和设备ID匹配的项。
3. 如果找到匹配项,则调用jail_init_one函数进行设备特定的初始化。
4. 初始化成功后,found计数器加1。
2. 访问配置空间
设备驱动检测到设备后,通常需要对内存、端口和配置这三个地址空间进行读写操作。其中,访问配置空间对于驱动程序至关重要,因为这是了解设备在内存和I/O空间映射位置的唯一途径。