在尝试估计内核模块(通常是设备驱动程序)消耗的内存量时,我尝试使用size实用程序,它给出了 .ko(.bss、.data、.text 等)的静态内存区域的大小。所以我期望这些值的总和与插入模块后立即由lsmod命令给出的输出完全相等。
init() 函数中没有执行动态内存分配(kmalloc 或 vmalloc)以确保它不会导致差异。那么为什么会出现不匹配?
奇怪的是,大多数时候发现不匹配是固定的!!
命令输出如下所示
大小 chardev.ko
text data bss dec hex filename
172 448 1024016 1024636 fa27c chardev.ko
lsmod
Module Size Used by Tainted: P
chardev 1025040 0 - Live 0xc009d000