linux驱动 pci笔记

来源:互联网 发布:js 文字相似度 编辑:程序博客网 时间:2024/05/16 09:56
pci遍历的顺序,第一个桥的系统号是0,深度优先. pci桥也是一种设备,当遍历到的设备是桥的时候产生系统号1,并且,这个总线上的


设备的系统号就是1,以此类推,当遍历到的设备又是桥的时候产生系统号2,挂载在这个总线设备上的设备的系统号就是2,


不同厂商的pci设备都能处理.和平台总线类似,
基地址是一种物理地址需要做映射,为什么是物理地址呢?我以为是一种编号.


static struct pci_driver hamachi_driver = {
name: DRV_NAME,
id_table: hamachi_pci_tbl,
probe: hamachi_init_one,
remove: __devexit_p(hamachi_remove_one),
};


pci_register_driver(&hamachi_driver)//初始化


static struct pci_device_id hamachi_pci_tbl[] __initdata = {
{ 0x1318, 0x0911, PCI_ANY_ID, PCI_ANY_ID, },
{ 0x3319, 0x0911, PCI_ANY_ID, PCI_ANY_ID, },
}
分别是厂商号,设备号,子厂商号,子设备号,其中子厂商号,子设备号为PCI_ANY_ID,表示支持各种子类型,pci可以支持不同厂


商的同一类型设备.当注册驱动时,pci会遍历所有的总线上所有的设备,如果2者之间的id相同,那么就会调用驱动的probe函数.一个


pci设备有一个2个字节的vendor id 一个2个字节的device id .如果设备和驱动厂商号和设备号匹配,那么调用驱动的probe设备.一


个pci驱动中可以处理很类型或者不同厂商的设备,hamachi_pci_tbl[] 中可以存放很多厂商号和设备号.


总线这一种驱动模型,就是为了,增加了程序的可移植性,实现热插拔,便于匹配驱动程序,一个输入子系统驱动也是是一个平台驱动, 一个pci总线设备也可以是一个网卡设备


原创粉丝点击