linux网络设备驱动程序设计
(作者未知) 2010/12/29
摘要 Linux网络设备驱动程序是Linux网络应用的重要组成部分。本文详细分析了Linux内核中网络设备驱动程序的运行机理,并着重介绍了实现Linux网络驱动程序的关键过程,最后给出了一种实现模式和具体实例。
关键词 Linux操作系统;网络设备驱动程序;内核;模块
1 引言
Linux网络设备驱动程序是Linux操作系统网络应用中的一个重要的组成部分,分析其运行机理,对于设计Linux网络应用程序是很有帮助的。我们可以在网络驱动程序这一级做一些与应用相关联的特殊事情,例如,在设计Linux防火墙和网络入侵检测系统时可以在网络驱动程序的基础上拦截网络数据包,继而对其进行分析。由于Linux是开放源代码的,这给我们提供了一个绝好的机会来分析和改造网络驱动程序使其满足自己的特殊应用。本文就Linux内核中的网络驱动程序部分进行了详细的讨论,并给出了实现Linux网络驱动程序的重要过程及一种实现模式和具体实例。
2 运行机理
1) 体系结构
Linux网络驱动程序的体系结构如图1所示。可以划分为四层,从上到下分别为协议接口层,网络设备接口层,再就是提供实际功能的设备驱动功能层,以及网络设备和网络媒介层。我们在设计网络驱动程序时,最主要的工作就是完成设备驱动功能层,使其满足我们自己所需的功能。在Linux中对所有网络设备都抽象为一个接口,这个接口提供了对所有网络设备的操作集合。由数据结构 struct device来表示网络设备在内核中的运行情况,即网络设备接口,它既包括纯软件网络设备接口,如环路(Loopback),也可以包括硬件网络设备接口,如以太网卡。而由以dev_base为头指针的设备链表来集体管理所有网络设备,该设备链表中的每个元素代表一个网络设备接口。数据结构device中有很多供系访问和协议层调用的设备方法,包括供设备初始化和往系统注册用的init函数,打开和关闭网络设备的open和stop函数,处理数据包发送的函数hard_start_xmit,以及中断处理函数等。有关device数据结构(在内核中也就是net_device)的详细内容,请参看/linux/include/linux/netdevice.h。
......
附件下载:点击论文吧下载阅读全文
|
|
|