При попытке оценить объем памяти, потребляемой модулем ядра (обычно драйверами устройств), я попытался использовать утилиту size, которая выдавала размер областей статической памяти файлов .ko ( .bss, . данные, .текст и т. д.). Поэтому я ожидал, что сумма этих значений будет точно равна выходным данным команды 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