Linux2.6 内核 PCI 驱动程序开发
一, PCI 相关数据结构说明
1.1 struct pci_driver
这个数据结构在文件/linux/pci.h 里,这是 Linux 内核版本 2.4 之后为新型的 PCI 设备驱
动程序所添加的,其中最主要的是用于识别设备的 id_table 结构,以及用于检测设备的函
数 probe( )和卸载设备的函数 remove( )。
struct pci_driver {
struct list_head node;
char *name;
const struct pci_device_id *id_table;
int (*probe) (struct pci_dev *dev, const struct pci_device_id *id);
void (*remove) (struct pci_dev *dev);
int (*save_state) (struct pci_dev *dev, u32 state);
int (*suspend)(struct pci_dev *dev, u32 state);
int (*resume) (struct pci_dev *dev);
int (*enable_wake) (struct pci_dev *dev, u32 state, int enable);
};
为 创 建 一 个 正 确 的 struct pci_driver 结 构 , 只 有 4 个 字 段 需 要 被 初 始
化:name,id_table,probe 和 remove。
其 中 id_table 初 始 化 可 以 用 到 宏
PCI_DEVICE(VENDOR_ID,DEVICE_ID),VENDOR_ID 和 DEVICE_ID 分别为设备和厂商
编号,由板卡生产厂家指定。
Static const struct pci_device_id mypci[] =
{
{
PCI_DEVICE(VENDOR_ID,DEVICE_ID)
},
{}
};
1.2 pci_dev
这个数据结构也在文件 include/linux/pci.h 里,它详细描述了一个 PCI 设备几乎所有的
硬件信息,包括厂商 ID、设备 ID、各种资源等。可以根据需要使用其中的数据成员。
struct pci_dev {
struct list_head global_list;
struct list_head bus_list;
struct pci_bus *bus;
struct pci_bus *subordinate;
void *sysdata;
struct proc_dir_entry *procent;
unsigned int devfn;
unsigned short vendor;
unsigned short device;