Linux+操作系统网络驱动程序编写.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:15 大小:207KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

Linux+操作系统网络驱动程序编写.pdf

Linux+操作系统网络驱动程序编写.pdf

预览

免费试读已结束,剩余 5 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

发信人:Bordi(halfelf),信区:linux标题:Linux网络驱动程序编写发信站:饮水思源站(ThuAug521:56:401999),转信工作需要写了我们公司一块网卡的Linux驱动程序经历一个从无到有的过程深感技术交流的重要Linux作为挑战微软垄断的强有力武器日益受到大家的喜爱真希望她能在中国迅速成长把程序文档贴出来希望和大家探讨Linux技术和应用促进Linux在中国的普及本文可随意转载但请不要在盈利性出版物上刊登------------------Linux操作系统网络驱动程序编写-------------------------------Contacttheauthorbymailto:bordi@bordi.dhs.org------Linux操作系统网络驱动程序编写一.Linux系统设备驱动程序概述1.1Linux设备驱动程序分类1.2编写驱动程序的一些基本概念二.Linux系统网络设备驱动程序二.Linux系统网络设备驱动程序2.1网络驱动程序的结构2.2网络驱动程序的基本方法2.3网络驱动程序中用到的数据结构2.4常用的系统支持三.编写Linux网络驱动程序中可能遇到的问题3.1中断共享3.2硬件发送忙时的处理3.3流量控制(flowcontrol)3.4调试四.进一步的阅读五.杂项一.Linux系统设备驱动程序概述1.1Linux设备驱动程序分类Linux设备驱动程序在Linux的内核源代码中占有很大的比例源代码的长度日益增加主要是驱动程序的增加在Linux内核的不断升级过程中驱动程序的结构还是相对稳定在2.0.xx到2.2.xx的变动里驱动程序的编写做了一些改变但是从2.0.xx的驱动到2.2.xx的移植只需做少量的工作Linux系统的设备分为字符设备(chardevice)块设备(blockdevice)和网络设备(networkdevice)三种字符设备是指存取时没有缓存的设备块设备的读写都有缓存来支持并且块设备必须能够随机存取(randomaccess)字符设备则没有这个要求典型的字符设备包括鼠标键盘串行口等块设备主要包括硬盘软盘设备CD-ROM等一个文件系统要安装进入操作系统必须在块设备上网络设备在Linux里做专门的处理Linux的网络系统主要是基于BSDunix的socket机制在系统和驱动程序之间定义有专门的数据结构(sk_buff)进行数据的传递系统里支持对发送数据和接收数据的缓存提供流量控制机制提供对多协议的支持1.2编写驱动程序的一些基本概念无论是什么操作系统的驱动程序都有一些通用的概念操作系统提供给驱动程序的支持也大致相同下面简单介绍一下网络设备驱动程序的一些基本要求1.2.1发送和接收这是一个网络设备最基本的功能一块网卡所做的无非就是收发工作所以驱动程序里要告诉系统你的发送函数在哪里系统在有数据要发送时就会调用你的发送程序还有驱动程序由于是直接操纵硬件的所以网络硬件有数据收到最先能得到这个数据的也就是驱动程序它负责把这些原始数据进行必要的处理然后送给系统这里操作系统必须要提供两个机制一个是找到驱动程序的发送函数一个是驱动程序把收到的数据送给系统是驱动程序把收到的数据送给系统1.2.2中断中断在现代计算机结构中有重要的地位操作系统必须提供驱动程序响应中断的能力一般是把一个中断处理程序注册到系统中去操作系统在硬件中断发生后调用驱动程序的处理程序Linux支持中断的共享即多个设备共享一个中断1.2.3时钟在实现驱动程序时很多地方会用到时钟如某些协议里的超时处理没有中断机制的硬件的轮询等操作系统应为驱动程序提供定时机制一般是在预定的时间过了以后回调注册的时钟函数在网络驱动程序中如果硬件没有中断功能定时器可以提供轮询(poll)方式对硬件进行存取或者是实现某些协议时需要的超时重传等二.Linux系统网络设备驱动程序2.1网络驱动程序的结构所有的Linux网络驱动程序遵循通用的接口设计时采用的是面向对象的方法一个设备就是一个对象(device结构)它内部有自己的数据和方法每一个设备的方法被调用时的第一个参数都是这个设备对象本身这样这个方法就可以存取自身的数据(类似面向对象程序设计时的this引用)一个网络设备最基本的方法有初始化发送和接收----------------------------------------|deliverpackets||receivepacketsqueue||(dev_queue_xmit())||them(netif_rx())|----------------