e1000网卡驱动第二天_2

    终于到了传说中的e1000_probe.

    e1000_probe用于初始化网卡。首先测试是否需要io映射,如果需要则进行,否则不进行,然后使能pci设备。pci_set_dma_mask 的作用是什么,我不清楚。pci_request_selected_regions对选中的区域进行映射。pci_set_master设置总线。 alloc_etherdev申请参数指定的结构体内存。为什么返回给netdev呢?因为alloc_etherdev申请的是netdev+指定结构体的长度。下面将pdev, netdev ,hw, adapter联系起来。对网卡的bar_1到bar_5进行资源申请。随后设置netdev的函数指针。bd_number保存了找到的匹配的网卡的个数。e1000_sw_init进行软件初始化,e1000_check_phy_reset_block还不清楚做了什么,设置 netdev->vlan_features变量。e1000_init_eeprom_params初始化 eeprom,e1000_reset_hw用于在读eeprom前,让网卡处于一个一直的状态。 e1000_validate_eeprom_checksum进行eeprom校验,然后进行网卡mac地址的操作。初始化三个时钟,初始化 reset_task工作队列,e1000_check_options是个很大的函数,用于检验所有的配置选项。e1000_reset重置所有的设置。e1000_get_hw_control取得硬件控制,最后注册驱动到内核。

    e1000_remove就是做一些清理的工作,完成任务后不需要网卡工作。比较容易理解。

    e1000_sw_init用于初始化adapter.首先初始化hw的一些变量,e1000_set_mac_type用于确定网卡的类型,e1000_set_media_type设置介质类型。设置接收和发送队列的个数后,申请接收和发送缓冲区,接下来的这个循环似乎很重要,也比较诡异。初始化传输锁,禁止中断,初始化状态锁,设置网卡状态为down.

    e1000_alloc_queues用于申请队列,发送队列和接收队列,突然想到一点,就是双队列的问题,不过这里只是单队列。然后申请轮询需要的net_device结构。

    在继续e1000_open之前,有些困了,回忆一下自己看到的东西,感觉一个函数一个函数,没有什么系统的印象,所以在分函数看完后,会按照初始化的顺序进行系统的分析,我觉得在进行系统分析之前,应该对每个函数大概的功能进行了解,尤其是我这种对网卡驱动工作原理没有概念的人。我的终极目标是希望自己可以随心所欲的改写一下网卡驱动,按照自己的要求进行工作。好了,休息一下,回来继续进行。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值