欢迎来到天天文库
浏览记录
ID:13055283
大小:270.00 KB
页数:45页
时间:2018-07-20
《网络设备驱动程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Linux源代码分析——网络091网络设备驱动程序-45-Linux源代码分析前言Linux内核由5个主要的子系统组成。这5个子系统分别是进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VirtualFileSystem,VFS)、网络接口(NET)和进程间通信(IPC)。进程调度控制着进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进
2、程调度算法选择新的进程。内存管理允许多个进程安全地共享主内存区域。Linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码、数据和堆栈的总量可以超过实际内存的大小,操作系统只将当前使用的程序块保留在内存中,其余的程序块则保留在磁盘上。必要时,操作系统负责在磁盘和内存之间交换程序块。内存管理从逻辑上可以分为硬件无关的部分和硬件相关的部分。硬件无关的部分提供了进程的映射和虚拟内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。虚拟文件系统隐藏了各种不同硬件的具体细节,为所有设备提供了统一的接口,
3、虚拟文件系统还支持多达数十种不同的文件系统,这也是Linux较有特色的部分。虚拟文件系统可分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2、fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。网络接口提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序两部分。网络协议部分负责实现每一种可能的网络传输协议,网络设备驱动程序负责与硬件设备进行通信,每一种可能的硬件设备都有相应的设备驱动程序。-45-Linux源代码分析目录第
4、1节人员的分配……………………………………………………………………4第2节概述……………………………………………………………………………5第3节网络设备接口初始化函数……………………………………………………7第4节设备的打开与关闭……………………………………………………………174.1设备的打开……………………………………………………………………174.2设备的关闭……………………………………………………………………22第5节接收数据分析…………………………………………………………………27第6节发送数
5、据分析…………………………………………………………………37-45-Linux源代码分析第1节人员的分配下面是关于整个代码分析人员的分配:网络设备接口初始化函数邓婷ne_probel()陈琳ne_probe()常若男init_module()设备的打开李红燕dev_open()和ne_open()设备的关闭王宇dev_close()和ne_close()接收数据分析于凡迪net_interrupt()ne_get_8390_hdr()张玉洁ne_probe1王林源ei_receive()发送数据分析马金
6、凤ei_start_xmit()黄凯旋ne_block_output()-45-Linux源代码分析第2节概述Linux网络设备驱动程序是Linux操作系统网络应用中的一个重要组成部分。分析其运行机理,对于设计Linux网络应用程序是很有帮助的。我们可以在网络驱动程序这一级做一些与应用相关联的特殊事情,例如在设计Linux防火墙和网络入侵检测系统时,可以在网络驱动程序的基础上拦截网络数据包,继而对其进行分析。由于Linux是开放源代码的,所以给我们提供了一个分析和改造网络驱动程序,并使其满足特殊应用的绝
7、好机会。本文对Linux内核中的网络驱动程序部分进行了详细讨论,并给出了实现Linux网络驱动程序的重要过程、一种实现模式和具体实例。体系结构Linux网络驱动程序的体系结构如图1所示。可以划分为四层,从上到下分别为协议接口层、网络设备接口层、提供实际功能的设备驱动功能层,以及网络设备和网络媒介层。在设计网络驱动程序时,最主要的工作就是完成设备驱动功能层,使其满足我们自己所需的功能。在Linux中,把所有网络设备都抽象为一个接口。这个接口提供了对所有网络设备的操作集合。由数据结构structdevice
8、来表示网络设备在内核中的运行情况,即网络设备接口。它既包括纯软件网络设备接口,如环路(Loopback),也可以包括硬件网络设备接口,如以太网卡。它由以dev_base为头指针的设备链表来集中管理所有网络设备。该设备链表中的每个元素代表一个网络设备接口。数据结构device中有很多供系统访问和协议层调用的设备方法,包括供设备初始化和往系统注册用的init函数、打开和关闭网络设备的open和stop函数、处理数据包发送的函数hard_star
此文档下载收益归作者所有