linux_设备驱动函数及应用层函数如何联系.docxVIP

linux_设备驱动函数及应用层函数如何联系.docx

  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文档。上传文档
查看更多
 HYPERLINK /mhjlyn/article/details/5453020 linux驱动程序与应用程序函数的联系  分类:  HYPERLINK /mhjlyn/article/category/671307 linux驱动 2010-04-05 22:49 1123人阅读  HYPERLINK /mhjlyn/article/details/5453020 \l comments 评论(0)  HYPERLINK javascript:void(0); \o 收藏 收藏  HYPERLINK /mhjlyn/article/details/5453020 \l report \o 举报 举报  HYPERLINK /tag/linux \t _blank linux HYPERLINK /tag/struct \t _blank struct HYPERLINK /tag/file \t _blank file HYPERLINK /tag/null \t _blank null HYPERLINK /tag/module \t _blank module HYPERLINK /tag/%e5%b7%a5%e4%bd%9c \t _blank 工作 Linux下我们在使用设备的时候,都会用到write这个函数,通过这个函数我们可以象使 ????? 用文件那样向设备传送数据。可是为什么用户使用write函数就可以把数据写到设备里面 ????? 去,这个过程到底是怎么实现的呢? ????? ????? 这个奥秘就在于设备驱动程序的write实现中,这里我结合一些源代码来解释如何使得一 ????? 个简简单单的write函数能够完成向设备里面写数据的复杂过程。 ?????? ????? 这里的源代码主要来自两个地方。第一是oreilly出版的《Linux device driver》中的 ????? 实例,第二是Linux Kernel 2.2.14核心源代码。我只列出了其中相关部分的内容,如果 ????? 读者有兴趣,也可以查阅其它源代码。不过我不是在讲解如何编写设备驱动程序,所以不 ????? 会对每一个细节都进行说明,再说有些地方我觉得自己还没有吃透。 ?????? ????? 由于《Linux device driver》一书中的例子对于我们还是复杂了一些,我将其中的一个 ????? 例程简化了一下。这个驱动程序支持这样一个设备:核心空间中的一个长度为10的数组 ????? kbuf[10]。我们可以通过用户程序open它,read它,write它,close它。这个设备的名 ????? 字我称为short_t。 ????? ????? 现在言???正传。 ????? 对于一个设备,它可以在/dev下面存在一个对应的逻辑设备节点,这个节点以文件的形式 ????? 存在,但它不是普通意义上的文件,它是设备文件,更确切的说,它是设备节点。这个节 ????? 点是通过mknod命令建立的,其中指定了主设备号和次设备号。主设备号表明了某一类设 ????? 备,一般对应着确定的驱动程序;次设备号一般是区分是标明不同属性,例如不同的使用 ????? 方法,不同的位置,不同的操作。这个设备号是从/proc/devices文件中获得的,所以一 ????? 般是先有驱动程序在内核中,才有设备节点在目录中。这个设备号(特指主设备号)的主 ????? 要作用,就是声明设备所使用的驱动程序。驱动程序和设备号是一一对应的,当你打开一 ????? 个设备文件时,操作系统就已经知道这个设备所对应的驱动程序是哪一个了。这个知道 ????? 的过程后面就讲。 ????? ????? 我们再说说驱动程序的基本结构吧。这里我只介绍动态模块型驱动程序(就是我们使用 ????? insmod加载到核心中并使用rmmod卸载的那种),因为我只熟悉这种结构。 ????? 模块化的驱动程序由两个函数是固定的:int init_module(void) ;void ????? cleanup_module(void)。前者在insmod的时候执行,后者在rmmod的时候执行。 ????? init_nodule在执行的时候,进行一些驱动程序初始化的工作,其中最主要的工作有三 ????? 件:注册设备;申请I/O端口地址范围;申请中断IRQ。这里和我们想知道的事情相关的只 ????? 有注册设备。 ????? ????? 下面是一个典型的init_module函数: ????? ????? int init_module(void){ int result = ch

文档评论(0)

189****6140 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档