欢迎来到天天文库
浏览记录
ID:61499074
大小:82.50 KB
页数:13页
时间:2021-02-07
《Linux网络设备驱动程序介绍.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、Linux网络设备驱动程序介绍,(安徽建筑工业学院电子与信息工程学院通信工程2班)摘要:Linux网络设备驱动程序是Linux网络应用的重要组成部分。本文详细分析了Linux内核中网络设备驱动程序的运行机理,并着重介绍了实现Linux网络驱动程序的关键过程,最后给出了一种实现模式和具体实例。关键词:Linux操作系统;网络设备驱动程序;内核;模块Linuxnetworkdevicedriverdescription,(07CommunicationEngineering2Course,,ElectronicandInformationEngineering,AnhuiUniversityo
2、fArchitecture,,China)Abstract:LinuxNetworkLinuxnetworkdevicedriverisanimportantpartoftheapplication.ThispaperanalyzestheLinuxkernelnetworkdevicedriverrunningmechanism,withanemphasisonLinuxnetworkdriverstoachievethekeyprocesses,andfinallyanimplementationmodelandgivenspecificexamples.Keywords:Linuxo
3、peratingsystem;networkdevicedriver;kernel;module0引言1驱动程序设计原理1.1体系结构1.2初始化1.3数据包的发送与接收2实现模式3LINUX系统下的设备驱动程序3.1入口点结构3.2入口点位置3.3LINUX系统下的具体实现4应用实例4.1模块加载和卸载4.2网络接口初始化4.3网络接口设备的打开和关闭4.4数据包的接收和发送5结束语0引言Linux网络设备驱动程序是Linux网络应用中一个重要的组成部分,分析其运行机理,对于设计Linux网络应用程序很有帮助。因为有时需要我们在网络驱动程序这一层次做应用开发,例如,设计Linux防火墙和
4、网络入侵检测系统时,可以在网络驱动程序的基础上拦截网络数据包,继而对其进行分析。本文将就Linux内核中的网络设备驱动程序部分进行讨论,并介绍实现Linux网络设备驱动程序的方法。1驱动程序设计原理1.1体系结构Linux网络驱动程序的体系结构可以划分为四层(参见图1),从上到下分别为网络协议接口层、网络设备接口层、提供实际功能的设备驱动功能层,以及网络设备和网络媒介层。我们在设计网络驱动程序时,最主要的工作就是完成设备驱动功能层,使其满足我们所需的功能。在Linux中所有网络设备都抽象为一个接口,这个接口提供了对所有网络设备的操作集合。由数据结构structdevice来表示网络设备在内
5、核中的运行情况,即网络设备接口。它既包括纯软件网络设备接口,如环路(Loopback),也包括硬件网络设备接口,如以太网卡。而由以dev_base为头指针的设备链表来集体管理所有网络设备,该设备链表中的每个元素代表一个网络设备接口。数据结构device中有很多供系统访问和协议层调用的设备方法,包括供设备初始化和系统注册用的init函数,打开和关闭网络设备的open和stop函数,处理数据包发送的hard_start_xmit函数,以及中断处理函数等。有关device数据结构(在内核中就是net_device)的详细内容,可以参看/linux/include/linux/netdevice.
6、h。1.2初始化网络设备的初始化主要由device数据结构中的init函数指针所指向的初始化函数来完成,当内核启动或加载网络驱动模块的时候,就会调用这个初始化函数。在初始化函数中通过检测物理设备的硬件特征来侦测网络物理设备是否存在,然后再对设备进行资源配置,接下来构造设备的device数据结构,并用检测到的数据对device中的变量初始化,最后向Linux内核注册该设备并申请内存空间。1.3数据包的发送与接收数据包的发送和接收是实现Linux网络驱动程序中两个最关键的过程,对这两个过程处理的好坏将直接影响到驱动程序的整体运行质量。在网络设备驱动加载时,通过device域中的init函数指针
7、调用网络设备的初始化函数对设备进行初始化,如果操作成功再通过device域中的open函数指针调用网络设备的打开函数打开设备,并通过device域中建立硬件包头函数指针hard_header来建立硬件包头信息。最后通过协议接口层函数dev_queue_xmit(参见/linux/net/core/dev.c)来调用device域中的hard_start_xmit函数指针完成数据包的发送。该函数把存放在套接字缓冲区中的数据
此文档下载收益归作者所有