使用register_chrdev动态分配主设备号时,保留256个次设备号是否有意义?

3
使用register_chrdev函数为动态分配的主设备号指定256个次设备号是否有重要意义?
  1. To dynamically assign a major number I use register_chrdev function defined in kernel

    static inline int register_chrdev(unsigned int major, const char *name,
                              const struct file_operations *fops)
    {
            return __register_chrdev(major, 0, 256, name, fops);
    }
    
  2. __register_chrdev now will assign a dynamic major number if value of major passed as argument is 0.This particular operation has following source code in kernel

    if (major == 0) {
            for (i = ARRAY_SIZE(chrdevs)-1; i > 0; i--) {
                    if (chrdevs[i] == NULL)
                    break;
            }
    
  3. chrdev is an array of pointers to struct char_device_struct *chrdevs[CHRDEV_MAJOR_HASH_SIZE];

  4. Macro CHRDEV_MAJOR_HASH_SIZE is of size 255

5.ARRAY_SIZE(chrdevs)将返回*chrdevs数组的大小,考虑到struct char_device_struct结构体的大小为84字节,因此数组大小是5334(对我的错误数学计算表示歉意)。

问题:这可能是一个愚蠢的问题,但为什么自动分配了256个次设备号?

上面的源代码片段来自linux-3.6.7内核文件:fs/char_dev.c

1个回答

1

Register_chrdev是旧的接口,它默认提供256个次设备号。这是从旧内核继承下来的,并为向后兼容性而维护。在2.6及以上的新内核中,你可以使用register_chrdev_region或alloc_chrdev_region来指定所需的次设备号数量。这是更好的接口,比register_chrdev更好用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接