基于Linux系统内核的实习设备驱动程序毕业论文.doc
《基于Linux系统内核的实习设备驱动程序毕业论文.doc》由会员分享,可在线阅读,更多相关《基于Linux系统内核的实习设备驱动程序毕业论文.doc(44页珍藏版)》请在沃文网上搜索。
1、目 录摘 要1ABSTRACT 2前 言3第1章 概述41.1 Linux 的诞生和发展41.1.1 UNIX、MINIX、GNU 和POSIX41.1.2 Linux的开发过程41.2 Linux操作系统51.2.1 Linux内核进程管理61.2.2 Linux内存管理71.2.3 Linux内核的文件系统71.2.4 Linux内核的系统调用7第 2 章 Linux内核以及设备驱动92.1 Linux 内核简介92.2 Linux设备驱动程序92.2.1设备驱动程序的概念92.2.2 Linux驱动程序92.2.3 Linux驱动程序的特点102.2.4 设备号112.3 Linux备驱
2、动的分类122.4 驱动程序的基本结构132.5 驱动程序与外界的接口132.6 安全问题14第3章 Linux字符设备驱动程序的设计163.1设备驱动层次结构163.2 模块分析163.3系统分析173.3.1可安装模块机制173.3.2用户态和内核态173.3.3 I/O 端口173.3.4 内核中的并发193.3.5 内存操作193.3.6设备的访问机制20第 4 章 Linux 设备驱动的实现与调试214.1 字符设备驱动程序的基本数据结构214.1.1 file operations 结构214.1.2 inode结构224.2 设备驱动程序的主要实现234.2.1设备注册234.2
3、.2设备解除注册234.2.3设备打开234.2.4设备释放254.2.5设备读写254.2.6 lseek()操作的实现264.2.7内存获取274.3 驱动程序的编译、加载和卸载274.3.1设备驱动程序的编译274.3.2 设备驱动程序的加载294.3.3 设备驱动程序的卸载304.4 系统调试304.4.1 打印调试304.4.2 ioctl 调试32结束语34参考文献35致 谢36附 录37湖南工程学院毕业设计(论文)Linux 内核实习设备驱动程序摘 要:随着计算机技术和Internet的迅猛发展,操作系统从最初的Dos模式到如今的图形化模式。当前几大主流的操作系统包括Window
4、s、Unix、Linux;可以说Linux是在Unix的基础上发展起来的,而最为用户熟悉的就是微软的Windows操作系统,无论Windows的哪个版本用户群都比较多,但是Windows在服务器方面逊色于Linux,目前大型的应用系统都部署在Unix和Linux操作系统,因为二者的稳定性和安全性非常好。在Linux操作系统中,我认为最核心的就是它的内核部分,内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。Linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/usr/src/linux下找到,大部分应用软件也都是
5、遵循GPL而设计的,你都可以获取相应的源程序代码。而内核的处理程序包括很多的设备驱动模块,Linux 系统中设备的基本类型有字符设备、块设备和网络设备三种。相对来说, 字符设备对应的驱动程序最为简单, 但这类设备驱动程序适合于大多数硬件设备, 而且其中的一些方法同样适合块设备和网络设备, 因此从它入手来了解Linux 设备驱动程序的开发很有必要。关键词: Linux;内核;设备驱动程序Linux Kernel Training Device Driver ProgramABSTRACT :With the computer technology and the rapid developmen
6、t of Internet, the operating system from the original Dos mode to graphical mode now. Several of the current mainstream operating systems including Windows, Unix, Linux; can be said that Linux is a Unix-developed on the basis, and most users are familiar with Microsofts Windows operating system, reg
7、ardless of which version of Windows user groups than the more Windows in the server area, however inferior to Linux, the application of the current large-scale systems are deployed in Unix and Linux operating systems, because both the stability and security was very good. In the Linux operating syst
8、em, I think that is the core part of its core, the kernel is the core of an operating system. It is responsible for the process management system, memory, device drivers, files, and network system, determines system performance and stability. Linux as an important feature of the openness of its sour
9、ce code, all the kernel source code can be in / usr / src / linux to find that most applications are designed to follow the GPL, you can obtain the corresponding the source code. And core handling procedures, including a lot of device driver modules, Linux system, the basic types of equipment, chara
10、cter devices, block devices and network equipment in three. Relatively speaking, the character device driver that corresponds to the most simple, but this kind of device drivers for most hardware devices, and some of the method is also suitable for block devices and network equipment, so from its st
11、art to understand the Linux device driver development is necessary.Keywords: Linux; core; device driver前 言以 Linux 为代表的自由操作系统的很多优点之一,是它们的内部是开放给所有人看的。操作系统,曾经是一个隐藏的神秘的地方, 它的代码只局限于少数的程序员, 现在已准备好让任何具备必要技能的人来检查,理解以及修改。Linux 已经帮助使操作系统民主化。Linux 内核保留有大量的复杂的代码,但是,那些想要成为内核 hacker 的人需要一个入口点,这样他们可以进入代码中,不会被代码的复杂
12、性压倒。通常,设备驱动提供了这样的门路。驱动程序在 Linux 内核里扮演着特殊的角色。它们是截然不同的“黑盒子”,使硬件的特殊的一部分响应定义好的内部编程接口,它们完全隐藏了设备工作的细节。 用户的活动通过一套标准化的调用来进行,这些调用与特别的驱动是独立的;设备驱动的角色就是将这些调用映射到作用于实际硬件的和设备相关的操作上。这个编程接口是这样, 驱动可以与内核的其他部分分开建立,并在需要的时候在运行时“插入”。这种模块化使得 Linux 驱动易写,以致于目前有几百个驱动可用。在你学习编写驱动时, 你通常会发现大量有关 Linux 内核的东西。这也许会帮助你理解你的机器是如何工作的,以及为
13、什么事情不是如你所愿的快,或者不是如你所要的进行。我们会逐步介绍新概念,由非常简单的驱动开始并建立它们。硬件如果缺少了驱动程序的“驱动”,那么本来性能非常强大的硬件就无法根据软件发出的指令进行工作,硬件就是空有一身本领都无从发挥,毫无用武之地。这时候,电脑就正如古人所说的“万事俱备,只欠东风”,这“东风”的角色就落在了驱动程序身上。如此看来,驱动程序在电脑使用上还真起着举足轻重的作用。 第1章 概述1.1 Linux 的诞生和发展Linux操作系统是UNIX操作系统的一种克隆版本。它诞生于1991年的10月5日(这是第一次正式向外公布的时间)。以后借助互联网,在全世界各地计算机爱好者的共同努力
14、下,发展成为目前世界上用户最多的一种UNIX操作系统,并且使用人数还在迅猛增加。Linux操作系统的诞生、发展和成长过程依赖于五个重要支柱:UNIX操作系统、MINIX操作系统、GUI计划、POSIX标准和互联网。1.1.1 UNIX、MINIX、GNU 和POSIXUNIX操作系统是美国贝尔实验室的Ken Thompson 和Dennis Ritchie于1969年夏在DEC PDP-7小型计算机上开发的一个分时操作系统。后经Dennis Ritchie于1972提用C语言进行改写,使得UNIX系统在大专院校得到了推广。 MINIX操作系统是由Andrew S. Tanenbaum在1987
15、年编制的,主要用于学生学习操作系统原理。目前主要有两个版本在使用:1.5版和2.0版。最初该操作系统在大学使用是免费的,但其他用户需要付费使用。现在它已经是完全免费的,可以从许多FTP上下载。GNU计划和自由软件基金会(the Free Software Foundation FSF)Richard M. Stallman 于1984年创办的,旨在开发一个免费的、类似UNIX的操作系统GNU系统。到20世纪90年代初,GNU项目已经开发出许多高质量的免费软件,其中包括有名的Emacs编辑系统、BASH shell 程序、GCC 系列编译器程序、GDB 调试程序等。这些软件为Linux操作系统的
16、开发创造一个合适的环境,是Linux能够诞生的基础之一。所以目前许多人都将Linux操作系统称为“GNU/Linux”为操作系统。POSIX(Portable Operating System Interface for Computing Systems)是由IEEE和ISO/IEC开发的一簇标准。到20世纪90年代初,POSIX标准的制定正处于在最后投票敲定的时候。此时Linux刚刚起步。这个标准为Linux提供了极为重要的信息,使得Linux能够在标准的指导下进行开发,做到与绝大多数UNIX系统兼。1.1.2 Linux的开发过程实际上,并没有一个专门的、独立的组织负责开发Linux系统
17、,它是由世界各地的自愿者通过Internet共同开发的,Linux团体大部分通过邮递列表和USENET的消息进行通信,这样任何人都有机会辅助开发和调试Linux的内核、连接新的软件、编写文档和帮助新用户。Linux最强大的生命力正是在于这种公开的开发过程。UNIX是一个简单且非常优秀的模型,在Linux创建之前,UNIX已经有20年的发展历史。Linux从UNIX的各个流派中不断吸取成功经验,抛弃UNIX的缺点,使Linux成为了UNIX系列中的佼佼者。开发商业的UNIX是一个很大的工程,并且为了保证下次操作系统的升级性能,通常有数以百计的程序员、测试员和系统管理员参与,所以商业UNIX那种开
18、发过程使得它的源代码非常复杂。但是,Linux就完全不同,每个人都可以通过Internet 自由获取Linux内核源程序,每个人都可以对源程序加以修改。在使用中如果发现了缺陷或还有什么新的创意,都可以加以改进,用户也可以直接在系统中增加功能,而不用操作系统供应商解释自己的想法。这在源程序不公开的操作系统中是很难办到的。Linux开发团体大部分通过邮递列表USENET的消息组通信。许多协定已经跳过开发过程,如果是一个Linux爱好者想将自己的代码添加到“正式”内核中,只需给Linus Torvalds 发一个E-mail,他就会进行测试,如果测试通过,代码就会被包括进内。进行嵌入式Linux 系
19、统的开发,很大的工作量是为各种设备编写驱动程序。总的来说,实现一个嵌入式Linux 设备驱动的大致流程如下:(1) 查看原理图,理解设备的工作原理。(2) 定义主设备号。(3) 在驱动程序中实现驱动的初始化。如果驱动程序采用模块的方式,则要实现模块初始化。(4) 设计所要实现的文件操作,定义file_operations 结构。(5) 实现中断服务(中断并不是每个设备驱动所必须的)。(6) 编译该驱动程序到内核中,或者用insmod 命令加载。(7) 测试该设备。1.2 Linux操作系统用户应用程序操作系统服务 操作系统内核 硬件系统一个完整可用的操作系统由4部分组成:硬件、操作系统内核、操
20、作系统服务和用户应用程序。如图11所示,用户应用程序是指那些字处理程序、互联网浏览器或用户自行编制的各种应用程序;操作系统服务程序是指向用户提供的服务,被看作是操作系统部分功能的程序。在Linux操作系统上,这些程序包括X窗口系统、shell 图1.1操作系统组成部分命令解释系统以及内核编程接口等系统程。 Linux 内核主要由5个模块构成,它们分别是:进程调度模块、内存管理模块、文件系统模块、进程和通信模块各网络接口模块。进程调度模块用来负责控制进程对CPU资源的使用。所采取的调度策略使各进程能够公平地访问CPU,同时保证内核能及时地执行硬件操作。内存管理模块用于确保所用进程能够安全地共享机
21、器主内存区,同时,内存管理模块还支持虚拟内存管理方式,使Linux的进程可以使用比实际内存空间更多的内存容量。并可以利用文件系统把暂时不用的内存数据块交换到外部存储设备上去,当需要时再交换回来。文件系统模块用于支持对外部设备的驱动和存储。虚拟文件系统模块通过向所有的外部存储设备提供一个通用的文件接口,隐藏了各种硬件设备的不同细节。从而提供并支持与其他操作系统兼容的多种文件系统格式。进程间通信模块子系统用于支持多种进程间的信息交换方式。网络接口模块提供对多种网络通信标准的访问并支持许多网络硬件。内存管理文件系统进程调度网络接口进程间通信虚拟文件系统 图1.2 Linux内核系统模块结构及相互依赖
22、关系1.2.1 Linux内核进程管理内核负责创建和终止进程,并且处理它们和外部世界的联系(输入和输出)。对整个系统功能来讲,不同进程之间的通信(通过信号,管道,进程间通信原语)是基本的,这也是由内核来处理的。另外,调度器,可能是整个操作系统中最关键的例程,是进程管理中的一部分。更广义的说,内核的进程管理活动实现了在一个CPU上多个进程的抽象概念。1.2.2 Linux内存管理计算机内存是主要资源,而使用内存的策略是影响整个系统性能的关键。内核为每个进程在有限可利用的资源上建立了虚拟地址空间。内核不同部分通过一组函数与内存管理子系统交互,这些包括从简单的malloc/free到更稀奇古怪的功能
23、。1.2.3 Linux内核的文件系统Linux从一开始就把外部设备全都当成“文件”处理。Linux常用的文件系统(1) cramfs文件系统它的主要优点是将文件数据以压缩形式存储,在需要运行时进行解压缩。因为是压缩形式存储文件系统,所以不能直接在Flash上运行。虽然这们可以节省Flash空间,但运行文件系统时需要复制大量数据进行RAM中,消耗了RAM空间。(2) ROMFS文件系统ROMFS(Rom File System)是只读文件系统,系统资源占用很小。早期,它是被用在启动盘(光盘或软盘)中,提供一个比普通文件系统(EXT3)更节省空间的文件系统。ROMFS的文件组织方式非常简单,主要
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Linux 系统 内核 实习 设备 驱动程序 毕业论文