i40e网卡内核驱动初始化流程

i40e_init_module()

  __pci_register_driver()

    driver_register()

      driver_find()//判断是否是已经注册过的driver

      bus_add_driver()//将驱动添加到对应类型的总线上 

           driver_attach()//通过bus_for_each_dev,bus上每个device都会调用一次__driver_attach()

                __driver_attach()

                     driver_match_device()

                            drv->bus->match(dev, drv)//pci_bus_match()

                                 pci_match_device()

                                        pci_match_id()

                      device_driver_attach()

                                       driver_probe_device()

                                                    really_probe()

                                                                driver_sysfs_add(dev)//关联driver与device

                                                                i40e_probe()//初始化

                                                                driver_bound()//将dev挂接到该driver->klist_devices上

      driver_add_groups()//将驱动添加到对应组中  

       kobject_uevent()//注册uevent事件 

每个网卡驱动都有一个描述驱动的结构体变量,id_table中描述了driver所支持的device id。

在pci_match_device()函数中会通过调用pci_match_id()函数在id_table中匹配device的device id。

Code Flow:

i40e_probe()

pci_enable_device_mem()

pci_request_mem_regions()

pci_enable_pcie_error_reporting()

pci_set_master() //Now that we have a PCI connection

i40e_set_mac_type()

i40e_init_shared_code()

i40e_init_adminq()

i40e_verify_eeprom()

i40e_get_capabilities()

i40e_sw_init()//初始化pf

i40e_configure_lan_hmc()

i40e_get_platform_mac_addr()//获取mac地址

i40e_init_interrupt_scheme()

i40e_setup_pf_switch()//alloc ring

i40e_lan_add_device()

pcie_capability_read_word()

i40e_set_pci_config_data()//将配置空间的Cap信息写入HW结构体中 主要是link width and speed

当设备加载完驱动后,会进入probe函数进行alloc ring、设置mac地址、获取设备Capability、注册中断等初始化工作,

在i40e_init_shared_code()函数中会调用i40e_set_mac_type()函数根据设备的device id设置网卡的mac_type,由于无法找到网卡的device id,导致返回error。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值