PCI设备上有三种地址空间:PCI的I/O空间、PCI的存储空间和PCI的配置空间。CPU可以访问PCI设备上的所有地址空间,其中I/O空间和存储空间提供给设备驱动程序使用,而配置空间则由Linux内核中的PCI初始化代码使用。内核在启动时负责对所有PCI设备进行初始化,配置好所有的PCI设备,包括中断号以及I/O基址,并在文件/proc/pci...
有了设备模型基础及usb设备驱动的基础知识,来了解PCI设备驱动,就相对简单了,因为PCI设备驱动仍然套用了设备驱动模型的方式,用到的仍然是设备模型的相应函数,只是把相应的pci设备挂载到PCI总线的device队列,而凭此驱动则挂载到pci总线的driver队列,对应的匹配函数,探测函数,都是pci总线提供的函数。 因为pci设备驱动的安...
下面就是实际的PCI设备: 2.4 驱动注册 添加驱动,关联软件相关代码: 1. int driver_register(struct device_driver *drv) 1. 创建/sys/bus/xbus/driver/zzz目录; 加入bus->priv->driver_kset目录; 加入bus->priv->klist_driver链表; 遍历bus->priv->klist_device链表,执行bus->match()寻找合适的dev; driv关...
注冊PCI驱动程序 所以的PCI驱动程序都必须创建的主要结构休是struct pci_driver const char *name; 驱动程序的名字 当驱动程序执行在内核中时,它会出如今sysfs的/sys/bus/pci/drivers/以下 const struct pci_device_id *id_table int (*probe) (struct pci_dev *dev, const struct pci_device_id *id); 指...
下面就是实际的PCI设备: 1702541890192.png 2.4 驱动注册 添加驱动,关联软件相关代码: intdriver_register(structdevice_driver*drv) 创建/sys/bus/xbus/driver/zzz目录; 加入bus->priv->driver_kset目录; 加入bus->priv->klist_driver链表; 遍历bus->priv->klist_device链表,执行bus->match()寻找合适的dev; ...
PCI_driver结构体: structpci_driver{structlist_headnode;char*name;/* 驱动程序的名称 */structmodule*owner;/* 指向设备驱动程序感兴趣的设备ID的一个列表,包括: * 厂商ID、设备ID、子厂商ID、子设备ID、类别、类别掩码、私有数据 */conststructpci_device_id*id_table;/* 指向一个函数对于每一个id_table...
PCI_driver结构体: structpci_driver{structlist_headnode;char*name;/* 驱动程序的名称 */structmodule*owner;/* 指向设备驱动程序感兴趣的设备ID的一个列表,包括: * 厂商ID、设备ID、子厂商ID、子设备ID、类别、类别掩码、私有数据 */conststructpci_device_id*id_table;/* 指向一个函数对于每一个id_table...
②是查看总线上所有PCI设备(网卡设备属于PCI设备的一种)的配置空间如果发现标识信息与rtl8139_pci_driver中的id_table相同即rtl8139_pci_tbl,而它的定义如下: staticstructpci_device_id rtl8139_pci_tbl[] __devinitdata ={ {0x10ec,0x8129, PCI_ANY_ID, PCI_ANY_ID,0,0,1}, ...
ysan/qemu-edu-driver: Device driver for QEMU educational PCI device.由于文章中的代码是由浅入深,...