首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux基础>经验技巧>正文

Linux操作系统网络驱动程序编写详解

http://www.oklinux.cn  2006-01-01  来源: 赛迪网技术社区  huanghe   会员收藏  游客收藏  【 】 

经历一个从无到有的过程, 深感技术交流的重要。Linux作为挑战微软垄断的强有力武器,日益受到大家的喜 爱。真希望她能在中国迅速成长。把程序文档贴出来,希望和大家探讨Linux技术 和应用,促进Linux在中国的普及。

一.Linux系统设备驱动程序概述

1.1 Linux设备驱动程序分类

Linux设备驱动程序在Linux的内核源代码中占有很大的比例,源代码的长度日 益增加,主要是驱动程序的增加。在Linux内核的不断升级过程中,驱动程序的结构 还是相对稳定。在2.0.xx到2.2.xx的变动里,驱动程序的编写做了一些改变,但是 从2.0.xx的驱动到2.2.xx的移植只需做少量的工作。

Linux系统的设备分为字符设备(char device),块设备(block device)和网络 设备(network 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()传递给上层处理。

共7页: 上一页 1 [2] [3] [4] [5] [6] [7] 下一页

上一篇:Linux系统中用ALSA驱动声卡流程详解   下一篇:教你如何提高Linux Java性能的分析


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·教你如何提高Linux Java性能的分析
·Linux系统中用ALSA驱动声卡流程详解
·Oracle 8i 在Redhat 7.2下安装手册
·细说GNU/Linux系统的文件及文件系统
·Linux操作系统登录帐户的管理和审计
·修复AIX Xwindow 的几点经历之谈
·安装完Linux操作系统后应该做的事情
·Vmware安装Linux配置Xwindow的问题
·探索Linux 操作系统内存模型和管理
·Mac和Linux很少遭到病毒攻击为何故
·Linux系统出现乱码问题的终极解决方法
·Linux系统内存使用的体会及命令解释
·Linux操作系统的中文化现状基本概况
·如何在Linux/FreeBSD下玩模拟器游戏
·Linux VS Win2000两系统可管理性比较
·深入理解Linux操作系统下的守护进程
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·成功升级到红旗Linux6.0 SP1经验分享
·Ubuntu游戏之平行球的安装
·Ubuntu与Windows双系统使用时的注意事
·Ubuntu下安装矩阵实验室Matlab
·Ubuntu 7.10下wine-0.9.57的中文配置
·Linux初学指南 Ubuntu下rpm包的安装方
·Fedora 8正式版下载地址分享
·惠普笔记本6510B中安装Fedora 8成功例
·Fedora 8 下JDK 6.0 配置技巧
·Ubuntu 3D桌面特效展示!超绚目(图)
·解析Linux系统下GRUB故障修复
·Linux终端模式下查看电脑的硬件配置情
  阅读排行
·Linux爱好者入门教程
·Linux操作系统下的串口通信学习笔记
·从硬盘安装RHEL 5(Red Hat Enterprise
·Vim实用技术第一部分:实用技巧
·Vmware Workstation 5.0.0使用说明
·VM中Linux虚拟机下安装VMware Tools
·新手看招:调试工具GDB基本知识全接触
·Gentoo版Linux操作系统的前世今生
·Linux进程间通信:管道及有名管道
·如何在Linux/FreeBSD下玩模拟器游戏
·探索Linux 操作系统内存模型和管理
·Linux系统中用ALSA驱动声卡流程详解
·并不绝对安全:Linux下安全十二法则
·Linux创建文件及挂载系统流程详解
·将Linux代码移植到Windows的简单方法
网摘收藏: