字符设备驱动基础 字符设备基础.docVIP

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
字符设备驱动基础 字符设备基础.doc

字符设备驱动基础 字符设备基础 bash ls -l /devtotal 0crw------- 1 root root 5, 1 Jul 16 10:02 console...lrwxrwxrwx 1 root root 3 Oct 6 10:02 cdrom - hdc...brw-rw---- 1 root disk 3, 0 Oct 6 2007 hdabrw-rw---- 1 root disk 3, 1 Oct 6 2007 hda1...crw------- 1 root tty 4, 1 Oct 6 10:20 tty1crw------- 1 root tty 4, 2 Oct 6 10:02 tty2第一个字符:c:字符设备、l:symlink、b:块设备第五个字符5,1:主设备号,次设备号;主设备号能够寻找到驱动,而次设备号则能够定位设备。字符设备和块设备的空间不一样,因此,可以使用同一主设备号从编码角度看需要:(1)、初始化并注册设备。(2)、应用通过/dev下节点的文件系统调用:open()、read()、ioctl()、llseek()、write()(3)中断处理程序、底半部、时钟处理、内核辅助线程和其他支撑架构。从数据流角度看,字符设备需要:(1)设备对应结构体;(2)struct cdev;(3)、struct file_operation;(4)struct file。 Device Example:System CMOSBIOS使用CMOS来存储诸如startup option,boot order,and the system date,您可以通过BIOS启动菜单修改。例子CMOS驱动可以像普通文件一样访问2个PC CMOS块,应用程序可以操作/dev/cmos/0和/dev/cmos/1,并使用I/O系统调用来访问两个bank里面的数据。因为BIOS给CMOS区域以位级粒度,驱动也能够以位级访问。所以read()可以读取指定的位数,并移动相应位数指针。 Table 5.1. Register Layout on the CMOS Register NameDescription CMOS_BANK0_INDEX_PORTSpecify the desired CMOS bank 0 offset in this register. CMOS_BANK0_DATA_PORTRead/write data from/to the address specified in CMOS_BANK0_INDEX_PORT. CMOS_BANK1_INDEX_PORTSpecify the desired CMOS bank 1 offset in this register. CMOS_BANK1_DATA_PORTRead/write data from/to the address specified in CMOS_BANK1_INDEX_PORT. Driver Initialization init()的责任:(1)请求分配设备主设备号;(2)为每个设备结构分配内存;(3)链接字符设备驱动cdev的入口点(open()、read()等);(4)联系主设备号和驱动的cdev;(5)在/dev和/sys下创建节点;(6)初始化硬件。以下是示例程序:Listing 5.1. CMOS Driver Initialization Code View: #include /* Per-device (per-bank) structure */struct cmos_dev { unsigned short current_pointer; /* Current pointer within the bank */ unsigned int size; /* Size of the bank */ int bank_number; /* CMOS bank number */ struct cdev cdev; /* The cdev structure */ char name[10]; /* Name of I/O region */ /* ... */ /* Mutexes, spinlocks, wait queues, .. */} *cmos_devp;/* File operations structure. Defined in linux/fs.h */static struct file_operations cmos_fops = { .owner = THIS_MODULE, /* Owner */ .open = cmos_open, /* Open meth

文档评论(0)

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

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

1亿VIP精品文档

相关文档