嵌入式操作系统驱动程序编写基础.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式操作系统驱动程序编写基础

主要内容设备驱动硬件基础内核模块中断服务例程驱动程序组成设备驱动的作用驱动是应用软件和硬件的桥梁它使得应用软件只需要调用系统软件的应用编程接口(API)就可让硬件去完成要求的工作。驱动程序沟通着硬件和应用软件,而驱动工程师沟通着硬件工程师和软件工程师。无操作系统的程序架构在这样的系统中,虽然不存在操作系统,但设备驱动程序一般存在。一般情况下,驱动程序都会定义为一个软件模块,包含.h文件和.C文件,前者定义该设备驱动程序的数据结构并声明外部函数,后者进行驱动的具体实现。无操作系统时驱动和应用程序的关系在没有操作系统时,设备的接口被直接提交给用用软件。应用软件直接调用、访问设备驱动的接口设备驱动的接口函数与硬件的功能直接吻合,没有任何附加功能。两种不合理设计驱动中存在部分应用,或应用中包含驱动都会导致程序移植性和复用性变差 有操作系统的设备驱动有操作系统的设备驱动的变化无操作系统时设备驱动的硬件工作仍然必不可少,没有它们驱动不可能与硬件打交道需要把驱动融入内核。为了实现这种融合,需要在驱动程序中设计面向系统内核的接口。这样的接口有操作系统规定,对一类设备而言结构一致,独立于具体的设备。设备驱动程序成为硬件和内核的桥梁---要写一部分内核接口,多出来两层结构,有利有弊,屏蔽了底层的差异Linux的设备驱动Linux设备字符设备块设备网络设备无操作系统的LED驱动Linux的led驱动Linux设备驱动的重点、难点Linux设备驱动设计的硬件基础计算机系统的硬件主要由CPU、存储器和外设组成。驱动针对的对象是存储器和外设(包括CPU内部集成的存储器和外设)。注意不是针对CPU核Linux设备驱动设计的硬件基础1、处理器Linux设备驱动设计的硬件基础2、存储器Linux设备驱动设计的硬件基础3、总线与接口串口电器特性、时序特性(掌握)、信号分类I2C—有时序,无协议SPICAN—有协议,有时序USBPCI网口Linux设备驱动设计的硬件基础Linux设备驱动设计的硬件基础原理图分析:确定设备使用的相关资源时序分析:芯片手册芯片结构、整体性能、管件个数、电气性能寄存器编程外设控制器的编程流程Linux设备驱动设计的硬件基础仪器仪表使用万用表示波器等等内核模块概述Linux的内核模块机制给内核提供了很强的灵活性,用户通过加载内核模块可以方便的给内核添加功能;同样用户也可以将内核不需要用的功能卸载。驱动程序可以静态编译进内核,但由于外设众多,内核不可能包含所有设备的驱动。用户通过内核模块机制可以把需要用到的驱动程序动态地加入内核。内核模块的概述内核模块在内核空间运行,内核模块编程是在内核空间编程。内核模块可以引用内核空间导出的全局符号,因此内核模块编程与内核的版本密切相关。内核模块只能调用和使用内核提供的函数,不能使用相关的应用程序库函数。模块编程举例-一个简单的hello 模块为何不用printf函数语句???上面例子是一个完整的内核模块,该模块被载入内核时会向系统的日志中写入Hello,world;当模块被卸载时,该模块会向系统日志写入一条Goodbye,cruel world的信息。内核模块的基本结构1一个典型的内核模块包含以下几部分:头文件声明:头文件module.h和init.h是必须的。 module.h包含了加载模块需要的函数和符号的定义; init.h包含了模块初始化和清理函数的定义;如果模块在加载时允许用户传递参数,模块还应该包含moduleparam.h头文件。内核模块的基本结构2模块许可声明:MODULE_LICENSE宏声明此模块的许可证,否则在模块被加载时,内核会显示警告。初始化、清理函数声明:在2.6内核模块必须调用宏module_init和module_exit去注册初始化与清理函数,需要注意的是初始化清理函数必须在宏module_init和module_exit使用前定义满足以上基本结构,模块就可以正常工作了,在驱动程序中除包含模块的三个基本部分以外,还会包含文件操作及其它内容。可以在模块中包含的其他描述性定义有 MODULE_AUTHOR ( 声明谁编写了模块 ), MODULE_DESCRIPION( 一个人可读的关于模块做什么的声明 ), 等其它MODULE_宏;各种 MODULE_ 声明可以出现在你的源码文件的任何函数之外的地方. 但是, 一个内核代码中相对近期的惯例是把这些声明放在文件末尾. 模块的初始化与关闭模块初始化函数注册模块提供的相关功能. 这些功能, 我们指的是新功能, 可以由应用程序存取的或者一整个驱动或者一个新软件抽象. 实际的初始化函数定义常常如: static int __init initialization_function(void) { /* Initialization

文档评论(0)

peili2018 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档