Linux网卡驱动分析(精品)

Linux网卡驱动分析(精品)

ID:44416590

大小:103.00 KB

页数:7页

时间:2019-10-21

Linux网卡驱动分析(精品)_第1页
Linux网卡驱动分析(精品)_第2页
Linux网卡驱动分析(精品)_第3页
Linux网卡驱动分析(精品)_第4页
Linux网卡驱动分析(精品)_第5页
资源描述:

《Linux网卡驱动分析(精品)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Linux网卡驱动分析学习应该是一个先把问题简单化,在把问题复杂化的过程。一开始就着手处理复杂的问题,难免让人有心惊胆颤,捉襟见肘的感觉。读Linux网卡驱动也是一样。那长长的源码夹杂着那些我们陌牛•的变量和符号,望而生畏便是理所当然的了。不要担心,事情总有解决的办法,先把一些我们管不着的代码切割出去,留下必须的部分,把框架掌握了,哪其他的事情自然就水到渠成了,这是笔者的心得。-般在使用的Linux网卡驱动代码动辄3000行左右,这个代码量以及它所表达出來的知识量无疑是庞大的,我们有没有办法缩短一卜-这个代码量,使我们的学习变的简单些呢,经

2、过笔者的不懈努力,在仍然能够使网络设备正常工作的前提下,把它缩减到了60()多行,我们把暂时还用不上的功能先割出去。这样一来,事情就简单多了,真的就剩下一个框架了(欲索取者请通过xhbbs@tom.com联系我)。下面我们就来剖析这个可以执行的框架。限于篇幅,以下分析用到的所有涉及到内核中的函数代码,我都不予列出,但给出在哪个貝-体文件中,请读者口行査阅。首先,我们来看看设备的初始化。当我们正确编译完我们的程序示,我们就需要把生成的目标文件加载到内核屮去,我们会先ifconfigethOdown和rmmod8139too來卸载止在使用的网卡

3、驱动,然后insmod8139too.o把我们的驱动加载进去(其中8139too.o是我们编译生成的冃标文件)。就像C程序冇主函数main()一样,模块也有第一个执行的函数,即module_init(rtl8139_init_module);在我们的程序'I1*rtl8139_init_module()在insmod之后首先执行,它的代码如下:staticint_initrtl8139_init_module(void){returnpci_module_init(&rtl8139_pci_driver);}它总接调用了pci_module

4、_init(),这个函数代码在Linux/drivers/net/eepro1OO.c中,并且把rtl8139_pci_drivcr(这个结构是在我们的驱动代码里定义的,它是驱动程序和PCI设备联系的纽带)的地址作为参数传给了它。rtl8139_pci_driver定义如下:staticstructpci_driverrtl8139_pci_driver={name:MODNAME,id_table:rtl8139_pci_tbl,probe:rtl8139_init_one,remove:rtl8139_rcmovc_onc,};pci_

5、module_init()在张动代码里没有定义,你一定想到了,它是Linux内核提供给模块是一个标准接口,那么这个接口都干了些什么,笔者跟踪了这个函数。里血•调用了pci_register_driver(),这个函数代码在Linux/drivers/pci/pci.c屮,pci_register_driver做了三件事情。①是把带过來的参数rtl8139_pci_driver在内核中进行了注册,内核中冇一个PCI设备的大的链表,这里负责把这个PCI驱动挂到里面去。②是查看总线上所有PCI设备(网卡设备属于PCI设备的一•种)的配置空间如呆发

6、现标识信息与rtl8139_pci_drivcr中的id_tablc相同即rtl8139_pci_tbl,而它的定义如下:staticstructpci_dcvicc_idrtl8139_pci_tbl[]_devinitdata={{OxlOec,0x8129,PCI_ANY_ID,PCI_ANY_ID,0,0,1},{PCI_ANYJD,0x8139,Ox1Oec,0x8139,0,0,0},{0,}};,那么就说明这个驱动程序就是用來驱动这个设备的,于是调川rtl8139_pci_driver中的probe两数即rtl8139_ini

7、t_one,S个函数是在我们的驱动程序屮定义了的,它是川來初始化整个设备和做一些准备工作。这里需要注意一下pci_device_id是内核定义的用来辨别不同PCI设备的一个结构,例如在我们这里OxlOcc代表的是Rcaltck公司,我们扫描PCI设备配置空间如果发现有Realtek公同制造的设备时,两者就对上了。当然对上了公司号后还得看其他的设备号什么的,都対上了才说明这个驱动是可以为这个设备服务的。①是把这个rtl8139_pci_driver结构挂在这个设备的数据结构(pci_dev)上,表示这个设备从此就有了自己的驱动了。而驱动也找到

8、了它服务的对象了。PCI是一个总线标准,PCI总线上的设备就是PCI设备,这些设备冇很多类型,当然也包括网卡设备,每一个PCI设备在内核中抽彖为一个数据结构pci.dev,它描述

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

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

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