Chinaunix首页 | 论坛 | 博客
  • 博客访问: 381464
  • 博文数量: 69
  • 博客积分: 1486
  • 博客等级: 上尉
  • 技术积分: 630
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-22 18:38
个人简介

...

文章分类
文章存档

2024年(1)

2021年(2)

2020年(2)

2016年(9)

2015年(34)

2011年(14)

2010年(7)

分类: LINUX

2010-09-18 12:57:51



可能了解 linux 的人都知道在linux 系统中将设备分为三种基本类型:
字符设备 ————能够像字节流一样被访问的设备。比如字符终端( /dev/console) 和 串口(
           /dev/ttys0)

块设备 ————— 也是通过/dev/ 下的文件系统的节点来访问的,块设备上能够容纳文件系统,它和字
            符设备的区别在于内核内部管理数据的方式
网络接口———— 任何网络事务都经过一个接口形成,一个可以和其它主机交换数据的的设备,和其它
            的驱动程序一样有内核的子系统驱动,只是负责发送和接收数据包,也就是说它只是
            处理数据包。而且它不是面向流的的设备,因此要映射到文件系统的节点是很困难
            的,所以内核在和网络设备驱动程序通信时有着完全不同于其它设备驱动程序的方
            法。


网络驱动程序和其它的驱动程序(比如字符设备和块设备)存在着许多的不同之处。在上面提到过,在
linux系统下,最大的一个特点就是“一切皆是文件”,它是基于文件而设计的系统。在编写设备驱动
程序时,在/dev 目录下都有对应的文件,网络接口却很难映射到文件系统,网络驱动程序异步的接
收来自外部世界的数据包,然后发送给内核,由内核中的网络子系统处理,一直是以《linux 设备驱
动程序》第三版, 这本书为主来研究的,但是却发现这本书是以 linux内核 2.6.10, 为主编写驱
动程序的,且这本书中程序设计的重要决策是:不依赖于任何硬件,所以在讲述网络驱动程序时是以
snull 驱动程序为主讲述的,在模块加载到正在运行的内核中时(也就是设备注册),它需要请求系统
资源,然后对每个监测到的新接口,向全局的网络设备链表中插入一个新的数据结构。

每一个接口都由一个 struct net_device 结构描述,定义在 中,
《linux 设备驱动程序》第三版,这本书是以 linux内核 2.6.10 为主的,而我的系统的内核版
本是2.6.29.4(网上最新的内核版本是 2.6.35.4),在这两者中间的某个版本中,struct
net_device 结构的内容发生了一些变化,在网络接口上操作的方法 在 struct header_ops 
中定义,大家可以在这个结构体中发现这些方法,例如open,stop,而以轮询操作接口的方法则定义
在 struct napi_struct ,例如 poll方法,这些结构体都定义在 这
个头文件中。

今天先对 struct net_device 这个结构的变化记录一下,由于时间关系只能先写到这儿了,还有
许多要补充的,下次再接可能需要很长一段时间了。






阅读(1884) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-10-12 15:27:57

等着下篇!!

chinaunix网友2010-10-11 11:23:13

推荐一个..