深入讲解Linux内核网络设备驱动(图例解析)
1.接收数据包过程概述
介绍数据包收包过程,有助于我们了解Linux内核网络设备在数据收包过程中的位置,下面从宏观的角度介绍数据包从被网卡接收到进入 socket 接收队列的整个过程:
2. 网络设备初始化
下面以常见的Intel I350 网卡的驱动 ibg 为例介绍它的工作过程:
2.1 初始化
驱动会使用向内核注册一个初始化函数,当驱动被加载时,内核会调用这个函数。在drivers/net//intel/igb/.c中初始化函数():
static int __init igb_init_module(void)
{
int ret;
pr_info("%s - version %s\n", igb_driver_string, igb_driver_version);
pr_info("%s\n", igb_copyright);
ret = pci_register_driver(&igb_driver);
return ret;
}
module_init(igb_init_module);
};
MODULE_DEVICE_TABLE(pci, igb_pci_tbl);static DEFINE_PCI_DEVICE_TABLE(igb_pci_tbl) = {
{ PCI_VDEVICE(INTEL, E1000_DEV_ID_I354_BACKPLANE_1GBPS) },
{ PCI_VDEVICE(INTEL, E1000_DEV_ID_I354_SGMII) },
{ PCI_VDEVICE(INTEL, E1000_DEV_ID_I354_BACKPLANE_2_5GBPS) },
{ PCI_VDEVICE(INTEL, E1000_DEV_ID_I211_COPPER), board_82575 },
{
【本文来源于互联网转载,如侵犯您的权益或不适传播,请邮件通知我们删除】