e1000驱动学习总结

e1000.h : 驱动头文件
e1000_ethtool.c  : ethtool接口
e1000_hw.c  e1000_hw.h : 和硬件(PCI)相关头文件和实现
e1000_main.c : 主函数
e1000_osdep.h : 寄存器操作
e1000_param.c : proc接口参数

 

module_init(e1000_init_module);

module_exit(e1000_exit_module);

 

static int __init
e1000_init_module(void)
{
 int ret;
 printk(KERN_INFO "%s - version %s/n",
        e1000_driver_string, e1000_driver_version);

 printk(KERN_INFO "%s/n", e1000_copyright);

 ret = pci_module_init(&e1000_driver);

 return ret;
}

 

e1000_driver变量的定义:

static struct pci_driver e1000_driver = {
 .name     = e1000_driver_name,
 .id_table = e1000_pci_tbl,
 .probe    = e1000_probe,
 .remove   = __devexit_p(e1000_remove),
 /* Power Managment Hooks */
#ifdef CONFIG_PM
 .suspend  = e1000_suspend,
 .resume   = e1000_resume
#endif
};

 

e1000_probe函数定义:

static int __devinit
e1000_probe(struct pci_dev *pdev,
            const struct pci_device_id *ent)

 

 if ((err = pci_enable_device(pdev)))
  return err;

 

 netdev = alloc_etherdev(sizeof(struct e1000_adapter));
 if (!netdev) {
  err = -ENOMEM;
  goto err_alloc_etherdev;
 }

 

 netdev->open = &e1000_open;
 netdev->stop = &e1000_close;
 netdev->hard_start_xmit = &e1000_xmit_frame;
 netdev->get_stats = &e1000_get_stats;
 netdev->set_multicast_list = &e1000_set_multi;
 netdev->set_mac_address = &e1000_set_mac;
 netdev->change_mtu = &e1000_change_mtu;
 netdev->do_ioctl = &e1000_ioctl;
 e1000_set_ethtool_ops(netdev);
 netdev->tx_timeout = &e1000_tx_timeout;
 netdev->watchdog_timeo = 5 * HZ;
#ifdef CONFIG_E1000_NAPI
 netdev->poll = &e1000_clean;
 netdev->weight = 64;
#endif
 netdev->vlan_rx_register = e1000_vlan_rx_register;
 netdev->vlan_rx_add_vid = e1000_vlan_rx_add_vid;
 netdev->vlan_rx_kill_vid = e1000_vlan_rx_kill_vid;
#ifdef CONFIG_NET_POLL_CONTROLLER
 netdev->poll_controller = e1000_netpoll;
#endif
 strcpy(netdev->name, pci_name(pdev));

 netdev->mem_start = mmio_start;
 netdev->mem_end = mmio_start + mmio_len;
 netdev->base_addr = adapter->hw.io_base;

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
新增功能 在较新的内核(4.19 +)上修复构建 Backport 到上游: e1f65b0d70 (e1000e:允许非单调 SYSTIM 读数) 初始支持以下设备: 以太网连接(11) I219-LM 以太网连接(11) I219-V 以太网连接(12) I219-LM 以太网连接(12) I219-V 添加了对 PCIm 功能状态的支持: 由于提交:5d8682588605 ("[misc] mei: me:允许运行时 面向 D0i3 的平台的 pm ") 当拔下电缆并重新连接时,网卡进入 DMoff 状态。这导致了错误的链路指示和双工不匹配。此错误 decribed 在: https://bugzilla.redhat.com/show_bug.cgi?id=1689436 在监测任务中检查 PCIm 功能状态和执行 PHY 重置后,解决了这一问题。 旨在 该驱动程序包括对基于英特尔®安腾®2的支持,以及英特尔® EM64T 系统。此版本支持最新的2.4 系列内核以及2.6、x.x.x.x 和版本。 e1000e 的 gz 设计为在 Linux * 下与 Intel®82563/82566/82567 千兆位以太网 PHY、英特尔®82571/82572/82573/82574/82577/82578/82579/82583 千兆位 Ethernet 控制器和 I217/I218 控制器搭配使用。SourceForge * 提供了该驱动程序的最新版本和更早版本。 如果您的适配器/连接不是82563、82566、82567、82571、82572、82573、82574、82577、82578、82579或基于82583的设备,则应使用以下驱动程序之一: igb-x * gz 驱动程序支持所有英特尔®82575、82576、82580、I350、I210 或基于 I211 的千兆位网络适配器/连接 e1000-x * gz 驱动程序支持所有基于8254x 的所有®英特尔架构 PCI 和 PCI-X 千兆位网络适配器/连接
DPDK e1000驱动是针对英特尔e1000网卡的一种高性能驱动程序。它使用DPDK框架中的API,通过绕过Linux内核协议栈,直接与网络硬件进行交互,从而提高了网络性能。DPDK e1000驱动的主要工作方式包括初始化、DMA配置和中断处理等,其实现代码主要分布在“lib/librte_e1000_em”和“lib/librte_pmd_e1000_em”两个目录下。 DPDK e1000驱动的初始化过程主要包括初始化硬件设备、动态配置硬件寄存器和设置驱动程序的相关参数等。驱动初始化时,会对网卡进行复位,并设置MAC地址、RSS多队列等参数。此外,驱动还会初始化一些硬件性能参数,如帧大小、Jumbo帧支持等。 在DMA配置方面,DPDK e1000驱动会使用DPDK提供的rte_mempool来管理内存池,对接收和发送的数据包进行缓存和预先分配内存,避免了重复的内存申请和管理操作,从而提升了驱动程序的效率。 在中断处理方面,DPDK e1000驱动会通过rte_intr_enable()和rte_intr_unmask()函数来使能网卡接收中断,并使用rte_eth_rx_burst()和rte_eth_tx_burst()函数提高接收和发送的效率。此外,DPDK e1000驱动还支持RSS多队列技术,可以将接收到的数据包划分到不同的队列中处理,提高网络的处理能力和负载均衡能力。 总之,DPDK e1000驱动在单个处理器上能够达到每秒数百万个数据包的处理速度,是一种高性能的网络驱动程序,广泛应用于云计算、大数据等高性能计算领域。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值