linux设备驱动编程-初探(3)--【主设备号】和【次设备号】

之前一直有碰到linux内核中有主设备号和次设备号的概念,大致的了解这2个设备号表示的概念。今天在这里通过调查在这里具体的叙述一遍,给自己一个学习的总结。

【主设备号与次设备号的功能】

在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内核允许多个驱动程序共享主设备号,但是现在大多数的设备仍然按照“一个主设备号对应一个驱动程序”的原则组织。次设备号用来指向驱动程序所实现的设备,内核本身基本上不会去关心关于次设备号的任何其他信息。

【设备编号的内部表达】

设备号的类型是dev_t类型,在<linux/types.h>中定义。

typedef __kernel_dev_t        dev_t;

其中dev_t是一个32位的数,12位表示主设备号,另外20位表示次设备号。 获取主设备号和次设备号的方法如下:

MAJOR(dev_t dev);

MINOR(dev_t dev)

在<linux/kdev_t.h> 中以上宏的定义如下:

#define MAJOR(dev)    ((unsigned int) ((dev) >> MINORBITS))
#define MINOR(dev)    ((unsigned int) ((dev) & MINORMASK))

这里有个疑问,使用以上的方法获取设备的主设备和次设备号,那怎么知道获取哪个设备的主,次设备号呢?这里需要调查,如果哪位知道请告诉我,谢谢。

将主设备号和次设备号转换成dev_t的类型,可以使用

MKDEV(int major, int minor);

在<linux/kdev_t.h> 中以上宏的定义如下: #define MKDEV(ma,mi)    (((ma) << MINORBITS) | (mi))

【参考资料】:

1:O'REILLY 《LINUX 设备驱动程序》第三版

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值