电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

LINUX网卡驱动VIP免费

LINUX网卡驱动_第1页
LINUX网卡驱动_第2页
LINUX网卡驱动_第3页
学习应该是一个先把问题简单化,在把问题复杂化的过程。一开始就着手处理复杂的问题,难免让人有心惊胆颤,捉襟见肘的感觉。读 Linux 网卡驱动也是一样。那长长的源码夹杂着那些我们陌生的变量和符号,望而生畏便是理所当然的了。不要担心,事情总有解决的办法,先把一些我们管不着的代码切割出去,留下必须的部分,把框架掌握了,哪其他的事情自然就水到渠成了,这是笔者的心得。 一般在使用的 Linux 网卡驱动代码动辄 3000 行左右,这个代码量以及它所表达出来的知识量无疑是庞大的,我们有没有办法缩短一下这个代码量,使我们的学习变的简单些呢,经过笔者的不懈努力,在仍然能够使网络设备正常工作的前提下,把它缩减到了 600 多行,我们把暂时还用不上的功能先割出去。这样一来,事情就简单多了,真的就剩下一个框架了。下面我们就来剖析这个可以执行的框架。 限于篇幅,以下分析用到的所有涉及到内核中的函数代码,我都不予列出,但给出在哪个具体文件中,请读者自行查阅。 首先,我们来看看设备的初始化。当我们正确编译完我们的程序后,我们就需要把生成的目标文件加载到内核中去,我们会先 ifconfig eth0 down 和 rmmod 8139too 来卸载正在使用的网卡驱动,然后insmod 8139too.o 把我们的驱动加载进去(其中8139too.o 是我们编译生成的目标文件)。就像C程序有主函数main()一样,模块也有第一个执行的函数,即module_init(rtl8139_init_module);在我们的程序中,rtl8139_init_module()在 insmod 之后首先执行,它的代码如下: static int __init rtl8139_init_module (void) { return pci_module_init (&rtl8139_pci_driver); } 它直接调用了 pci_module_init(),这个函数代码在 Linux/drivers/net/eepro100.c 中,并且把 rtl8139_pci_driver(这个结构是在我们的驱动代码里定义的,它是驱动程序和 PCI 设备联系的纽带)的地址作为参数传给了它。 rtl8139_pci_driver 定义如下: static struct pci_driver rtl8139_pci_driver = { name: MODNAME, id_table: rtl8139_pci_tbl, probe: rtl8139_init_one, remove: rtl8139_remove_one, }; pci_module_init()在驱动代码里没有定义,你一定想到了,它是 Linux 内核提供给模块是一个标准接口,那么这个接口都干了些什么,笔者跟踪了这个函数。里面调用了 pci_register_driver(),这个函数代码在 Linux/drivers/pci/pc...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

小辰6+ 关注
实名认证
内容提供者

出售各种资料和文档

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部