资料介绍
Linux作为挑战微软垄断的强有力武器,日益受到大家的喜爱。真希望她能在中国迅速成长。把程序文档贴出来,希望和大家探讨Linux威廉希尔官方网站
和应用,促进Linux在中国的普及。
Linux操作系统网络驱动程序编写
一.Linux系统设备驱动程序概述
1.1 Linux设备驱动程序分类
1.2 编写驱动程序的一些基本概念
二.Linux系统网络设备驱动程序
2.1 网络驱动程序的结构
2.2 网络驱动程序的基本方法
2.3 网络驱动程序中用到的数据结构
2.4 常用的系统支持
三。编写Linux网络驱动程序中可能遇到的问题
3.1 中断共享
3.2 硬件发送忙时的处理
3.3 流量控制(flow control)
3.4 调试
四。进一步的阅读
五。杂项
一.Linux系统设备驱动程序概述
1.1 Linux设备驱动程序分类
Linux设备驱动程序在Linux的内核源代码中占有很大的比例,源代码的长度日益增加,主要是驱动程序的增加。在Linux内核的不断升级过程中,驱动程序的结构还是相对稳定 。在2.0.xx到2.2.xx的变动里,驱动程序的编写做了一些改变,但是从2.0.xx的驱动到2.2.xx的移植只需做少量的工作。
Linux系统的设备分为字符设备(char device),块设备(block device)和网络设备(net work device)三种。字符设备是指存取时没有缓存的设备。块设备的读写都有缓存来支 持,并且块设备必须能够随机存取(random access),字符设备则没有这个要求。典型的 字符设备包括鼠标,键盘,串行口等。块设备主要包括硬盘软盘设备,CD-ROM等。一个 文件系统要安装进入操作系统必须在块设备上。 网络设备在Linux里做专门的处理。Linux的网络系统主要是基于BSD unix的socket机制。在系统和驱动程序之间定义有专门的数据结构(sk_buff)进行数据的传递。系统里支持对发送数据和接收数据的缓存,提供流量控制机制,提供对多协议的支持。
1.2 编写驱动程序的一些基本概念
无论是什么操作系统的驱动程序,都有一些通用的概念。操作系统提供给驱动程序的支持也大致相同。下面简单介绍一下网络设备驱动程序的一些基本要求。
1.2.1 发送和接收
这是一个网络设备最基本的功能。一块网卡所做的无非就是收发工作。所以驱动程序里要告诉系统你的发送函数在哪里,系统在有数据要发送时就会调用你的发 送程序。还有驱动程序由于是直接操纵硬件的,所以网络硬件有数据收到最先能得到这个数据的也就 是驱动程序,它负责把这些原始数据进行必要的处理然后送给系统。这里,操作系统必 须要提供两个机制,一个是找到驱动程序的发送函数,一个是驱动程序把收到的数据送 给系统。
1.2.2 中断
中断在现代计算机结构中有重要的地位。操作系统必须提供驱动程序响应中断的能力。 一般是把一个中断处理程序注册到系统中去。操作系统在硬件中断发生后 调用驱动程序 的处理程序。Linux支持中断的共享,即多个设备共享一个中断。
1.2.3 时钟
在实现驱动程序时,很多地方会用到时钟。如某些协议里的超时处理,没有中断机制的 硬件的轮询等。操作系统应为驱动程序提供定时机制。一般是在预定的时 间过了以后回 调注册的时钟函数。在网络驱动程序中,如果硬件没有中断功能,定时器可以提供轮询 (poll)方式对硬件进行存取。或者是实现某些协议时需要的超时重传等。
二.Linux系统网络设备驱动程序
2.1 网络驱动程序的结构
所有的Linux网络驱动程序遵循通用的接口。设计时采用的是面向对象的方法。一个设备 就是一个对象(device 结构),它内部有自己的数据和方法。每一个设备的方法被调用时 的第一个参数都是这个设备对象本身。这样这个方法就可以存取自身的数据(类似面向对 象程序设计时的this引用)。 一个网络设备最基本的方法有初始化、发送和接收。
------------------- ---------------------
|deliver packets | |receive packets queue|
|(dev_queue_xmit()) | |them(netif_rx()) |
------------------- ---------------------
| | /
/ | |
-------------------------------------------------------
| methods and variables(initialize,open,close,hard_xmit,|
| interrupt handler,config,resources,status.。.) |
-------------------------------------------------------
| | /
/ | |
----------------- ----------------------
|send to hardware | |receivce from hardware|
----------------- ----------------------
| | /
/ | |
-----------------------------------------------------
| hardware media |
-----------------------------------------------------
初始化程序完成硬件的初始化、device中变量的初始化和系统资源的申请。发送程序是 在驱动程序的上层协议层有数据要发送时自动调用的。一般驱动程序中不对发送数据进 行缓存,而是直接使用硬件的发送功能把数据发送出去。接收数据一般是通过硬件中断 来通知的。在中断处理程序里,把硬件帧信息填入一个skbuff结构中,然后调用netif_ rx()传递给上层处理。
2.2 网络驱动程序的基本方法
网络设备做为一个对象,提供一些方法供系统访问。正是这些有统一接口的方法,掩蔽 了硬件的具体细节,让系统对各种网络设备的访问都采用统一的形式,做到硬件无关性 。
下面解释最基本的方法。
2.2.1 初始化(initialize)
驱动程序必须有一个初始化方法。在把驱动程序载入系统的时候会调用这个初始化程序 。它做以下几方面的工作。检测设备。在初始化程序里你可以根据硬件的特征检查硬件 是否存在,然后决定是否启动这个驱动程序。配置和初始化硬件。在初始化程序里你可 以完成对硬件资源的配置,比如即插即用的硬件就可以在这个时候进行配置(Linux内核 对PnP功能没有很好的支持,可以在驱动程序里完成这个功能)。配置或协商好硬件占用 的资源以后,就可以向系统申请这些资源。有些资源是可以和别的设备共享的,如中断 。有些是不能共享的,如IO、DMA。接下来你要初始化device结构中的变量。最后,你可 以让硬件正式开始工作。
Linux操作系统网络驱动程序编写
一.Linux系统设备驱动程序概述
1.1 Linux设备驱动程序分类
1.2 编写驱动程序的一些基本概念
二.Linux系统网络设备驱动程序
2.1 网络驱动程序的结构
2.2 网络驱动程序的基本方法
2.3 网络驱动程序中用到的数据结构
2.4 常用的系统支持
三。编写Linux网络驱动程序中可能遇到的问题
3.1 中断共享
3.2 硬件发送忙时的处理
3.3 流量控制(flow control)
3.4 调试
四。进一步的阅读
五。杂项
一.Linux系统设备驱动程序概述
1.1 Linux设备驱动程序分类
Linux设备驱动程序在Linux的内核源代码中占有很大的比例,源代码的长度日益增加,主要是驱动程序的增加。在Linux内核的不断升级过程中,驱动程序的结构还是相对稳定 。在2.0.xx到2.2.xx的变动里,驱动程序的编写做了一些改变,但是从2.0.xx的驱动到2.2.xx的移植只需做少量的工作。
Linux系统的设备分为字符设备(char device),块设备(block device)和网络设备(net work device)三种。字符设备是指存取时没有缓存的设备。块设备的读写都有缓存来支 持,并且块设备必须能够随机存取(random access),字符设备则没有这个要求。典型的 字符设备包括鼠标,键盘,串行口等。块设备主要包括硬盘软盘设备,CD-ROM等。一个 文件系统要安装进入操作系统必须在块设备上。 网络设备在Linux里做专门的处理。Linux的网络系统主要是基于BSD unix的socket机制。在系统和驱动程序之间定义有专门的数据结构(sk_buff)进行数据的传递。系统里支持对发送数据和接收数据的缓存,提供流量控制机制,提供对多协议的支持。
1.2 编写驱动程序的一些基本概念
无论是什么操作系统的驱动程序,都有一些通用的概念。操作系统提供给驱动程序的支持也大致相同。下面简单介绍一下网络设备驱动程序的一些基本要求。
1.2.1 发送和接收
这是一个网络设备最基本的功能。一块网卡所做的无非就是收发工作。所以驱动程序里要告诉系统你的发送函数在哪里,系统在有数据要发送时就会调用你的发 送程序。还有驱动程序由于是直接操纵硬件的,所以网络硬件有数据收到最先能得到这个数据的也就 是驱动程序,它负责把这些原始数据进行必要的处理然后送给系统。这里,操作系统必 须要提供两个机制,一个是找到驱动程序的发送函数,一个是驱动程序把收到的数据送 给系统。
1.2.2 中断
中断在现代计算机结构中有重要的地位。操作系统必须提供驱动程序响应中断的能力。 一般是把一个中断处理程序注册到系统中去。操作系统在硬件中断发生后 调用驱动程序 的处理程序。Linux支持中断的共享,即多个设备共享一个中断。
1.2.3 时钟
在实现驱动程序时,很多地方会用到时钟。如某些协议里的超时处理,没有中断机制的 硬件的轮询等。操作系统应为驱动程序提供定时机制。一般是在预定的时 间过了以后回 调注册的时钟函数。在网络驱动程序中,如果硬件没有中断功能,定时器可以提供轮询 (poll)方式对硬件进行存取。或者是实现某些协议时需要的超时重传等。
二.Linux系统网络设备驱动程序
2.1 网络驱动程序的结构
所有的Linux网络驱动程序遵循通用的接口。设计时采用的是面向对象的方法。一个设备 就是一个对象(device 结构),它内部有自己的数据和方法。每一个设备的方法被调用时 的第一个参数都是这个设备对象本身。这样这个方法就可以存取自身的数据(类似面向对 象程序设计时的this引用)。 一个网络设备最基本的方法有初始化、发送和接收。
------------------- ---------------------
|deliver packets | |receive packets queue|
|(dev_queue_xmit()) | |them(netif_rx()) |
------------------- ---------------------
| | /
/ | |
-------------------------------------------------------
| methods and variables(initialize,open,close,hard_xmit,|
| interrupt handler,config,resources,status.。.) |
-------------------------------------------------------
| | /
/ | |
----------------- ----------------------
|send to hardware | |receivce from hardware|
----------------- ----------------------
| | /
/ | |
-----------------------------------------------------
| hardware media |
-----------------------------------------------------
初始化程序完成硬件的初始化、device中变量的初始化和系统资源的申请。发送程序是 在驱动程序的上层协议层有数据要发送时自动调用的。一般驱动程序中不对发送数据进 行缓存,而是直接使用硬件的发送功能把数据发送出去。接收数据一般是通过硬件中断 来通知的。在中断处理程序里,把硬件帧信息填入一个skbuff结构中,然后调用netif_ rx()传递给上层处理。
2.2 网络驱动程序的基本方法
网络设备做为一个对象,提供一些方法供系统访问。正是这些有统一接口的方法,掩蔽 了硬件的具体细节,让系统对各种网络设备的访问都采用统一的形式,做到硬件无关性 。
下面解释最基本的方法。
2.2.1 初始化(initialize)
驱动程序必须有一个初始化方法。在把驱动程序载入系统的时候会调用这个初始化程序 。它做以下几方面的工作。检测设备。在初始化程序里你可以根据硬件的特征检查硬件 是否存在,然后决定是否启动这个驱动程序。配置和初始化硬件。在初始化程序里你可 以完成对硬件资源的配置,比如即插即用的硬件就可以在这个时候进行配置(Linux内核 对PnP功能没有很好的支持,可以在驱动程序里完成这个功能)。配置或协商好硬件占用 的资源以后,就可以向系统申请这些资源。有些资源是可以和别的设备共享的,如中断 。有些是不能共享的,如IO、DMA。接下来你要初始化device结构中的变量。最后,你可 以让硬件正式开始工作。
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- 嵌入式Linux设备驱动程序开发基础知识总结免费下载 13次下载
- Linux驱动程序缺陷检测研究 9次下载
- 第9章 Linux驱动程序设计 3次下载
- Linux设备驱动程序的编写 108次下载
- AFDX端系统的Linux驱动程序设计 40次下载
- 基于BF533的Linux网络驱动程序
- 基于SEP4020的嵌入式Linux音频驱动程序设计
- 基于嵌入式Linux的步进电机驱动程序设计
- 嵌入式Linux网络驱动程序的开发及实现原理
- 基于Linux操作系统的设备驱动程序开发
- 基于USB设备的Linux网络驱动程序开发
- Linux系统PCI设备驱动程序开发
- 嵌入式Linux下的液晶显示屏驱动程序的开发
- Linux中基于EP7312的LCD驱动程序设计
- 实时系统VxWorks下设备驱动程序的编写详解
- 怎么编写Framebuffer驱动程序 402次阅读
- 了解和使用无操作系统和平台驱动程序 1066次阅读
- 如何写一个Linux设备驱动程序 4314次阅读
- 米尔科技LINUX设备驱动程序教程 1965次阅读
- 嵌入式Linux内核的驱动程序开发是怎样的 1415次阅读
- 浅谈电脑驱动程序的工作原理 详解电脑驱动程序意义 2.9w次阅读
- 基于嵌入式Linux内核的系统设备驱动程序开发设计 1113次阅读
- 关于Linux操作系统网络驱动程序编写知识详解 2416次阅读
- 基于Linux2.6.30开发DS18B20的驱动程序的类型和文件操作接口函数详解 1377次阅读
- 可动态安装的Linux设备驱动程序 957次阅读
- 如何用嵌入式Linux系统编写键盘驱动 1312次阅读
- 嵌入式驱动的构造分析总结 4503次阅读
- 树莓派上MAX7219的字符驱动程序编写 6901次阅读
- Xilinx设备的驱动程序 7967次阅读
- PCI驱动程序开发实例 6701次阅读
下载排行
本周
- 1TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 2开关电源基础知识
- 5.73 MB | 6次下载 | 免费
- 3100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 4嵌入式linux-聊天程序设计
- 0.60 MB | 3次下载 | 免费
- 5基于FPGA的光纤通信系统的设计与实现
- 0.61 MB | 2次下载 | 免费
- 6基于FPGA的C8051F单片机开发板设计
- 0.70 MB | 2次下载 | 免费
- 751单片机窗帘控制器仿真程序
- 1.93 MB | 2次下载 | 免费
- 8基于51单片机的RGB调色灯程序仿真
- 0.86 MB | 2次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33564次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21548次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6653次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537796次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191185次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183278次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多