当前位置 : 主页 > 编程语言 > 其它开发 >

深入网卡

来源:互联网 收集:自由互联 发布时间:2022-05-30
网络适配器(Network Interface Card,NIC)又称网卡或网络接口卡,将其插入主机扩展槽,就可与计算机相连。 它是主机和网络的接口,用于协调主机与网络间数据、指令或信息的发送与接收 通过下

网络适配器(Network Interface Card,NIC)又称网卡或网络接口卡,将其插入主机扩展槽,就可与计算机相连。
它是主机和网络的接口,用于协调主机与网络间数据、指令或信息的发送与接收
通过下面的讲解我们可以看到,网卡也是一个系统工程,有大量的组织\厂商\公司等协同工作.

一 丶网卡硬件

厂商举例
.TP-LINK 深圳市普联技术有限公司成立于1996年, 是专门从事网络与通信终端设备研发、制造和行销的业内主流厂商,也是国内少数几家拥有完全独立自主研发和制造能力的公司之一, 创建了享誉全国的知名网络与通信品牌 网址官网:https://www.tp-link.com.cn/ .D-Link  国际著名网络设备和解决方案提供商、 全球无线网络领导品牌——D-Link(友讯网络)成立于1986年, 并于1994年10月在中国台湾证券交易所挂牌上市, 为中国台湾第一家成功上市的网络通…… 网址:http://www.dlink.com.cn/ .清华同方600100同方股份集团简介1997年6月25日,清华同方股份有限公司正式成立。 1997年6月27日, 清华同方在上海证券交易所上市(股票代码:600100)。 2006年5月30日,清华同方股份有限公司更名为“同方股份有限公司”。 以“科技服务社…… 网址:http://www.thtf.com.cn/index.html
 

下面我们以深圳市联瑞电子有限公司的一款网络适配器来看下网卡硬件说明书

http://www.lr-link.com.cn/download.html
http://www.lr-link.com.cn/Upfiles/down/LRES2013-POE%E4%BA%A7%E5%93%81%E8%A7%84%E6%A0%BC%E4%B9%A6.pdf(LRES2013-POE产品规格书.pdf)

 

 

1、 散热器
2、 POE 指示灯
3、 4*8-Pin 1G RJ45 连接器
4、 大 4-Pin +12V DC 供电接口
5、 扩展 I/O 接口
6、PCIe x4 总线

 我们可以认为网卡是集成电路+各种芯片组成(led芯片,pci芯片,poe芯片) +网卡的主控制芯片(比如:intel的82541,,82566DC等不同型号的芯片)

 网卡的各个芯片制作,每个都有自己的一些标准比如:pci总线规范,poe规范,led规范等.

 网卡说明书里面比较重要的内容:


这里提到很重要的是标准,拿主板(mother board)的网卡厂商举例,厂商众多,那么他们都是要遵循着一定的规范和标准来进行研发,制作硬件产品.这样互相之间制作出来的才能匹配
比如:pci插槽7个引脚,你就不能做6个,因为某个厂商的主板上只设计提供了6个引脚的插槽,我这里比较形象说明而已(即主板是有网卡的接口比如RJ-45)
当然随着技术的发展,网卡或者其他硬件很多都集成到主板或者其他器件里面了,所以看datasheet是必要的.
网卡硬件的标准,你可以百度搜 "IEEE Standards Association" 
1\ 技术参数标准 IEEE 802.3ab等
2\ PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准
3\ PoE标准:IEEE 802.3af标准、IEEE 802.3at标准、IEEE 802.3bt标准。https://www.cnblogs.com/aozhejin/p/16056809.html
IEEE 标准(IEEE Standards Association
IEEE 标准协会 (IEEE Standards Association) 是世界领先的标准制定机构,隶属于电气电子工程师学会(IEEE)。
IEEE标准协会提供了一个全球开放的,建立共识的环境和平台,人们能够在制定与市场相关的领先技术标准和行业解决方案的过程中共同努力,
推动形成一个更美好,更安全和可持续的世界。IEEE 标准协会通过开放的流程,广泛地调动来自不同背景和行业的人们,采用独特的无国界标准化模式,
制定市场推动以及行业普遍认可的标准。IEEE 标准在制定过程中,吸纳了新兴的科学技术知识,明确了技术指标和管理规范。
 http://www.networksorcery.com/enp/protocol/IEEE8023.htm
 https://standards.ieee.org/
 https://www.ieee.org/
 https://cn.ieee.org/standards/ 
IEEE 2700-2017:物联网传感器性能参数定义的 IEEE 标准
IEEE P1451.99:IEEE 物联网设备和系统协调标准
IEEE P2020:汽车系统图像质量标准
IEEE P2520:测试机器嗅觉设备和系统的标准
IEEE P2846:安全相关自动车辆行为模型的假设
ieee802协议是一个协议族主要包括:
IEEE 802现有标准

IEEE 802.1 :局域网体系结构、寻址、网络互联和网络
IEEE 802.1A:概述和系统结构
IEEE 802.1B:网络管理和网络互连
IEEE 802.2 :逻辑链路控制子层(LLC)的定义。
IEEE 802.3 :以太网介质访问控制协议 (CSMA/CD)及物理层技术规范。
IEEE 802.4 :令牌总线网(Token-Bus)的介质访问控制协议及物理层技术规范。
IEEE 802.5 :令牌环网(Token-Ring)的介质访问控制协议及物理层技术规范。
IEEE 802.6 :城域网介质访问控制协议DQDB (Distributed Queue Dual Bus 分布式队列双总线)及物理层技术规范。
IEEE 802.7 :宽带技术咨询组,提供有关宽带联网的技术咨询。
IEEE 802.8 :光纤技术咨询组,提供有关光纤联网的技术咨询。
IEEE 802.9 :综合声音数据的局域网(IVD LAN)介质访问控制协议及物理层技术规范。
IEEE 802.10:网络安全技术咨询组,定义了网络互操作的认证和加密方法。
IEEE 802.11:无线局域网(WLAN)的介质访问控制协议及物理层技术规范。
IEEE 802.11,1997年,原始标准(2Mbit/s,播在2.4GHz)。
IEEE 802.11a,1999年,物理层补充(54Mbit/s,播在5GHz)。
IEEE 802.11b,1999年,物理层补充(11Mbit/s播在2.4GHz)。
IEEE 802.11c,符合802.1D的媒体接入控制层桥接(MAC Layer Bridging)。
IEEE 802.11d,根据各国无线电规定做的调整。
IEEE 802.11e,对服务等级(Quality of Service, QoS)的支持。
IEEE 802.11f,基站的互连性(IAPP,Inter-Access Point Protocol),2006年2月被IEEE批准撤销。
IEEE 802.11g,2003年,物理层补充(54Mbit/s,播在2.4GHz)。
IEEE 802.11h,2004年,无线覆盖半径的调整,室内(indoor)和室外(outdoor)信道(5GHz频段)。
IEEE 802.11i,2004年,无线网络的安全方面的补充。.
IEEE 802.11j,2004年,根据日本规定做的升级。
IEEE 802.11l,预留及准备不使用。
IEEE 802.11m,维护标准;互斥及极限。
IEEE 802.11n,更高传输速率的改善,基础速率提升到72.2Mbit/s,可以使用双倍带宽40MHz,此时速率提升到150Mbit/s。支持多输入多输出技术(Multi-Input Multi-Output,MIMO)。
IEEE 802.11k,该协议规范规定了无线局域网络频谱测量规范。该规范的制订体现了无线局域网络对频谱资源智能化使用的需求。
IEEE 802.11p,这个通信协定主要用在车用电子的无线通信上。它设置上是从IEEE 802.11来扩充延伸,来符合智能型运输系统(Intelligent Transportation Systems,ITS)的相关应用。
IEEE 802.11ac,802.11n的潜在继承者,更高传输速率的改善,当使用多基站时将无线速率提高到至少1Gbps,将单信道速率提高到至少500Mbps。使用更高的无线带宽(80MHz-160MHz)(802.11n只有40MHz),更多的MIMO流(最多8条流),更好的调制方式(QAM256)。目前是草案标准(draft),预计正式标准于2012年晚些时间推出。Quantenna公司在2011年11月15日推出了世界上第一只采用802.11ac的无线路由器。Broadcom公司于2012年1月5日也发布了它的第一支支持802.11ac的芯片。
IEEE 802.12 :需求优先的介质访问控制协议(100VG AnyLAN)。
IEEE 802.13 :(未使用 )【不吉利的数字,没有人愿意使用它---查自《计算机网络-Andrew S. Tanebaum》 Page 63 - 1.6.2 国际标准领域中最有影响的组织】
IEEE 802.14:采用线缆调制解调器(Cable Modem)的交互式电视介质访问控制协议及网络层技术规范。
IEEE 802.15:采用蓝牙技术的无线个人网(Wireless Personal Area Networks,WPAN)技术规范。
IEEE 802.15.1:无线个人网络。
IEEE 802.15.4:低速无线个人网络
IEEE 802.16:宽带无线连接工作组,开发2~66GHz的无线接入系统空中接口。
IEEE 802.17:弹性分组环 (Resilient Packet Ring,RPR)工作组,制定了单性分组环网访问控制协议及有关标准。
IEEE 802.18:宽带无线局域网技术咨询组(Radio Regulatory)。
IEEE 802.19:多重虚拟局域网共存(Coexistence)技术咨询组。
IEEE 802.20:移动宽带无线接入( Mobile Broadband Wireless Access ,MBWA)工作组,制定宽带无线接入网的解决 。
IEEE 802.21:媒介独立换手(Media Independent Handover)。
IEEE 802.22:无线区域网(Wireless Regional Area Network)
IEEE 802.23:紧急服务工作组 (Emergency Service Work Group)

这里说下主板的pci插槽

PCI插槽,是基于PCI局部总线(Peripheral Component Interconnection,周边元件扩展接口)的扩展插槽。
其颜色一般为乳白色,位于主板上AGP插槽的下方,ISA插槽的上方。其位宽为32位或64位,工作频率为33MHz,
最大数据传输率为133MB/sec(32位)和266MB/sec(64位)。可插显卡、声卡、网卡、内置Modem、内置ADSL Modem、USB2.0卡、IEEE1394卡、IDE接口硬盘等
pci在市面上还是主流

 

二\网卡驱动源代码(nic)

国产网卡
http://www.lr-link.com.cn/Upfiles/down/%E8%81%94%E7%91%9ELR-LINKLRES1002PF-2SFP%EF%BC%8B_LRES1003PF-SFP%EF%BC%8B_v1.1.9Linux%E9%A9%B1%E5%8A%A8.rar
源码我们可以自己查看,关于pci.ids 请看 https://www.cnblogs.com/aozhejin/p/16057222.html
intel 82599网卡
http://www.intel.com/content/www/us/en/embedded/products/networking/82599-10-gbe-controller-datasheet.html
源码
https://www.intel.com/content/www/us/en/download/14302/intel-network-adapter-driver-for-pcie-intel-10-gigabit-ethernet-network-connections-under-linux.html

 

三\PCI设备驱动模型

Linux内核的PCI核心驱动为PCI驱动开发者提供了方便的系统接口,极大地方便了PCI设备驱动的开发。由于网卡就是pci设备,所以也就适合了.

Linux内核的PCI驱动为PCI设备驱动的开发提供了很多的接口,下面列举几个常用的接口:

pci_register_driver(struct pci_driver *drv)
功能:注册PCI驱动,参数为要注册的pci驱动的结构体。
int driver_probe_device(struct device_driver *drv, struct device *dev)

 



四\网卡驱动与Linux内核

 

关于上图的一些说明: 

系统初始化:
1. 协议模块调用 dev_add_pack() 来注册协议处理函数到链表 &ptype_base;
2. __init br_init() 用于初始化桥接相关的操作;
3. __init net_dev_init() 初始化了两个软中断;
网卡驱动初始化:

1. 网卡驱动在其 probe() 函数里面初始化 net_device 结构体,用来描述网卡,以及提供操作网卡的接口;

配置网卡:

1. 当我们通过ifconfig来配置网卡时,会调用到net_device->open(),该函数最主要的是注册了一个中断(当网卡接收到数据或数据发送完成会触发中断);

数据的发送与接收:
1. 当我们需要发送数据时,最终调用的是网卡驱动提供的函数:net_device->hard_start_xmit();
2. 当我们接收到数据时,会触发中断,中断处理函数调用会调用内核函数来接收数据,最终由驱动程序调用内核函数netif_receive_skb(),
把报文送入协议栈(接下来的代码硬件无关,与具体报文处理协议相关,比如:ARP协议,IPv4协议,IPv6协议等)。
3. 网卡的中断处理函数在调用内核函数接收数据时又分为非NAPI/NAPI两种方式; 4. NAPI方式涉及到中断的下半部处理的概念以及软中断。 5. 报文通过netif_receive_skb()送入协议栈之后,首先判断需不需要进行桥接处理; 6. 如果报文没有被桥接代码处理,再调用协议处理函数来处理; 网卡bond,即网卡绑定,也称作网卡捆绑。网卡绑定有多种称谓:Port Trunking, Channel Bonding, Link Aggregation, NIC teaming等等,
其实说的是一回事。就是将两个或者更多的物理网卡绑定成一个虚拟网卡。通过绑定可以达到链路冗余、带宽倍增、负载均衡等目的。是生产场景中提高性能和可靠性的一种常用技术。 Linux内置了网卡绑定的驱动程序,可以将多个物理网卡分别捆绑成多个不同的逻辑网卡(例如把eth0、eth1捆绑成bond0,把eth2、eth3捆绑成bond1)。
对于每一个bond接口来说,可以分别定义不同的绑定模式和链路监视选项。
 五\initscripts软件包

 network是一个系统服务,你可以使用systemctl来查看该服务状态;这个服务是由initscripts软件包提供的,你看这个initscripts软件包名字你也能猜出来,这个包提供了操作系统运行起来后的一些脚本对系统做一些设备初始化,其中就包括对网络设备做初始化;
[root@ht8 sd_mod]# rpm -qf "/etc/rc.d/init.d/network"
initscripts-9.49.53-1.el7_9.1.x86_64

 [root@ht8 sd_mod]# cat /etc/rc.d/init.d/network

 //我们在看看其他包

 [root@ht8 sd_mod]# rpm -qf "/usr/sbin/ifconfig"
 net-tools-2.0-0.25.20131004git.el7.x86_64

 [root@ht8 sd_mod]# rpm -qf "/usr/sbin/ip"
 iproute-4.11.0-30.el7.x86_64

 查看网卡模块

 [root@ht8 sd_mod]# ethtool -i ens192  //ens192是逻辑设备名称
 driver: vmxnet3
 version: 1.4.17.0-k-NAPI
 firmware-version:
 expansion-rom-version:
 bus-info: 0000:0b:00.0
 supports-statistics: yes
 supports-test: no
 supports-eeprom-access: no
 supports-register-dump: yes
 supports-priv-flags: no
 [root@ht8 sd_mod]# lsmod | grep vmxnet3
 vmxnet3 58104 0

 [root@ht8 sd_mod]# lspci | grep Ethernet
 0b:00.0 Ethernet controller: VMware VMXNET3 Ethernet Controller (rev 01)
 13:00.0 Ethernet controller: VMware VMXNET3 Ethernet Controller (rev 01)

 //驱动所在位置

 [root@ht8 sd_mod]# cat /lib/modules/3.10.0-327.el7.x86_64/kernel/drivers/net/vmxnet3/vmxnet3.ko 

 查看网卡驱动相关信息

//虚拟云主机
[root@ht8 sd_mod]# modinfo vmxnet3 filename: /lib/modules/3.10.0-327.el7.x86_64/kernel/drivers/net/vmxnet3/vmxnet3.ko version: 1.3.5.0-k license: GPL v2 description: VMware vmxnet3 virtual NIC driver author: VMware, Inc. rhelversion: 7.2 srcversion: 5A6F90E18800522C31A11B8 alias: pci:v000015ADd000007B0sv*sd*bc*sc*i* depends: //依赖没有显示 intree: Y vermagic: 3.10.0-327.el7.x86_64 SMP mod_unload modversions signer: CentOS Linux kernel signing key sig_key: 79:AD:88:6A:11:3C:A0:22:35:26:33:6C:0F:82:5B:8A:94:29:6A:B3 sig_hashalgo: sha256

可以下载一个网卡驱动看一下
http://www.lr-link.com.cn/download.html
该网卡最后通过 make && make install之后会被安装到
/lib/modules/<KERNEL VERSION>/updates/drivers/net/ethernet/wangxun/txgbe/txgbe.ko

//我们看一个实体机的查看的结果

[root@ht4 ~]# modinfo igb
filename: /lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/net/ethernet/intel/igb/igb.ko.xz
version: 5.4.0-k
license: GPL
description: Intel(R) Gigabit Ethernet Network Driver
author: Intel Corporation, <e1000-devel@lists.sourceforge.net>
rhelversion: 7.4
srcversion: 10DC5F00A6D6C21896DA93E
alias: pci:v00008086d000010D6sv*sd*bc*sc*i*
alias: pci:v00008086d000010A9sv*sd*bc*sc*i*
alias: pci:v00008086d000010A7sv*sd*bc*sc*i*
alias: pci:v00008086d000010E8sv*sd*bc*sc*i*
alias: pci:v00008086d00001526sv*sd*bc*sc*i*
alias: pci:v00008086d0000150Dsv*sd*bc*sc*i*
alias: pci:v00008086d000010E7sv*sd*bc*sc*i*
alias: pci:v00008086d000010E6sv*sd*bc*sc*i*
alias: pci:v00008086d00001518sv*sd*bc*sc*i*
alias: pci:v00008086d0000150Asv*sd*bc*sc*i*
alias: pci:v00008086d000010C9sv*sd*bc*sc*i*
alias: pci:v00008086d00000440sv*sd*bc*sc*i*
alias: pci:v00008086d0000043Csv*sd*bc*sc*i*
alias: pci:v00008086d0000043Asv*sd*bc*sc*i*
alias: pci:v00008086d00000438sv*sd*bc*sc*i*
alias: pci:v00008086d00001516sv*sd*bc*sc*i*
alias: pci:v00008086d00001511sv*sd*bc*sc*i*
alias: pci:v00008086d00001510sv*sd*bc*sc*i*
alias: pci:v00008086d00001527sv*sd*bc*sc*i*
alias: pci:v00008086d0000150Fsv*sd*bc*sc*i*
alias: pci:v00008086d0000150Esv*sd*bc*sc*i*
alias: pci:v00008086d00001524sv*sd*bc*sc*i*
alias: pci:v00008086d00001523sv*sd*bc*sc*i*
alias: pci:v00008086d00001522sv*sd*bc*sc*i*
alias: pci:v00008086d00001521sv*sd*bc*sc*i*
alias: pci:v00008086d0000157Csv*sd*bc*sc*i*
alias: pci:v00008086d0000157Bsv*sd*bc*sc*i*
alias: pci:v00008086d00001538sv*sd*bc*sc*i*
alias: pci:v00008086d00001537sv*sd*bc*sc*i*
alias: pci:v00008086d00001536sv*sd*bc*sc*i*
alias: pci:v00008086d00001533sv*sd*bc*sc*i*
alias: pci:v00008086d00001539sv*sd*bc*sc*i*
alias: pci:v00008086d00001F45sv*sd*bc*sc*i*
alias: pci:v00008086d00001F41sv*sd*bc*sc*i*
alias: pci:v00008086d00001F40sv*sd*bc*sc*i*
depends: i2c-core,ptp,dca,i2c-algo-bit  //网卡依赖的驱动
intree: Y
vermagic: 3.10.0-693.el7.x86_64 SMP mod_unload modversions
signer: CentOS Linux kernel signing key
sig_key: DA:18:7D:CA:7D:BE:53:AB:05:BD:13:BD:0C:4E:21:F4:22:B6:A4:9C
sig_hashalgo: sha256
parm: max_vfs:Maximum number of virtual functions to allocate per physical function (uint)
parm: debug:Debug level (0=none,...,16=all) (int)

//看一下系统里面安装的驱动信息
//虚拟云主机
[root@ht8 ~]# ls /lib/modules/3.10.0-327.el7.x86_64/kernel/drivers/
acpi        bcma       char     dma       gpu    i2c         iommu  media     misc  ntb      platform  ptp   staging  uio   vhost  xen
ata         block      cpufreq  edac      hid    idle        isdn   memstick  mmc   parport  power     rtc   target   usb   video
auxdisplay  bluetooth  crypto   firewire  hv     infiniband  leds   message   mtd   pci      powercap  scsi  thermal  uwb   virtio
base        cdrom      dca      firmware  hwmon  input       md     mfd       net   pcmcia   pps       ssb   tty      vfio  watchdog
//实体机
[root@ht4 ~]# ls /lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/
acpi        bcma       char     dca       firmware  hv     infiniband  leds      message  mtd     nvme     pinctrl   pps  scsi     thermal  uwb    virtio
ata         block      cpufreq  dma       gpio      hwmon  input       md        mfd      net     parport  platform  ptp  ssb      tty      vfio   watchdog
auxdisplay  bluetooth  crypto   edac      gpu       i2c    iommu       media     misc     ntb     pci      power     pwm  staging  uio      vhost  xen
base        cdrom      dax      firewire  hid       idle   isdn        memstick  mmc      nvdimm  pcmcia   powercap  rtc  target   usb      video
网络驱动

  [root@ht4 ~]# ls /lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/net/
  bonding ethernet hyperv macsec.ko.xz mdio.ko.xz nlmon.ko.xz ppp tun.ko.xz virtio_net.ko.xz wan
  can fjes ieee802154 macvlan.ko.xz mii.ko.xz ntb_netdev.ko.xz slip usb vmxnet3 wireless
  dummy.ko.xz geneve.ko.xz ifb.ko.xz macvtap.ko.xz netconsole.ko.xz phy team veth.ko.xz vxlan.ko.xz xen-netfront.ko.xz

  [root@ht8 ~]# ls /lib/modules/3.10.0-327.el7.x86_64/kernel/drivers/net/
  bonding ethernet ieee802154 macvlan.ko mdio.ko netconsole.ko ntb_netdev.ko ppp team usb virtio_net.ko vxlan.ko wireless
  dummy.ko hyperv ifb.ko macvtap.ko mii.ko nlmon.ko phy slip tun.ko veth.ko vmxnet3 wan xen-netfront.ko

 //随便查看一个 

 [root@ht4 net]# file tun.ko.xz
 tun.ko.xz: XZ compressed data

参看:
E:\linux内核\linux-2.6.38.5\linux-2.6.38.5\drivers

 

加载.ko文件

1)方法一 
 进入驱动名称.ko驱动模块文件所在的目录,然后直接 
[root@ht4 net]# insmod  驱动名称.ko 
2)方法二 
[root@ht4 net]# uname -r
3.10.0-693.el7.x86_64
将test.ko文件拷贝到/lib/module/#uname-r#/目录下
然后 depmod(会在/lib/modules/#uname -r#/目录下生成modules.dep和modules.dep.bb文件,表明模块的依赖关系) 
最后 modprobe 驱动名称(注意这里无需输入.ko后缀) 即可

 nm命令 https://www.cnblogs.com/aozhejin/p/16068843.html

[root@ht8 net]# nm ifb.ko
                 U alloc_netdev_mqs
0000000000000000 T cleanup_module
                 U _cond_resched
                 U consume_skb
                 U cpu_number
                 U dev_get_by_index_rcu
                 U dev_queue_xmit
                 U ether_setup
                 U eth_validate_addr
                 U __fentry__
                 U free_netdev
                 U get_random_bytes
0000000000000000 t ifb_cleanup_module
00000000000005a0 t ifb_close
0000000000000000 t ifb_init_module
0000000000000000 d ifb_link_ops
0000000000000020 r ifb_netdev_ops
00000000000000a0 t ifb_open
0000000000000400 t ifb_setup
0000000000000000 t ifb_stats64
0000000000000050 t ifb_validate
00000000000004a0 t ifb_xmit
0000000000000000 T init_module
                 U kfree_skb
0000000000000000 r .LC0
00000000000000a3 r __module_depends
                 U netif_receive_skb
                 U __netif_schedule
0000000000000000 d numifbs
0000000000000000 r __param_numifbs
                 U param_ops_int
0000000000000000 r __param_str_numifbs
                 U printk
                 U _raw_spin_trylock
                 U _raw_spin_unlock
                 U register_netdevice
0000000000000120 t ri_tasklet
                 U __rtnl_link_register
                 U __rtnl_link_unregister
                 U rtnl_link_unregister
                 U rtnl_lock
                 U rtnl_unlock
                 U skb_pull
                 U tasklet_init
                 U tasklet_kill
                 U __tasklet_schedule
0000000000000000 D __this_module
0000000000000000 r __UNIQUE_ID_alias33
0000000000000014 r __UNIQUE_ID_author32
00000000000000ac r __UNIQUE_ID_intree3
000000000000002c r __UNIQUE_ID_license31
0000000000000038 r __UNIQUE_ID_numifbs30
000000000000005b r __UNIQUE_ID_numifbstype29
0000000000000070 r __UNIQUE_ID_rhelversion5
0000000000000080 r __UNIQUE_ID_srcversion4
00000000000000b5 r __UNIQUE_ID_vermagic2
0000000000000000 r ____versions
                 U warn_slowpath_null
查看pci总线和网卡之间的关系
[root@ht8 ~]# lspci
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01) 
//主桥(也叫北桥芯片)非常重要,Intel采用的是南北桥架构针对x86处理器的应用领域而设计
请查看 http://pdf-html.ic37.com/pdf_file_A/20200531/pdf_pdf/pdf1/INTEL/82443_datasheet_214770/350489/82443_datasheet.pdf
00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 01) //pci桥设备 00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 08) 00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01) //系统管理总线 00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08) //ACPI是高级配置和电源接口的缩写 00:07.7 System peripheral: VMware Virtual Machine Communication Interface (rev 10) 00:0f.0 VGA compatible controller: VMware SVGA II Adapter //图形适配器 00:11.0 PCI bridge: VMware PCI bridge (rev 02) //pci桥设备 00:15.0 PCI bridge: VMware PCI Express Root Port (rev 01)
//关于什么是 pci express root port ,请看 https://www.techwalla.com/articles/what-is-a-pci-express-root-port
00:15.1 PCI bridge: VMware PCI Express Root Port (rev 01) 00:15.2 PCI bridge: VMware PCI Express Root Port (rev 01) 00:15.3 PCI bridge: VMware PCI Express Root Port (rev 01) 00:15.4 PCI bridge: VMware PCI Express Root Port (rev 01) 00:15.5 PCI bridge: VMware PCI Express Root Port (rev 01) 00:15.6 PCI bridge: VMware PCI Express Root Port (rev 01) 00:15.7 PCI bridge: VMware PCI Express Root Port (rev 01) 00:16.0 PCI bridge: VMware PCI Express Root Port (rev 01) 00:16.1 PCI bridge: VMware PCI Express Root Port (rev 01) 00:16.2 PCI bridge: VMware PCI Express Root Port (rev 01) 00:16.3 PCI bridge: VMware PCI Express Root Port (rev 01) 00:16.4 PCI bridge: VMware PCI Express Root Port (rev 01) 00:16.5 PCI bridge: VMware PCI Express Root Port (rev 01) 00:16.6 PCI bridge: VMware PCI Express Root Port (rev 01) 00:16.7 PCI bridge: VMware PCI Express Root Port (rev 01) 00:17.0 PCI bridge: VMware PCI Express Root Port (rev 01) 00:17.1 PCI bridge: VMware PCI Express Root Port (rev 01) 00:17.2 PCI bridge: VMware PCI Express Root Port (rev 01) 00:17.3 PCI bridge: VMware PCI Express Root Port (rev 01) 00:17.4 PCI bridge: VMware PCI Express Root Port (rev 01) 00:17.5 PCI bridge: VMware PCI Express Root Port (rev 01) 00:17.6 PCI bridge: VMware PCI Express Root Port (rev 01) 00:17.7 PCI bridge: VMware PCI Express Root Port (rev 01) 00:18.0 PCI bridge: VMware PCI Express Root Port (rev 01) 00:18.1 PCI bridge: VMware PCI Express Root Port (rev 01) 00:18.2 PCI bridge: VMware PCI Express Root Port (rev 01) 00:18.3 PCI bridge: VMware PCI Express Root Port (rev 01) 00:18.4 PCI bridge: VMware PCI Express Root Port (rev 01) 00:18.5 PCI bridge: VMware PCI Express Root Port (rev 01) 00:18.6 PCI bridge: VMware PCI Express Root Port (rev 01) 00:18.7 PCI bridge: VMware PCI Express Root Port (rev 01) 03:00.0 Serial Attached SCSI controller: Broadcom / LSI SAS1068 PCI-X Fusion-MPT SAS (rev 01) SCSI驱动
//Boradcom公司,LSI SAS1068芯片,VM Ware的LSI SAS1068 raid控制器 0b:
00.0 Ethernet controller: VMware VMXNET3 Ethernet Controller (rev 01) 网卡驱动 13:00.0 Ethernet controller: VMware VMXNET3 Ethernet Controller (rev 01)

//pci总线上接的设备情况

[root@ht8 ~]# lspci -t
-[0000:00]-+-00.0
+-01.0-[01]--  //桥设备
+-07.0 //isa桥设备
+-07.1  //isa桥设备
+-07.3  //isa桥设备
+-07.7  //isa桥设备
+-0f.0
+-11.0-[02]--
+-15.0-[03]----00.0
+-15.1-[04]--
+-15.2-[05]--
+-15.3-[06]--
+-15.4-[07]--
+-15.5-[08]--
+-15.6-[09]--
+-15.7-[0a]--
+-16.0-[0b]----00.0
+-16.1-[0c]--
+-16.2-[0d]--
+-16.3-[0e]--
+-16.4-[0f]--
+-16.5-[10]--
+-16.6-[11]--
+-16.7-[12]--
+-17.0-[13]----00.0
+-17.1-[14]--
+-17.2-[15]--
+-17.3-[16]--
+-17.4-[17]--
+-17.5-[18]--
+-17.6-[19]--
+-17.7-[1a]--
+-18.0-[1b]--
+-18.1-[1c]--
+-18.2-[1d]--
+-18.3-[1e]--
+-18.4-[1f]--
+-18.5-[20]--
+-18.6-[21]--
\-18.7-[22]--
请这两个命令和输出结果结合着看.
//查看网卡

[root@ht8 ~]# lspci -s 0b:00.0 -vvv | grep Width
LnkCap: Port #0, Speed 5GT/s, Width x32, ASPM L0s, Exit Latency L0s <64ns, L1 <1us
LnkSta: Speed 5GT/s, Width x32, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-

[root@ht8 ~]# lspci -s 0b:00.0 -vvv | grep Speed
LnkCap: Port #0, Speed 5GT/s, Width x32, ASPM L0s, Exit Latency L0s <64ns, L1 <1us
LnkSta: Speed 5GT/s, Width x32, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-
LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-

//查看一下详细信息
[root@ht8 ~]#  lspci -v
.......省略其他

0b:00.0 Ethernet controller: VMware VMXNET3 Ethernet Controller (rev 01)
   Subsystem: VMware VMXNET3 Ethernet Controller
   Physical Slot: 192
   Flags: bus master, fast devsel, latency 0, IRQ 19
   Memory at fd4fc000 (32-bit, non-prefetchable) [size=4K]
   Memory at fd4fd000 (32-bit, non-prefetchable) [size=4K]
   Memory at fd4fe000 (32-bit, non-prefetchable) [size=8K]
   I/O ports at 5000 [size=16]
   [virtual] Expansion ROM at fd400000 [disabled] [size=64K]
   Capabilities: [40] Power Management version 3
   Capabilities: [48] Express Endpoint, MSI 00
   Capabilities: [84] MSI: Enable- Count=1/1 Maskable- 64bit+
   Capabilities: [9c] MSI-X: Enable+ Count=25 Masked- 
   Capabilities: [100] Device Serial Number ff-90-a0-06-8e-0e-00-fe
   Kernel driver in use: vmxnet3
   Kernel modules: vmxnet3

13:00.0 Ethernet controller: VMware VMXNET3 Ethernet Controller (rev 01)
   Subsystem: VMware VMXNET3 Ethernet Controller
   Physical Slot: 224
   Flags: bus master, fast devsel, latency 0, IRQ 16
   Memory at fd3fc000 (32-bit, non-prefetchable) [size=4K]
   Memory at fd3fd000 (32-bit, non-prefetchable) [size=4K]
   Memory at fd3fe000 (32-bit, non-prefetchable) [size=8K]
   I/O ports at 6000 [size=16]
   [virtual] Expansion ROM at fd300000 [disabled] [size=64K]
   Capabilities: [40] Power Management version 3
   Capabilities: [48] Express Endpoint, MSI 00
   Capabilities: [84] MSI: Enable- Count=1/1 Maskable- 64bit+
   Capabilities: [9c] MSI-X: Enable+ Count=25 Masked-
   Capabilities: [100] Device Serial Number ff-3c-35-06-03-0b-00-fe
   Kernel driver in use: vmxnet3
   Kernel modules: vmxnet3

-x:以十六进制显示 PCI 配置空间 (configuration space) 的前64个字节映象 (标准头部信息)。此参数对调试驱动和lspci本身很有用

[root@ht8 devices]# lspci -x
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
00: 86 80 90 71 06 00 00 02 01 00 00 06 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 ad 15 76 19
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 01)
00: 86 80 91 71 1f 01 20 02 01 00 04 06 00 00 01 00
10: 00 00 00 00 00 00 00 00 00 01 01 40 f0 00 a0 02
20: f0 ff 00 00 f0 ff 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00
.......

 

//只给出网卡部分的信息

[root@ht8 devices]# lspci -vvx
......

13:00.0 Ethernet controller: VMware VMXNET3 Ethernet Controller (rev 01)
Subsystem: VMware VMXNET3 Ethernet Controller
Physical Slot: 224
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Interrupt: pin A routed to IRQ 16
Region 0: Memory at fd3fc000 (32-bit, non-prefetchable) [size=4K]
Region 1: Memory at fd3fd000 (32-bit, non-prefetchable) [size=4K]
Region 2: Memory at fd3fe000 (32-bit, non-prefetchable) [size=8K]
Region 3: I/O ports at 6000 [size=16]
[virtual] Expansion ROM at fd300000 [disabled] [size=64K]
Capabilities: [40] Power Management version 3
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [48] Express (v2) Endpoint, MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
ExtTag- AttnBtn- AttnInd- PwrInd- RBE- FLReset- SlotPowerLimit 0.000W
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
MaxPayload 128 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
LnkCap: Port #0, Speed 5GT/s, Width x32, ASPM L0s, Exit Latency L0s <64ns, L1 <1us
ClockPM- Surprise- LLActRep- BwNot- ASPMOptComp-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- CommClk-
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 5GT/s, Width x32, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Not Supported, TimeoutDis-, LTR-, OBFF Not Supported
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR-, OBFF Disabled
LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete-, EqualizationPhase1-
EqualizationPhase2-, EqualizationPhase3-, LinkEqualizationRequest-
Capabilities: [84] MSI: Enable- Count=1/1 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Capabilities: [9c] MSI-X: Enable+ Count=25 Masked-
Vector table: BAR=2 offset=00000000
PBA: BAR=2 offset=00001000
Capabilities: [100 v1] Device Serial Number ff-3c-35-06-03-0b-00-fe
Kernel driver in use: vmxnet3
Kernel modules: vmxnet3
00: ad 15 b0 07 07 04 10 00 01 00 00 02 08 00 00 00
10: 00 c0 3f fd 00 d0 3f fd 00 e0 3f fd 01 60 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 ad 15 b0 07
30: 00 00 00 00 40 00 00 00 00 00 00 00 09 01 00 00
.......

[root@ht8 devices]# lspci -inm
00:00.0 Class 0600: Device 8086:7190 (rev 01)
00:01.0 Class 0604: Device 8086:7191 (rev 01)
00:07.0 Class 0601: Device 8086:7110 (rev 08)
00:07.1 Class 0101: Device 8086:7111 (rev 01)
00:07.3 Class 0680: Device 8086:7113 (rev 08)
00:07.7 Class 0880: Device 15ad:0740 (rev 10)
00:0f.0 Class 0300: Device 15ad:0405
00:11.0 Class 0604: Device 15ad:0790 (rev 02)
00:15.0 Class 0604: Device 15ad:07a0 (rev 01)
00:15.1 Class 0604: Device 15ad:07a0 (rev 01)
00:15.2 Class 0604: Device 15ad:07a0 (rev 01)
00:15.3 Class 0604: Device 15ad:07a0 (rev 01)
00:15.4 Class 0604: Device 15ad:07a0 (rev 01)
00:15.5 Class 0604: Device 15ad:07a0 (rev 01)
00:15.6 Class 0604: Device 15ad:07a0 (rev 01)
00:15.7 Class 0604: Device 15ad:07a0 (rev 01)
00:16.0 Class 0604: Device 15ad:07a0 (rev 01)
00:16.1 Class 0604: Device 15ad:07a0 (rev 01)
00:16.2 Class 0604: Device 15ad:07a0 (rev 01)
00:16.3 Class 0604: Device 15ad:07a0 (rev 01)
00:16.4 Class 0604: Device 15ad:07a0 (rev 01)
00:16.5 Class 0604: Device 15ad:07a0 (rev 01)
00:16.6 Class 0604: Device 15ad:07a0 (rev 01)
00:16.7 Class 0604: Device 15ad:07a0 (rev 01)
00:17.0 Class 0604: Device 15ad:07a0 (rev 01)
00:17.1 Class 0604: Device 15ad:07a0 (rev 01)
00:17.2 Class 0604: Device 15ad:07a0 (rev 01)
00:17.3 Class 0604: Device 15ad:07a0 (rev 01)
00:17.4 Class 0604: Device 15ad:07a0 (rev 01)
00:17.5 Class 0604: Device 15ad:07a0 (rev 01)
00:17.6 Class 0604: Device 15ad:07a0 (rev 01)
00:17.7 Class 0604: Device 15ad:07a0 (rev 01)
00:18.0 Class 0604: Device 15ad:07a0 (rev 01)
00:18.1 Class 0604: Device 15ad:07a0 (rev 01)
00:18.2 Class 0604: Device 15ad:07a0 (rev 01)
00:18.3 Class 0604: Device 15ad:07a0 (rev 01)
00:18.4 Class 0604: Device 15ad:07a0 (rev 01)
00:18.5 Class 0604: Device 15ad:07a0 (rev 01)
00:18.6 Class 0604: Device 15ad:07a0 (rev 01)
00:18.7 Class 0604: Device 15ad:07a0 (rev 01)
03:00.0 Class 0107: Device 1000:0054 (rev 01)
0b:00.0 Class 0200: Device 15ad:07b0 (rev 01)
13:00.0 Class 0200: Device 15ad:07b0 (rev 01)
讲解一下他们的意思:
0b:00.0 标识pci编号(通过这个可以查很多东西),0200标识Fiber Channel controller,
15ad代表供应商id,07b0标识产品名称
0b:00.0 总线编号由 bus number = 09 ,device number = 00 function = 0 组成,这三个组成16位的标识码(标识bdf)

bus number 总线的编号
device number 设备号,可最多接32种设备
function 功能号可最多接8种功能

//可以查看pci-express的速度

[root@ht8 devices]# lspci -n -d 15ad:07b0  -vvv |grep -i width 

LnkCap:Port #0, Speed 5GT/s, Width x32, ASPM L0s, Exit Latency L0s <64ns, L1 <1us

LnkSta:Speed 5GT/s, Width x32, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-

LnkCap:Port #0, Speed 5GT/s, Width x32, ASPM L0s, Exit Latency L0s <64ns, L1 <1us

LnkSta:Speed 5GT/s, Width x32, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-

其他命令还有

[root@ht8 devices]# lspci -m
[root@ht8 devices]# lspci -n
[root@ht8 devices]# lspci -b
[root@ht8 devices]# lspci -i


重点看下主板的芯片组(Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX)
[root@ht8 ~]# lspci
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01) 
//主桥(也叫北桥芯片)非常重要,Intel采用的是南北桥架构针对x86处理器的应用领域而设计
请查看 http://pdf-html.ic37.com/pdf_file_A/20200531/pdf_pdf/pdf1/INTEL/82443_datasheet_214770/350489/82443_datasheet.pdf 00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 01) //pci桥设备 00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 08)   //isa总线桥设备 00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01) //系统管理总线
.........省略
下图为:Intel® 440BX AGPset System Block Diagram



网卡编写驱动提供上层调用流程:
内核相关网络接口--->网卡驱动编写--->生成网卡驱动.ko --->linux用户态调用网卡驱动开放接口
 
网友评论