第3部分嵌入式软件系统3讲解.ppt

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
哈尔滨工业大学 电子与信息技术研究院 6.1 Linux设备驱动程序概述 6.2 设备驱动程序的结构 6.3 Linux设备驱动程序的使用方法 6.1 Linux设备驱动程序概述 Linux设备驱动程序的作用: (1) 设备驱动程序屏蔽具体硬件设备的细节; 操作系统机器硬件之间的接口 (2) 驱动是展现硬件所具有的功能,只是个中间环节; 应用程序如何操作硬件? (3) 并发问题:驱动程序有时会被多个进程同时使用,需要调用一些内核的函数使用互斥量和锁等机制。 6.1 概述 6.1.1 设备驱动原理 所有操作系统下设备驱动程序的共同目标是屏蔽具体物理设备的操作细节,实现设备无关性。 原理:在嵌入式操作系统中,设备驱动程序通常是内核的重要部分,运行在内核模式,即设备驱动程序为内核提供了一个I/O接口,用户使用这个接口实现对设备的操作。 6.1.1 设备驱动原理 驱动程序与外界的接口:3个部分 6.1 概述 6.1.2 模块化编程 原因:由于历史原因及出于效率方面的考虑,Linux是一个宏内核。一旦需要在内核的基础上增加一项功能时,就必须重新编译整个内核,这无疑给内核功能的扩充带来了不便。 于是,Linux发展了可安装内核模块的机制——“module”。 6.1.2 模块化编程 从代码特征上来看,模块就是可完成一项独立功能的一组函数的集合; 从使用特征上来看,它在需要时可以随时被安装,而在不需要时又可以随时被卸载。 准确地说,模块就是一个已编译但未连接的可执行文件。利用这种机制,我们可以根据需要,在不重新编译内核的情况下,将编译好的模块动态地插入运行中的内核,或者将内核中已经存在的某个模块移走。 6.1.2 模块化编程 为了增强内核的灵活性和为了方便,设备驱动程度应被设计为可动态安装的内核模块。一个典型的Linux设备驱动程序应包含以下几部分代码: 驱动程序模块的注册与注销函数; 设备的打开、关闭、读、写及需要的其他操作函数; 设备的中断服务程序。 6.1 概述 6.1.3 设备类型 6.1.3 设备类型 6.1.4 设备文件 Linux中硬件设备被抽象出来,所有设备都可看成文件(置于/dev目录)UNIX法則: “Everything is file” 可以使用和操作文件相同的、标准的系统调用接口来完成打开、关闭、读写和I/O控制操作 对用户来说,设备文件与普通文件并无区别。 6.1 概述 6.1.5 设备号 6.1.6 Linux设备驱动的特点 综上所述,Linux中的设备驱动程序有如下特点。 (1)内核代码:设备驱动程序是内核的一部分,如果驱动程序出错,则可能导致系统崩溃。 (2)内核接口:设备驱动程序必须为内核或者其子系统提供一个标准接口。比如,一个终端驱动程序必须为内核提供一个文件I/O 接口;一个SCSI设备驱动程序应该为SCSI子系统提供一个SCSI设备接口,同时SCSI子系统也必须为内核提供文件的I/O 接口及缓冲区。 (3)内核机制和服务:设备驱动程序使用一些标准的内核服务,如内存分配等。 6.1.6 Linux设备驱动的特点 (4)可装载:大多数的Linux 操作系统设备驱动程序都可以在需要时装载进内核,在不需要时从内核中卸载。 (5)可设置:Linux 操作系统设备驱动程序可以集成为内核的一部分,并可以根据需要把其中的某一部分集成到内核中,这只需要在系统编译时进行相应的设置即可。 (6)动态性:在系统启动且各个设备驱动程序初始化后,驱动程序将维护其控制的设备。如果该设备驱动程序控制的设备不存在也不影响系统的运行,那么此时的设备驱动程序只是多占用了一点系统内存罢了。 6.1 Linux设备驱动程序概述 6.2 设备驱动程序的结构 6.3 Linux设备驱动程序的使用方法 设备驱动程序源代码的基本结构 6.1 Linux设备驱动程序概述 6.2 设备驱动程序的结构 6.3 Linux设备驱动程序的使用方法 机制与策略 机制(mechanism) 设备驱动程序所具备的能力 例如:串行设备驱动程序具有设置波特率的能力。 策略(policy) 这些能力如何被使用 例如:根据需要将串口波特率设置成9.6kbps。 设备驱动程序的使用 (1) 驱动程序模块的动态链接和静态链接 (2) 创建设备文件 (3) 使用设备 常用的与模块相关的命令: lsmod 列出当前系统中加载的模块 rmmod 是用于将当前模块卸载 insmod 是用于加载当前模块 mknod是用于创建模块节点 如何向内核注册 驱动程序有一个入口函数,会将驱动程序的file_operations结构,连同其主设备号向内核进行注册。 注册后,用户程序操作设备文件时,Linux系统

文档评论(0)

美洲行 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档