我正在学习linux设备驱动程序开发并创建了一个基本内核模块的代码,它创建了一个伪字符设备。 该模块也被编译和插入.. 当我做 lsmod 时,结果就像这样
Module Size Used by
modeldriver 2540 0
这个数字表示什么?模块的大小是什么意思? linux中主要和次要数字的最大值是多少? 我在哪里可以了解linux kernel 2.6.37
的值答案 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。虽然在某些地方有点过时,但它仍然非常有用。