linux设备驱动 主设备号 次设备号.docx

linux设备驱动 主设备号 次设备号.docx

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

/gqb666/article/details/8805179?【主设备号与次设备号的功能】在Linux内核中,主设备号标识设备对应的驱动程序,告诉Linux内核使用哪一个驱动程序为该设备(也就是/dev下的设备文件)服务;而次设备号则用来标识具体且唯一的某个设备。比如说在linux的终端打入命令:**@ubuntu:/dev$ls –l?? crw-rw----? 1 root?? root????? 4,?? 0 2010-05-25 06:50 tty0 crw-------? 1 root?? root????? 4,?? 1 2010-05-25 06:51 tty1会出现很多的文件列表,这里举例字符串设备文件【字符串设备的开头表示为c,当然块设备表示为b】,这些文件可以称为文件系统书的节点,都是位于/dev目录下。另外上面2行中的数字,4【紫红表示】,0,1【蓝色表示】分别表示的是该设备的主设备号,次设备号。一个主设备号和一个次设备号就组成了该设备的唯一标识符。虽然现在的linux内核允许多个驱动程序共享主设备号,但是现在大多数的设备仍然按照“一个主设备号对应一个驱动程序”的原则组织。次设备号用来指向驱动程序所实现的设备,内核本身基本上不会去关心关于次设备号的任何其他信息。次设备号的主要用途1、区分设备驱动程序控制的实际设备;2、区分不同用途的设备 (misc系列设备)3、区分块设备的分区 (partition)通常,为了使应用程序区分所控制设备的类型,内核使用主设备号。而存在多台同类设备时,为了选择其中的一种,设备驱动程序就使用次设备号。区分块设备的分区块设备具有被称为分区的分配领域。例如,硬盘在物理上是一个设备,从内核的角度,硬盘被分为多个分区,而以这些分区为对象则形成了文件系统,此时,次设备号既表示设备,也表示分区。brw-rw----? 1 root disk??? 8,? 16 2009-09-24 sdbbrw-rw----? 1 root disk??? 8,? 17 2009-09-24 sdb1brw-rw----? 1 root disk??? 8,? 18 2009-09-24 sdb2brw-rw----? 1 root disk??? 8,? 21 2009-09-24 sdb5brw-rw----? 1 root disk??? 8,? 22 2009-09-24 sdb6brw-rw----? 1 root disk??? 8,? 23 2009-09-24 sdb7brw-rw----? 1 root disk??? 8,? 24 2009-09-24 sdb8一、主设备号和此设备号????主设备号表示设备对应的驱动程序;次设备号由内核使用,用于正确确定设备文件所指的设备。内核用dev_t类型()来保存设备编号,dev_t是一个32位的数,12位表示主设备号,20为表示次设备号。在实际使用中,是通过中定义的宏来转换格式。???? (dev_t)--主设备号、次设备号???? MAJOR(dev_tdev)???? MINOR(dev_tdev)???? 主设备号、次设备号--(dev_t)???? MKDEV(intmajor,int minor) 建立一个字符设备之前,驱动程序首先要做的事情就是获得设备编号。其这主要函数在中声明:????intregister_chrdev_region(dev_t first, unsigned int count,????char *name); //指定设备编号????intalloc_chrdev_region(dev_t *dev, unsigned intfirstminor,????unsigned int count, char *name); //动态生成设备编号????void unregister_chrdev_region(dev_t first, unsigned int count); //释放设备编号????分配之设备号的最佳方式是:默认采用动态分配,同时保留在加载甚至是编译时指定主设备号的余地。????以下是在scull.c中用来获取主设备好的代码:????if (scull_major) {???? dev = MKDEV(scull_major, scull_minor);???? result = register_chrdev_region(dev,scull_nr_devs, scull);????} else {???? result = alloc_chrdev_region(dev,scull_minor, scull_nr_devs,scull);???? scull_major = MAJOR(d

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档