При попытке оценить объем памяти, потребляемый модулем ядра (обычно это драйверы устройств), я попытался использовать утилиту размер, которая задала размер областей статической памяти .ko(. bss,.data,.text и т.д.). Поэтому я ожидал, что сумма этих значений будет в точности равна выходу, заданному командой lsmod сразу после вставки модуля.
Никакое динамическое распределение памяти (kmalloc или vmalloc) не выполняется в функции init(), чтобы гарантировать, что это не вызывает разницу. Поэтому почему существует несоответствие?
Любопытно, что несоответствие было обнаружено как фиксированное количество большую часть времени!
Выходы команды перечислены ниже
размер 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