Linux网卡驱动程序分析.doc

Linux网卡驱动程序分析.doc

ID:52199041

大小:52.50 KB

页数:12页

时间:2020-03-24

Linux网卡驱动程序分析.doc_第1页
Linux网卡驱动程序分析.doc_第2页
Linux网卡驱动程序分析.doc_第3页
Linux网卡驱动程序分析.doc_第4页
Linux网卡驱动程序分析.doc_第5页
资源描述:

《Linux网卡驱动程序分析.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、(转)Linux网卡驱动程序分析              学习应该是一个先把问题简单化,再把问题复杂化的过程。一开始就着手处理复杂的问题,难免让人有心惊胆颤,捉襟见肘的感觉。读Linux网卡驱动也是一样。那长长的源码夹杂着那些我们陌生的变量和符号,望而生畏便是理所当然的了。不要担心,事情总有解决的办法,先把一些我们管不着的代码切割出去,留下必须的部分,把框架掌握了,那其他的事情自然就水到渠成了

2、,这是笔者的心得。      一般在使用的Linux网卡驱动代码动辄3000行左右,这个代码量以及它所表达出来的知识量无疑是庞大的,我们有没有办法缩短一下这个代码量,使我们的学习变的简单些呢?经过笔者的不懈努力,在仍然能够使网络设备正常工作的前提下,把它缩减到了600多行,我们把暂时还用不上的功能先割出去。这样一来,事情就简单多了,真的就剩下一个框架了。      下面我们就来剖析这个可以执行的框架。 &

3、nbsp;      限于篇幅,以下分析用到的所有涉及到内核中的函数代码,我都不予列出,但给出在哪个具体文件中,请读者自行查阅。    首先,我们来看看设备的初始化。当我们正确编译完我们的程序后,我们就需要把生成的目标文件加载到内核中去,我们会先ifconfigeth0down和rmmod8139too来卸载正在使用的网卡驱动,然后insmod8139too.o把我们的驱动加载进去(其中8139too.o是我们编译生成的目标文件)。就

4、像C程序有主函数main()一样,模块也有第一个执行的函数,即module_init(rtl8139_init_module);在我们的程序中,rtl8139_init_module()在insmod之后首先执行,它的代码如下:    staticint__initrtl8139_init_module(void)  {        returnpci_module_init(&rtl

5、8139_pci_driver);  }    它直接调用了pci_module_init(),这个函数代码在Linux/drivers/net/eepro100.c中,并且把rtl8139_pci_driver(这个结构是在我们的驱动代码里定义的,它是驱动程序和PCI设备联系的纽带)的地址作为参数传给了它。rtl8139_pci_driver定义如下:    staticstructpci_driverrtl8139_pci_dri

6、ver={        name:MODNAME,          id_table:rtl8139_pci_tbl,        probe:rtl8139_init_one,        

7、;remove:rtl8139_remove_one,  };      pci_module_init()在驱动代码里没有定义,你一定想到了,它是Linux内核提供给模块是一个标准接口,那么这个接口都干了些什么?笔者跟踪了这个函数,里面调用了pci_register_driver(),这个函数代码在Linux/drivers/pci/pci.c中,pci_register_driver做了三件事情。  ①是把带过来的参数rtl813

8、9_pci_driver在内核中进行了注册。内核中有一个PCI设备的大的链表,这里负责把这个PCI驱动挂到里面去。  ②是查看总线上所有PCI设备(网卡设备属于PCI设备的一种)的配置空间,如果发现标识信息与rtl

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。