我正在向 Linux 内核设备驱动程序开发迈出第一步。
我了解到,对于 pci-e 卡,我必须pci_register_driver
通过类型对象调用提供信息pci_driver
(下面的示例)。当我加载我的模块时( via insmod
)如果.id_table
找到通过的信息而不是调用该.probe
函数。
就像我现在一样,我根本看不到我的.probe
函数被调用(我添加了一些日志记录printk
),所以我必须假设其中包含的信息pci_device_id
一定是错误的,对吧?
有没有办法直接从硬件本身检索这些信息?一旦我将 PCI-E 卡插入我的 Linux 机器,我在哪里可以找到有关它的所有信息?也许读取 BIOS 或系统中的某些文件?
任何帮助表示赞赏。
AFG
static struct pci_driver my_driver = {
// other here
.id_table = pci_datatable,
.probe = driver_add
//
};
static struct pci_device_id pci_datatable[] __devinitdata =
{
{ VendorID, PciExp_0041, PCI_ANY_ID, PCI_ANY_ID },
{ 0 },
};
int __devinit DmaDriverAdd(
struct pci_dev * pPciDev,
const struct pci_device_id * pPciEntry
)
{
// my stuff!
}