linux驱动模型学笔记——字符设备号

本文详细介绍了Linux内核中的字符设备号,包括主设备号和次设备号的概念、内部表示、静态与动态申请、释放设备号的过程,以及内核如何管理这些设备号。动态分配设备号可以减少冲突,内核通过散列表`chrdevs`管理主设备号,而`register_chrdev_region`和`alloc_chrdev_region`用于设备号的申请,`unregister_chrdev_region`用于释放。
摘要由CSDN通过智能技术生成

 

内核版本:linux-2.6.34.1

 

字符设备号

 

一、简介

Linux下的应用程序在访问字符设备时,一般都是通过设备节点访问的。设备节点一般都在/dev目录下。字符设备文件的第一个标志是c,如下所示:

[machi@localhost dev]$ ll | grep tty

……..

    crw--w----. 1 root root      4,   0 Sep 26 18:05 tty0

crw--w----. 1 root root      4,   1 Sep 25 19:04 tty1

crw--w----. 1 root tty       4,  10 Sep 26 18:05 tty10

crw--w----. 1 root tty       4,  11 Sep 26 18:05 tty11

crw--w----. 1 root tty       4,  12 Sep 26 18:05 tty12

……..

在上面的输出中,每一个文件代表一个设备,在时间前面有两个用逗号隔开的数字,第一个数字是主设备号,第二个数字是次设备号。一般认为一个主设备号对应一个驱动程序,可以看到,这里列出的TTY设备都由驱动程序4管理。不过,也可以一个主设备号对应多个驱动程序。一个次设备号对应一个设备, 所以上面输出中表示的0110等数字代表不同的设备。一个驱动程序,可以管理多个此类型的设备,设备数可以有2^20个,原因是次设备号有20位,不过不可能有这么多设备的。

 

二、设备号的内部表示

设备号的类型定义在内核代码树的文件/include/linux/Types.h中:

typedef __u32 __kernel_dev_t;

typedef __kernel_dev_t         dev_t;

__u32代表一个无符号的32位整形数。

32位的设备号中,主设备号占高12位,次设备号占低20位。在操作设备号时,可以使用内核提供的宏:

#define MINORBITS     20

#define MINORMASK   ((1U << MINORBITS) - 1)

 

#define MAJOR(dev)     ((unsigned int) ((dev) >> MINORBITS))

#define MINOR(dev)     ((unsigned int) ((dev) & MINORMASK))

#define MKDEV(ma,mi)    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值