dev_t 如何保存 1 个以上的次要号码?

How does dev_t hold more than 1 minor numbers?

如果下面api在随机选择的主设备号下保留3个设备(2,3,4),其中次设备设备号3和4存储在dev_t变量dev_no?

alloc_chrdev_region(&dev_no, 2,3, "mod3-device");

当使用 MINOR(dev_t) 宏提取次要号码时,我只能得到 1 个次要号码(即 2)。

me@myPC:~/work/dd/2018$ dmesg | tail
[16577.759505] module_init()
[17301.433970] major:minor 238:2

我读到,在一个 dev_t 变量中,20 位保留给次要编号,12 位保留给主要编号,尽管次要编号和主要编号的范围都是 0-255。但是我没有清楚地了解 major:minor 数字是如何为 /dev/devices.

存储的

你对alloc_chrdev_region的理解是错误的。

当你要求它'reserve'给你从2开始的3个次要号码时,这意味着它为你保留它并且dev_no是仅填充主要编号和第一个次要编号的组合。

Reserved 表示当您尝试使用相同的 Major 号码作为更多 Minor 号码时,新的 minor 号码将从 5 开始,即 2,3, 和 4 被保留。