网络课程设计之网卡linux驱动程序

上传人:ni****g 文档编号:504377257 上传时间:2023-01-31 格式:DOC 页数:18 大小:481.50KB
返回 下载 相关 举报
网络课程设计之网卡linux驱动程序_第1页
第1页 / 共18页
网络课程设计之网卡linux驱动程序_第2页
第2页 / 共18页
网络课程设计之网卡linux驱动程序_第3页
第3页 / 共18页
网络课程设计之网卡linux驱动程序_第4页
第4页 / 共18页
网络课程设计之网卡linux驱动程序_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《网络课程设计之网卡linux驱动程序》由会员分享,可在线阅读,更多相关《网络课程设计之网卡linux驱动程序(18页珍藏版)》请在金锄头文库上搜索。

1、网络课程设计-linux网卡驱动程序pcnet32目录1. 开发环境与开发语言22. Linux操作系统概述22.1. Linux内核简介22.2. Linux 设备驱动程序概述32.3. 编写网络驱动程序的一些基本概念43. Linux 网络栈43.1. 网络栈的 Internet 模型 53.2. Linux 高级网络栈架构63.2.1. 系统调用接口63.2.2. 协议无关接口63.2.3. 网络协议73.2.4. 设备驱动程序74. Pcnet32网卡驱动分析84.1. PCNET32驱动程序的pcnet32_private结构84.2. 网卡设备的初始化114.3. 网卡数据发送的基

2、本流程124.4. 数据报在链路层的发送124.5. 网卡数据接收过程简述155. Linux中驱动程序应用155.1. Pcnet32驱动程序编译与生成155.1.1. Makefile文件代码155.1.2. make编译生成驱动程序155.2. pcnet32驱动安装与初始化165.3. Pcnet32驱动程序发送数据176. 参考书目177. 小组成员及分工188. 卷尾语181. 开发环境与开发语言开发工具:GCC、CentOs linux操作系统(内核2.6.18)、vi、SourceInsight3.0调试:在linux系统中通过make命令(需要编写相应的makefile文件)

3、进行编译、连接、生成;开发语言:C2. Linux操作系统概述Linux操作系统是UNIX操作系统的一种克隆版本,最早是由芬兰大学的学生Linus Torvalds于1991年开始开发的,并于1991年的10月5日第一次正式向外公布,以后借助于互联网,经过一群遍布于全世界的Internet上的自愿参加的程序员的不懈努力,加上计算机公司的支持,Linux的影响和应用日益广泛,发展成为目前世界上用户最多的一种类UNIX操作系统。Linux 目前是计算机技术的一大热点之一,最近几年在我国得到迅猛发展,被广泛应用在嵌入式系统、安全产品、服务器和桌面应用等领域。2.1. Linux内核简介在最开始的时候

4、,Linux系统并没有现在所看到的Linux系统的体积这么庞大,各种免费开放的驱动代码也还没有来得及加入到系统中,所以,之初的Linux实际意义上就是Linux内核。首先来分析一下Linux操作系统的体系结构,可以从两个层次上来考虑操作系统,如下图 1所示:GNU/Linux 操作系统的基本体系结构图最上面是用户(或应用程序)空间。这是用户应用程序执行的地方。用户空间之下是内核空间,Linux 内核正是位于这里。GNU“GNUs Not Unix”的递归缩写 C Library (glibc)也在这里,它提供了连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换的机制。这点非常

5、重要,因为内核和用户空间的应用程序使用的是不同的保护地址空间,每个用户空间的进程都使用自己的虚拟地址空间,而内核则占用单独的地址空间。实际上,体系结构可能并不像图1所示的一样清晰。例如,处理系统调用(从用户空间切换到内核空间)的机制可能在各个体系结构上都不相同。Linux系统支持多个进程的并发运行,每个进程都请求系统资源,比如运算、内存、网络连接或其他一些资源等。内核负责处理所有这些请求,根据内核完成任务的不同,我们可以将内核划分成如下图2的功能模块:Linux 系统模块及功能图Linux是个人计算机和工作站上的Unix类操作系统,但是,它绝不仅仅是简化的Unix系统。相反,Linux是具有创

6、新意义的Unix类操作系统。它不仅继承了Unix的特征,而且在许多方面超过了Unix。作为Unix类操作系统,Linux内核具有下列基本特征:Linux内核的组织形式为整体式结构、Linux的进程调度方式简单而有效、Linux支持内核线程(或称守护进程)、Linux支持多种平台的虚拟内存管理、虚拟文件系统(VFS)、Linux的模块机制使得内核保持独立而又易于扩充,网络部分采用了面向对象的设计思想,使得Linux内核支持多种协议、多种网卡驱动程序变得更加的容易,为驱动的开发提供了便捷性,减少了工作量,提高了工作效率。2.2. Linux 设备驱动程序概述Linux设备驱动程序在Linux的内核

7、源代码中占有很大的比例,源代码的长度日益增加,主要是驱动程序的增加。Linux系统的设备分为字符设备(chardevice),块设备(blockdevice)和网络设备(networkdevice)三种。其中网络接口:任何网络事件都是通过一个网络接口形成的,一个网络接口就是一个能够和其他主机交换数据的设备。通常,接口都是硬件设备,但也可能是纯软件设备,比如回环(loopback)接口。网络接口由内核中的网络子系统驱动,负责数据包的接收和发送,但它不需要了解每项事务是如何映射到实际传送的数据包的。许多网络连接是面向流的,但网络设备却围绕数据包的传输和接收而设计。网络驱动程序不需要知道各个连接的相

8、关信息,它只要处理数据包即可。由于不是面向流的设备,因此将网络接口映射到文件系统中的节点(比如/dev/tty1)比较困难。Unix访问网络接口的方法仍然是给他们分配一个唯一的名字(比如eth0),但这个名字在文件系统中不存在对应的节点。内核和网络设备驱动程序间的通信,完全不同于内核和字符设备以及块驱动程序之间的通信,内核调用一套和数据传输相关的函数而不是read、write等。2.3. 编写网络驱动程序的一些基本概念无论是什么操作系统的驱动程序,都有一些通用的概念。操作系统提供给驱动程序的支持也大致相同。下面简单介绍一下网络设备驱动程序的一些基本的也是最重要的概念。发送和接收:这是一个网络设

9、备最基本的功能。一块网卡所做的工作无非就是数据的发送和接收,所以在驱动程序中必须要告诉系统数据的发送函数在哪里,系统在有数据要发送时就会调用发送程序。驱动程序由于是直接操纵硬件的,所以网络硬件有数据收到时,最先能得到这个数据的就是驱动程序,它负责把这些原始数据进行必要的处理,然后送给系统。这里,操作系统必须要提供两个机制,一个是找到驱动程序的发送函数,一个是驱动程序把收到的数据送给系统。中断:中断在现代计算机结构中占有重要的地位。操作系统必须提供驱动程序响应中断的能力。一般是把一个中断处理程序注册到系统中去,操作系统在硬件中断发生后调用驱动程序的处理程序。Linux支持中断的共享,即多个设备共

10、享一个中断。时钟:在实现驱动程序时,很多地方会用到时钟。如某些协议里的超时处理,没有中断机制的硬件的轮询等,操作系统应为驱动程序提供定时机制,一般是在预定的时间过了以后,系统自动回调注册的时钟函数。在网络驱动程序中,如果硬件没有中断功能,定时器可以提供轮询(poll)方式对硬件进行存取,或者是实现某些协议时需要的超时重传等。3. Linux 网络栈Linux 操作系统的最大特性之一就是它的网络栈。它最初源于 BSD(伯利克软件套件) 的网络栈,具有一套非常干净的接口,组织得非常好。其接口范围从协议无关层(例如通用 socket 层接口或设备层)到各种网络协议的具体层。3.1. 网络栈的 Int

11、ernet 模型如下:这个栈的最底部是链路层。链路层是指提供对物理层访问的设备驱动程序,这可以是各种介质,例如串口链路或以太网设备。链路层上面是网络层,它负责将报文定向到目标位置。再上一层称为传输层,负责端到端的通信(例如,在一台主机内部)。尽管网络层负责管理主机之间的通信,但是传输层需要负责管理主机内部各端之间的通信。最后一层是应用层,它通常是一个语义层,能够理解要传输的数据。例如,超文本传输协议(HTTP)就负责传输服务器和客户机之间对 Web 内容的请求与响应。实际来说,网络栈的各个层次有一些更为人所熟知的名字。在链路层上,可以找到以太网,这是最常用的一种高速介质。更早的链路层协议包括一

12、些串口协议,例如 SLIP(Serial Line Internet Protocol)、CSLIP(Compressed SLIP)和PPP(Point-to-Point Protocol)。最常见的网络层协议是 IP(Internet Protocol),但是网络层中还存在一些满足其他需求的协议,例如 ICMP(Internet Control Message Protocol)和ARP( Address Resolution Protocol)。在传输层上是 TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)。最

13、后,应用层中包含很多大家都非常熟悉的协议,包括标准的 Web 协议 HTTP 和电子邮件协议 SMTP。3.2. Linux 高级网络栈架构如下:顶部是系统调用接口。它简单地为用户空间的应用程序提供了一种访问内核网络子系统的方法。位于其下面的是一个协议无关层,它提供了一种通用方法来使用底层传输层协议。然后是实际协议,在 Linux 中包括内嵌的协议 TCP、UDP,当然还有 IP。然后是另外一个协议无关层,提供了与各个设备驱动程序通信的通用接口,最下面是设备驱动程序本身。3.2.1. 系统调用接口系统调用接口可以从两个角度进行描述。用户发起网络调用时,通过系统调用接口进入内核的过程应该是多路的

14、。最后调用 ./net/socket.c 中的 sys_socketcall 结束该过程,然后进一步将调用分路发送到指定目标。系统调用接口的另一种描述是使用普通文件操作作为网络 I/O。例如,典型的读写操作可以在网络 socket 上执行(socket 使用一个文件描述符表示,与一个普通文件一样)。因此,尽管有很多操作是网络专用的(使用 socket 调用创建一个 socket,使用 connect 调用连接一个收信方,等等),但是也有一些标准的文件操作可以应用于网络对象,就像操作普通文件一样。最后,系统调用接口提供了在用户空间应用程序和内核之间转移控制的方法。3.2.2. 协议无关接口soc

15、ket 层是一个协议无关接口,它提供了一组通用函数来支持各种不同协议。socket 层不但可以支持典型的 TCP 和 UDP 协议,而且还可以支持 IP、裸以太网和其他传输协议,例如 SCTP(Stream Control Transmission Protocol)。通过网络栈进行的通信都需要对 socket 进行操作。Linux 中的 socket 结构是 struct sock,这个结构是在 linux/include/net/sock.h 中定义的。这个巨大的结构中包含了特定 socket 所需要的所有状态信息,其中包括 socket 所使用的特定协议和在 socket 上可以执行的一些操作。网络子系统可以通过一个定义了自己功能的特殊结构来了解可用协议。每个协议都维护了一个名为 proto 的结构(可以在 linux/include/net/sock.h 中找到)。这个结构定义了可以在从 socket 层到传输层中执行特定的 socket 操作(例如,如何创建一个 socket,如何使用 socket 建立一个连接,如何关闭一个 socket 等等)。3.2.3. 网络协议网络协议这一节对一些可用的特定网络协议作出了定义(例如 TCP、UDP 等)。它们都是在 linux/net/ipv4/af_inet.c

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号