深入理解Linux网络技术内幕学习笔记第六章:PCI层和网络接口卡

PCI层和网络接口卡
内核中的PCI子系统提供各种PCI设备驱动程序共同的通用功能。
本章一些重要的数据结构,定义在include/linux/pci.h和include/linux/mod_devicetable.h中:
pci_device_id:设备标识符,不是Linux本地使用的id,是根据pci标准定义的id。
struct pci_device_id{
    unsigned int vendor,device;//通常者这两个字段足以识别设备
    unsigned int subvendor,subdevice;
    unsigned int class,class_mask;//表示设备所属的类
    unsigned long driver_data;//驱动chengx所使用的一个私有参数
}
pci_dev:每个pci设备都对应一个pci_dev结构体,类似每个网络设备都有一个net_device结构。
pci_driver:定义pci层和设备驱动程序之间的接口。
pci设备驱动程序由pci_driver的结构实例定义。
struct pci_driver{
    char *name;//驱动程序名称
    const struct pci_device_id *id_table;//id表,内核用于把一些设备关联到此驱动程序
    int (*probe)(struct pci_dev *dev,const struct pci_device_id *id);//pci层搜寻id对应的驱动程序(根据id_table)。此函数然后还会开启硬件,分配net_device结构,初始化并注册新设备。此函数中,驱动程序会正确分配工作所需的所以数据结构。
    void (*remove)(struct pci_dev *dev);//当驱动程序从内核除名,或者设备拔出时,pci层会调用此函数,是probe的配对函数。用于清理分配的一些数据,如I/O端口和I/O内存,net_device数据结构等。
    int (*suspend)(struct pci_dev *dev,pm_message_t state);
    int (*resume)(struct pci_dev *dev);//挂机和重新继续函数
    int (*enable_wake)(struct pci_dev *dev,u32 state,int enable);//使用此函数,驱动程序可以开启或关闭设备唤醒系统的能力
    struct pci_dynids dynids;//动态id
}
PCI总线系统中设备驱动程序的注册
每个设备驱动程序会把一个pci_device_id数据注册到内核,这个数组列出了其能处理的设备id。PCI子系统分别用pci_register_driver(旧版本是pci_module_init)和pci_unregister_driver向内核注册和除名驱动程序。pci_register_driver的一个参数是pci_driver。
当系统引导时,所有使用该PCI总线的设备会被检测到并建立了一份列表。例如,当驱动程序A被加载时,会调用pci_register_driver并提供其pci_driver实例而于PCI层注册。pci_driver中含有该驱动程序可以驱动的设备ID数组。接着,PCI层会去查看已侦测到的PCI设备列表中哪些设备能够被该驱动控制。最后,PCI层会调用pci_driver中的probe函数建立并注册相关的网络设备。
通过/proc/pci文件可以找到已注册的pci设备的信息。
电源管理和网络唤醒
PCI电源管理事件由pci_driver结构体里的suspend和resume函数处理。
网络唤醒(Wake-on-Lan,WOL),允许NIC收到特定类型的帧时唤醒系统。最初只能又特定的帧唤醒,现在,管理员可以配置哪些帧可以唤醒系统,如ARP包。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值