网站大量收购独家精品文档,联系QQ:2885784924

设备驱动程序(二).ppt

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

设备驱动程序(二) 中断处理 中断的控制:打开和关闭 中断响应函数的注册 中断源和中断号 中断的处理:中断响应函数 使用tasklet 驱动程序的其它内容 阻塞型输入输出:睡眠和唤醒 内存使用:申请和分配 时间控制:延迟和定时 使用devfs 自动获得主设备号 驱动程序调式技术 安全性 实例:在spioc中使用中断和devfs 中断源:键盘中断 使用方式:数据的读(或写)由中断控制执行 tasklet的使用 使用devfs 块设备 块设备基本概念:块操作为基础,速度是主要考虑因素,类型复杂。 与字符设备相似之处:注册/撤消,设备号,block_device_operations。 块设备的基本操作 块设备的读写:request。 其它特性:如可移动性,分区等。 块设备的加载和卸载:文件系统。 面向块数据的操作,数据块的大小主要由经验值来确定,一般为2的整数幂次字节大小,如4kB, 16kB等。 块设备是用于存储大量数据的设备,主要是各种数据存储介质设备,如硬盘,软盘,光盘,以及U盘等。 出于效率的要求,块设备的数据传输几乎都使用较大的缓冲区,并使用请求队列。 块设备主要由文件系统使用,因此,块设备上几乎都要建立文件系统,要有磁盘分区。 应用几乎不直接使用块设备,而是通过文件系统使用块设备,如各种应用程序从磁盘的文件中读数据和向磁盘文件写入数据。 块设备的操作要比字符设备复杂许多,如磁盘电机的启动/停止操作,磁盘坏块的处理等。 块设备在在/dev目录下有相应的设备文件,有主设备号和次设备号。每个磁盘有一个主设备号,一个磁盘上得不同分区使用不同的次设备号。 速度和效率是块设备要考虑的主要因素,为提高效率,块设备驱动程序一般都实现一定程度的预读功能。 由于使用了缓冲区,磁盘中的数据需要经常与系统缓冲的数据保持同步。否则会导致文件系统崩溃。 网络设备 网络设备的特性 内核中的网络设备驱动模块 网络设备的打开和关闭 数据包的发送和接收 套接口(Socket)及其操作 作业 写出完整的spioc设备驱动程序 源程序 Makefile 将设备驱动程序编译成可加载内核模块 根据如下要求丰富驱动程序spioc 根据搏创的NET-ARM2410实验平台,使用键盘作为中断源,将spioc的驱动程序增加中断响应功能,使得每次有击键动作后驱动程序才响应应用程序的读或写请求。 使用devfs特性。 编译并调试你的驱动程序。 写一个应用程序测试你的驱动程序 作业提交内容 驱动程序源代码 测试程序源代码 编译命令或Makefile文件 参考资料 Linux设备驱动程序 初始化中断控制器和打开/关闭中断 中断控制器的初始化应该在操作系统启动阶段的中断初始化阶段完成了。操作系统的移植者已经帮我们完成了这个工作。然而,对某些微控制器,它的管脚可能是复用的,而缺省状态又不是作为中断输入引脚,这时如果打开中断,可能造成系统“死掉”,比如电平响应的中断,将不停地执行中断响应程序,导致系统其它代码没有机会运行。 static int spioc_open(...) { ... enable_irq(IRQ_EINT4); ... } static int spioc_close(...) { ... disable_irq(IRQ_EINT4); ... } 使用devfs 注意,是否能使用devfs与内核是否支持这个特性相关。内核在编译时应该设定CONFIG_DEVFS_FS符号。我们还可以使用动态获得的设备号。 #include linux/devfs_fs_kernel.h static devfs_handle_t devfs_spioc; static int __init spioc_init(...) { int result; ... result = devfs_register_chrdev(0, spioc_fops); if(result 0) return result; spioc_major = result; devfs_spioc = devfs_register(NULL, spioc, DEVFS_FL_DEFAULT, spioc_major, 0, S_IFCHR | S_IRUSR | S_IWUSR, spioc_fops, NULL); ... } static void __exit spioc_exit(void) { ... devfs_unregister(devfs_spioc); devfs_unregister_chrdev(spioc_major, spioc); ... } 块设备基本概念 块设备的注册和注销 #inclide linux/fs.h

文档评论(0)

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

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

1亿VIP精品文档

相关文档