Linux系统开发课程简介内核提供的驱动开发接口.ppt

Linux系统开发课程简介内核提供的驱动开发接口.ppt

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * I/0端口 释放I/O端口 端口检测 I/0端口 操作I/O端口 在驱动成功请求I/0端口后,就可以读写这些端口。大部分硬件会将8位、16位和32位端口区分开,无法像访问内存那样混淆使用。驱动程序必须调 用不同的函数来访问不同大小的端口 8位宽 16位宽 I/0端口 32位宽 没有64位的I/0端口操作函数,即便在64体系中,端口地址空间使用一个32的数据通路 I/0端口 字符串操作 除了一次传递一个数据的I/O操作,某些处理器实现了一次传递一序列数据(单位可以是字节、字和双字)的特殊指令。 有些体系没有进行字符串的I/O指令,就要通过使用单个机器指令实现,通过C语言循环,但是比字符串I/O处理慢。 I/0端口 注意:使用字串函数时,它们直接将字节流从端口读取或写入。当端口和主机系统有不同的字节序时,会导致不可预期的结果,使用inw读取端口应在必要时自行转换字节序,以匹配主机字节序。 I/0端口 暂停式I/0操作函数 由于处理器的速率可能与外设的并不匹配,当处理器过快地传送数据到或自总线时,这时可能就会引起问题。 解决方法: 如果在I/O指令后面紧跟着另一个相似的I/O指令,就必须插入一个小的延时。 LINUX提供了暂停式I/O操作函数。它们的名子以 _p 结尾; 它们称为 inb_p, outb_p, 等等. ARM使用内部总线,就没有必要额外暂停,所以定义相同 I/0端口 使用I/O内存 用来和设备通讯的主要机制是通过内存映射的寄存器和设备内存。 处理器通过总线访问I/O内存,以实现对设备的访问,同样,读写这个区域是有边际效应。 根据计算机体系和总线不同,I/O内存可分为可以或不可以通过页表来存取。若通过页表存取,内核必须先重新编排物理地址,使其对驱动可见,就这意味着在进行任何I/O操作之前,你必须调用ioremap,如查不需要页表,I/O内存区域就类似I/0端口,可以直接使用适当的I/O函数读写它们。 由于边际效应,不管是否需要ioremap,都不鼓励直接使用I/O内存指针,而应该使用专门的I/O内存操作函数 I/0端口 I/O内存分配和映射 I/O内存区使用前必须先分配,linux/ioport.h I/0端口 访问I/O内存不只是简单解引用指针,必须通过ioremap函数设置一个映射 #include asm/io.h I/0端口 访问I/O内存 I/0端口 I/0端口 中断处理 中断 需要中断的理由: 外设的处理速度一般慢于CPU CPU不能一直等待外部事件 所以设备必须有一种方法通知CPU它的工作进度,这就是中断。 中断实现 在linux驱动程序中,为设备实现一个中断包含两个步骤 1、向内核注册中断 2、实现中断处理函数 中断处理 中断注册 int request_irq(unsigned int irq, void (*handler)(int, void *, struct pt_regs *), unsigned long flags, const char *devname; void *dev_id) 成功返回0, 失败返回一个错误码 irq : 申请的中断号 handler : 中断处理函数 flags: 与中断管理有关的各种选项,如快速中断,共享中断等 devname: 设备名,哪个设备发生中断 dev_id: 共享中断时使用 中断处理 中断标志flags IRQF_DISABLE 表示一个快速中断处理程序,没有这个标志为慢速中断处理程序。 快中断处理程序: 保证中断处理的原子性(不被打断),就是说当此中断在运行中,不会被其他类型的中断打断; 慢速中断则不保证。 IRQF_SHARED 表时中断可以在设备间共享,即不同的设备挂到同一个中断信号线上; LINUX对共享的支持主要是为了PCI

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档