2

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

 Module                 Size   Used by
modeldriver             2540    0 

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

4

1 回答 1

3

1.“大小”是内核模块占用的内存量,即加载到内存中的代码、数据和可能模块的一些特殊部分的大小。请注意,模块本身动态分配的内存不包括在内。

2.关于主次编号,最好不要依赖特定的限制。例如,如果您需要为您的字符设备保留这些号码,您可以使用alloc_chrdev_region().

从和in的定义可以看出MAJOR(),12 位用于编码主要数字(似乎是 0..4095),20 位用于次要数字。“The Linux Device Drivers”一书(第 3 版)第 3 章的“设备编号的内部表示”部分也证实了这一点:MINOR()MKDEV()<linux/kdev_t.h>

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

如果您还没有这样做,我建议您看一下上面提到的Linux 设备驱动程序书。虽然在某些地方有点过时,但它仍然非常有用。

于 2013-02-13T08:32:02.297 回答