linux中主要和次要数字的最大值

时间:2013-02-12 13:17:32

标签: linux-kernel linux-device-driver

我正在学习linux设备驱动程序开发并创建了一个基本内核模块的代码,它创建了一个伪字符设备。 该模块也被编译和插入.. 当我做 lsmod 时,结果就像这样

 Module                 Size   Used by
modeldriver             2540    0 

这个数字表示什么?模块的大小是什么意思? linux中主要和次要数字的最大值是多少? 我在哪里可以了解linux kernel 2.6.37

的值

1 个答案:

答案 0 :(得分:3)

1。 “大小”是内核模块占用的内存量,即代码大小,数据以及可能加载到内存的模块的某些特殊部分。请注意,模块本身动态分配的内存不包含在那里。

2。 至于主要/次要数字,最好不要依赖特定的限制。例如,如果您需要为角色设备保留此类号码,则可以使用alloc_chrdev_region()

根据<linux/kdev_t.h>MAJOR()MINOR()MKDEV()的定义,可以使用12位来编码主要数字(0..4095,它似乎),20位 - 为未成年人。 “Linux设备驱动程序”一书(第3版)第3章“设备编号的内部表示”部分也证实了这一点:

  

从内核版本2.6.0开始,dev_t是一个32位数量,其中12位为主要数字,20位为次要数字。当然,您的代码不应对设备编号的内部组织做出任何假设;相反,它应该使用在linux / kdev_t.h

中找到的一组宏

如果您还没有这样做,我建议您查看上面提到的Linux Device Drivers book。虽然在某些地方有点过时,但它仍然非常有用。