首页 > 代码库 > alloc_chrdev_region

alloc_chrdev_region

 

#include <linux/fs.h>
int
alloc_chrdev_region(dev_t *dev,
              unsigned int firstminor,
              unsigned int count,
              char *name)

 dev_t 设备号(主设备号,次设备号)

typedef unsigned long dev_t
MAJOR(dev_t dev);    //主设备号
MINOR(dev_t dev);    //次设备号

该函数需要传递给它指定的第一个次设备号firstminor(一般为0)和要分配的设备数count,以及设备名,调用该函数后自动分配得到的设备号保存在dev中。

 
动态分配设备号可以避免手动指定设备号时带来的缺点,但是它却也有自己的缺点,那就是无法预知在/dev下创建设备节点,因为动态分配设备号不能保证在每次加载驱动module时始终一致(其实若在两次加载同一个驱动module之间并没有加载其他的module,那么自动分配的设备号还是一致的,因为内核分配设备号并不是随机的,但是书上说某些内核开发人员预示不久的将来会用随机方式进行处理),不过,这个缺点可以避免,因为在加载驱动module后,我们可以读取/proc/devices文件以获得Linux内核分配给该设备的主设备号。