如何编写Linu设备驱动程序2.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
有很多朋友关心驱动,但更菜的菜鸟居多:)总结了一下 把 I/O 驱动改成个更简单的 LED 驱动吧 做的工作非常简单,就是让连在 GPC0-GPC2 上的 LED 顺序闪 10 下目的就是演示一下驱动过程。 — 先补充一下基础知识 懂的朋友就不用看了嵌入式驱动的概念 设备驱动程序是操作系统内核和机器硬件之间的接口,设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可 以像操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它主要完成的功能有:对设备进行初始化和释放;把数据从内核传送到硬件和从硬件读 取数据;读取应用程序传送给设备文件的数据、回送应用程序请求的数据以及检测和处理设备出现的错误。 Linux 将设备分为最基本的两大类:一类是字符设备,另一类是块设备。字符设备和块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬 件 I/O 一般就紧接着发生了。字符设备以单个字节为单位进行顺序读写操作,通常不使用 缓冲技术;块设备则是以固定大小的数据块进行存储和读写的,如硬盘、 软盘等,并利用一块系统内存作为缓冲区。为提高效率,系统对于块设备的读写提供了缓存机制,由于涉及缓冲区管理、调度和同步等问题,实现起来比字符设备复 杂得多。LCD 是以字符设备方式加以访问和管理的,Linux 把显示驱动看做字符设备,把要显示的数据一字节一字节地送往 LCD 驱动器。 Linux 的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev 目录下, 称为设备文件。应用程序可以打开、关闭和读写这些设 备文件,完成对设备的操作,就像操作普通的数据文件一样。为了管理这些设备,系统为设 备编了号,每个设备号又分为主设备号和次设备号。主设备号用来区分不 同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux 有约定俗成的编号,如硬盘的主设备号是 3。Linux 为所有的设备文件都 提供了统一的操作函数接口,方法是使用数据结构 struct file_operations。这个数据结构中包括许多操作函数的指针,如 open()、close()、read() 和 write()等,但由于外设 的种类较多,操作方式各不相同。Struct file_operations 结构体中的成员为一系列的接口函数,如用于读/写的 read/write 函数和用于控制的 ioctl 等。打开一个文件就是 调用这个文件file_operations 中的open 操作。不同类型的文件有不同的file_operations 成员函数,如普通的磁盘数据文件, 接口函数完成磁盘数据块读写操作;而对于各种设备文件,则最终调用各自驱动程序中的 I/O 函数进行具体设备的操作。这样,应用程序根本不必考虑操作的是设 备还是普通文件, 可一律当作文件处理, 具有非常清晰统一的 I/O 接口。所以 file_operations 是文件层次的 I/O 接口。二 开始写了 采用了在代码里加注释的方法,同时把几个文件上传了一下,喜欢的朋友可以下载当作模板。 每个文件以==隔开 一共需要写写 3 个文件,1 个驱动头文件,1 个驱动文件,一个驱动测试用程序文件分别是 test.h,test.c 和 ledtest.c 简单说说驱动都做什么,怎么做 系统加载驱动 应用程序里打开设备(文件) 应用程序对设备操作 应用程序关闭设备(文件) 系统关闭设备 应用程序如何对设备操作? 记得 C 语言里怎么写文件吗?这里很相象的。对于一般的字符设备(还有块设备,网络设备等等)主要有 3 个函数(还有很多,可以看)llseek read: write: ioctl: 这里只用 ioctl:控制函数,当然也可以使用读写函数操作 IO 口,但 ioctl:似乎更适合。 具体实现可以看 ledtest.c 文件了。 test.c 中主要有几个函数 分别负责初始化和清除,打开和关闭。以及 ioctl 对串口寄存器写一些数据。 初始化和清除,打开和关闭函数里都各有一句主要句,已经分别作了注释。只要记住就好了。 对寄存器操作就不单独说了,需要看 44B0 数据手册了。好了 剩下的看代码吧。 ============================== ==========test.h================== ============================== /****************************************Copyright (c)************************************************** ** FREE ** **----------

文档评论(0)

tianya189 + 关注
官方认证
文档贡献者

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

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档