基于linux2.6内核字符设备驱动程序设计.docVIP

基于linux2.6内核字符设备驱动程序设计.doc

  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文档。上传文档
查看更多
基于linux2.6内核字符设备驱动程序设计

基于linux2.6内核字符设备驱动程序设计   [摘 要]设备驱动程序在嵌入式Linux中起着重大的作用,它提供了操作系统和硬件设备之间的交互的接口,能够让软件开发人员不用知道底层硬件的特性,就能方便地进行上层软件的开发。本文基于嵌入式Linux2.6内核,对字符驱动程序的开发做出详细的讲解,给出了linux2.6内核下字符设备程序开发的步骤,并写出了字符设备驱动开发的一般模块。   [关键词]嵌入式 Linux2.6 内核 字符设备驱动   [中图分类号]TP339 [文献标识码]A [文章编号]1007-9416(2010)07-0010-02      1 引言   嵌入式Linux支持多种体系结构,拥有丰富的软件资源,支持多任务,有着完善的网络通讯、图形、文件管理机制,更加重要的是它能通过灵活剪裁来定制Linux内核,使它能够满足各种不同环境下硬件要求。以上种种的优点使它被广泛的应用于工业生产中。但是由于嵌入式Linux操作系统本身没有对种类繁多的硬件一一提供驱动,在开发过程当中更没有通用的驱动程序可以使用,这就要求我们能够根据自己硬件设备特点独立开发设备驱动。   linux支持3类硬件设备:字符设备、块设备及网络接口。字符设备是指那些无需缓冲直接读写的设备,可以像文件一样访问的字符设备。本文重点讲述了在Linux2.6内核下,编写字符设备驱动程序的步骤和一些方法。      2 cdev结构体   在linux2.6内核中,使用cdev结构体描述一个字符设备,cdev结构体定义如下:   struct cdev   {   struct kobject kobj; /*对象*/   struct module owner; /*所属模块 */   struct file_operations ops;/*文件操作结构体*/   struct list_head list;   dev_t dev; /*设备号*/   unsignedintcount;   };   cdev结构体的dev_t成员定义了设备号,为32位,其中12位为主设备号,20位为此设备号。使用下列宏可以从dev_t获得主设备号和次设备号:   MAJOR(dev_t dev)   MINOR(dev_t dev)   而使用宏MKDEV(int major, int minor)则可以通过主设备号和次设备号生成dev_t。      3 file_operations结构体   file_operations结构体中的成员函数是字符设备驱动程序设计的主要内容,这些函数实际会在应用程序进行linux的open()、write()、read()、close()等系统调用时最终被调用。以下是该结构体当中的一些主要成员:   struct file_operations   {   ………   loff_t(*llseek)(struct file *, loff_t, int);//用来修改文件当前读写位置   int (*open)(struct inode *, struct file *);//打开文件   ssize_t(*read)(struct file *, char __user *,size_t, loff_t *);   //从设备中同步读取数据   ssize_t(*write)(struct file *, char __user *,size_t, loff_t *);   //向设备发送数据   unsigned int (*poll)(struct file *, struct poll_table_struct *);   //轮询函数,判断目前是否可以进行非阻塞的读取或写入   int (*ioctl)(struct inode *,struct file *, unsigned int, unsigned long); //执行设备IO控制命令   int (*mmap)(struct file *, struct vm_area_struct *);   //用于请求将设备内存映射到进程地址空间   …………   };      4 设备号的分配和释放   在调用cdev_add()函数向系统注册字符设备之前,应首先调用register_chrdev_region()或者alloc_chrdev_region()函数向系统申请设备号,以下是这两个函数的原型:   int register_chrdev_region(dev_t from, unsigned count, const char *name);   in

您可能关注的文档

文档评论(0)

317960162 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档