基于ARM的LINUX网卡驱动程序的开发与设计.doc
《基于ARM的LINUX网卡驱动程序的开发与设计.doc》由会员分享,可在线阅读,更多相关《基于ARM的LINUX网卡驱动程序的开发与设计.doc(44页珍藏版)》请在沃文网上搜索。
1、摘 要Linux技术是当前计算机技术中最大的一个热点,在我国以及全世界得到了迅猛的发展,被广泛的应用于嵌入式系统、服务器、网络系统、安全等领域。从而使得掌握在Linux环境下的开发技术,成为了计算机行业中引人注目的焦点。以Linux为代表的自由操作系统的优点之一,是它们的内部是开放的。Linux内核保留有大量的复杂代码,通常设备驱动提供了一个门路,使硬件特殊的一部分响应定义好的内部编程接口,它们完全隐藏了设备工作的细节。用户的活动通过一套标准化来进行,设备驱动就是将这些调用映射到作用于实际硬件和设备相关的操作上。论文首先介绍了Linux下设备驱动程序设计的基本知识,其中包括对Linux的发展历
2、程、内核、特性的概述,Linux设备的分类及编写驱动程序的一些基本概念等,以及模块的加载和卸载。其次介绍了ARM驱动程序开发的硬件环境和软件环境。阐述了该驱动程序在开发时的需求分析。第三对Linux环境下网卡驱动程序的设计与实现作了理论上的探讨,重点从网卡驱动模块的加载、网络设备的初始化、设备打开与关闭、数据的发送与接收、信息统计、网卡驱动模块的卸载等方面按步骤的进行了详细的讨论。通过组建在Linux操作系统下的TCP/IP网络,来分配IP地址以及区分网络号和主机号的子网掩码,通过配置DHCP服务器,实现动态地为主机配置IP参数,解决手工配置存在的问题。最后介绍了在驱动程序开发设计过程中所遇到
3、的问题和困难以及是如何去克服这些困难的,并提出了今后的努力方向。关键词:Linux; 模块; 网络; 驱动; 寄存器 I AbstractLinux technology is a hotspot among computer technology nowadays, and it developes at high speed not only in our country but also in the whole world, and it has applied widely in embedded system, server, network system, security ar
4、ea and so on. So it makes that grasping the development technology under the Linux environment is more and more noticeable in computer industry. One of the many advantages of free operating systems, as typified by Linux, is that their internals are open for all to view. The Linux kernel remains larg
5、e and complex body of code. User activities are performed by means of a set of standardized calls that are independent of the specific driver; mapping those calls to device-specific operations that act on real hardware is then the role of the device driver.This thesis firstly introduces the fundamen
6、tal knowledge about design of linux device driver, which generally includes the development procedure, kernel, and characteristic of linux. Meanwhile, the categorization of linux device, elemental terminology of exploiting network interface card driver, and loading and unloading the driver module ar
7、e also mentioned in this thesis. Secondly, this thesis also presents both the hardware and software environment of the driver development, and the requirement specification of driver development are elaborated here. Thirdly, combined with the driver of ARM, this thesis discusses the design and reali
8、zation of the network interface card driver in theory, especially makes more detailed discussions step by step, such as loading the driver module, initialization of the device, starting and stopping of the device, transmission and receiving of data, information statistics, unloading the driver modul
9、e, etc. Allocating IP addresses and subnet masks differentiating network and host, through construction of TCP/IP network in Linux. Configuring hosts IP arguments dynamically to well solve the problem of manual configuration, through configuration of DHCP server. Finally, this thesis lists all the p
10、roblems and difficulties met during the whole process of designing driver, and how to conquer them and advanced direction of future study are also recounted.Keywords: linux; module; network; driver; registerIII 目 录摘 要IAbstractII第1章 绪论11.1 研究背景11.2 国内外研究现状、目的及意义11.3 本文主要工作2第2章 Linux下设备驱动程序设计的基本知识42.1
11、 Linux概述42.1.1 Linux内核简介42.1.2 Linux的特性62.2 Linux设备驱动程序概述72.2.1 Linux设备驱动程序分类82.2.2 编写网络驱动程序的一些基本概念9第3章 Linux网卡驱动程序设计的理论探讨103.1 Linux下网卡驱动程序设计的数据结构和基本方法103.1.1 网卡驱动程序设计要用到的数据结构103.1.2 网卡驱动程序的基本方法133.1.3 套接字缓冲区介绍143.2 驱动模块的加载和卸载17第4章 系统分析194.1 S3C2410 ARM 开发板介绍194.2 需求分析以及MII接口194.3 寄存器的访问方式21第5章 网卡驱
12、动的具体实现225.1 驱动程序的设计225.2 网卡驱动实现245.2.1 模块的加载及设备初始化245.2.2 设备成员及函数的初始化265.2.3 设备注册、打开、关闭305.2.4 数据的接受和发送325.2.5 参数设置及数据统计345.2.6 网卡数据信息统计36第6章 结论37参 考 文 献38致 谢3939沈阳工业大学本科生毕业设计第1章 绪论1.1 研究背景Linux目前是计算机技术的一大热点,最近几年在我国得到迅猛发展,被广泛应用在嵌入式系统、服务器和桌面应用等领域。Linux操作系统是UNIX操作系统的一种克隆版本,是目前世界上用户最多的一种类UNIX操作系统。作为一个开
13、放源代码的操作系统,它为人们深入了解操作系统的工作原理提供了极好的机会。Linux作为一个开放源代码的操作系统,具有稳定、高效、易裁减和硬件持广泛等特点,被广泛应用于嵌入式系统开发领域。在Linux系统下设计驱动程序简洁、操作方便、功能强大,但是支持的函数却较少,只有一些来源于内核Kernel中的函数。因此,在嵌入式Linux系统开发应用时,需要开发自己专用的网络接口卡,这时不仅要在硬件上保证与Linux的兼容性,而且在软件上需要开发全新的驱动程序。文章在分析了Linux 网络设备驱动程序的结构组成和工作原理之后,重点探讨了Linux环境下网卡驱动程序的开发技术,详细讨论了实用的网卡驱动的开发
14、流程及具体实现细节。1.2 国内外研究现状、目的及意义Linux是由芬兰的赫尔辛基大学 (Helsinki)学生Linus Torvalds把Minix 系统向x86移植的结果。当时 Linus 手边有个 Minix 系统(UNIX 的一个分支),他对这个操作系统相当有兴趣,由于当时他正好有一台个人计算机,他想把这个系统移植到该计算机(x86 架构)上来使用。由于受益于Stallman提倡的开放源代码(Open Source)思想,他得以接触到UNIX操作系统的一些源代码,并仔细研读了UNIX 的核心,然后去除较为繁复的核心程序,将它改写成能够适用于一般个人计算机的一种操作系统,即Linux系
15、统的雏形。1992年1月,大概只有100人开始使用Linux,但他们为Linux的发展壮大作出了巨大贡献。他们对一些不合理的代码进行了改进,修补了代码错误并上传补丁。Linux的腾飞最关键的因素是获得了自由软件基金(FSF)的支持,他们制定了一个GNU计划,该计划的目标就是要编写一个完全免费的 UNIX版本 包括内核及所有相关的组件,可以让用户自由共享并且改写软件,而Linux正好符合他们的意愿。他们将Linux与其现有的GNU应用软件很好地结合起来,使Linux拥有了图形用户界面。1994年3月, Linux 1.0正式版发布,它的出现无异于网络的“自由宣言”。从此Linux用户迅速增加,L
16、inux的核心开发小组也日渐强大。在Linux所包含的数千个文件中,有一个名为Credits的文件,里面列出了100多名对Linux有过重要贡献的黑客,包括他们的名字、地址以及所做的工作。目前国内外所使用的Linux系统一般是指由Linux核心、外壳(SHELL)及外围应用软件构成的发行版本。Linux发行版本是不同的公司或组织将Linux核心、外壳、安装工具、应用软件有效捆绑起来的结果,所以种类繁多,各有各的优缺点。但就其总体而言,这些发行版本具有对尽可能多的网卡的支持。就象UNIX,Linux支持的网卡主要是以太网卡。如3COM、ACCTON、ATT、IBM、CRYSTAL、DLINK等众
17、多品牌的以太网卡只要安装配置正确,都可以得到你所期望的效果。Linux核心已经实现了OSI参考模型的网络层及更上层部分。网络层的实现依靠于数据链路层的有效工作。网卡的驱动程序就是数据链路层与物理层的接口。通过调用驱动程序的发送例程向物理端口发送数据,调用驱动程序的接收例程从物理端口接收数据。Linux系统的设备主要分为字符设备(char device),块设备(block device)和网络设备(network device)三种。Linux设备驱动程序在Linux的内核源代码中占有很大的比例,源代码长度的日益增加,主要就是驱动程序的增加。Linux 网络设备驱动程序是Linux 操作系统内
18、核的一个重要组成部分,对Linux网络设备驱动程序的原理与设计技术的掌握,有助于理解网络链路层的工作原理,它对从事基于Linux平台的网络产品开发具有十分重要的意义。1.3 本文主要工作首先,论文将重点研究device数据结构,这是了解网卡设备的最好入口点。Linux网络驱动程序的体系结构分为四层,从上到下分别为协议接口层、网络设备接口层、设备驱动功能层、网络设备以及网络媒介层。设计网络驱动程序时,最主要的工作就是完成设备驱动功能层,使其满足自己所需要的功能。在Linux中,把所有的网络设备都抽象为一个接口,这个接口提供了对所有网络设备的操作集合,由struct device数据结构来表示,即
19、网络设备接口,所有的网络设备接口构成一个链表,该链表由dev_base为头指针,链表中的元素代表一个网络设备接口。其次,论文从整体上对驱动程序进行了分块设计,主要由模块加载、网络设备初始化、注册、设备打开与关闭、数据的发送与接收等模块构成。采用这种构成模式易于功能的分割以及程序的调试,在完成初期工作后,方便设备驱动的功能扩展,为后期开发减少工作。最后,每个网络设备都声明了很多能操作它的函数,应该熟悉较多的能够对网络接口进行操作的函数,论文深入的研究了Linux下模块设计的必要性,并通过编写这些操作函数来实现网卡驱动模块的加载以及网络设备的初始化、设备打开与关闭、数据的发送与接收、信息统计、网卡
20、驱动模块的卸载等功能,章节中对重要函数都进行了详细的说明,这些实现了网卡驱动的基本要求。第2章 Linux下设备驱动程序设计的基本知识在进行Linux设备驱动程序的具体讨论之前,有必要对Linux本身以及网卡设备等方面做一个大致的了解和认识。在本章节中,从介绍Linux的诞生开始,由浅入深的进入到Linux内核,最后过渡到对网络设备驱动的介绍。2.1 Linux概述Linux操作系统是UNIX操作系统的一种克隆版本,最早是由芬兰大学的学生Linus Torvalds于1991年开始开发的,并于1991年的10月5日第一次正式向外公布,以后借助于互联网,经过一群遍布于全世界的Internet上的
21、自愿参加的程序员的不懈努力,加上计算机公司的支持,Linux的影响和应用日益广泛,发展成为目前世界上用户最多的一种类UNIX操作系统。Linux 目前是计算机技术的一大热点之一,最近几年在我国得到迅猛发展,被广泛应用在嵌入式系统、安全产品、服务器和桌面应用等领域。经过十多年的发展,到2003年,Linux 2.6内核被发布,这在Linux发展史中具有极其重要的作用。今天,在全世界的Internet上的自愿参加的程序员们和计算机公司的共同努力下,Linux继续飞速的向前发展。2.1.1 Linux内核简介在最开始的时候,Linux系统并没有现在所看到的Linux系统的体积这么庞大,各种免费开放的
22、驱动代码也还没有来得及加入到系统中,所以,之初的Linux实际意义上就是Linux内核。首先来分析一下Linux操作系统的体系结构,可以从两个层次上来考虑操作系统,如下图 2-1所示:图2-1 GNU/Linux操作系统的基本体系结构图最上面是用户(或应用程序)空间。这是用户应用程序执行的地方。用户空间之下是内核空间,Linux 内核正是位于这里。GNU C Library (glibc)也在这里,它提供了连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换的机制。这点非常重要,因为内核和用户空间的应用程序使用的是不同的保护地址空间,每个用户空间的进程都使用自己的虚拟地址空间,
23、而内核则占用单独的地址空间。实际上,体系结构可能并不像图1所示的一样清晰。例如,处理系统调用(从用户空间切换到内核空间)的机制可能在各个体系结构上都不相同。Linux系统支持多个进程的并发运行,每个进程都请求系统资源,比如运算、内存、网络连接或其他一些资源等。内核负责处理所有这些请求,根据内核完成任务的不同,可以将内核划分成如下图2-2的功能模块:图2-2 Linux系统模块及功能图2.1.2 Linux的特性Linux是个人计算机和工作站上的Unix类操作系统,但是,它绝不仅仅是简化的Unix系统。相反,Linux是具有创新意义的Unix类操作系统。它不仅继承了Unix的特征,而且在许多方面
24、超过了Unix。作为Unix类操作系统,Linux内核具有下列基本特征:Linux内核的组织形式为整体式结构。整个Linux内核由很多过程组成,每个过程可以独立编译,然后用连接程序将其连接在一起成为一个完整的目标程序。从信息隐藏的观点看,它没有任何程度的隐藏,每个过程都对其它过程都是可见的。这种结构的最大特点是内部结构简单,子系统间易于访问,因此内核的工作效率较高。另外,基于过程的结构也有助于不同的人参与不同过程的开发,从这个角度来说,Linux内核又是开放式的结构,它允许任何人对其进行修正、改进和完善。Linux的进程调度方式简单而有效。可以说Linux在追求效率和调度方式上也是优势明显。对
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ARM LINUX 网卡 驱动程序 开发 设计