当我编译Linux内核时,我编译的驱动程序和模块的数量肯定会影响生成的二进制文件的大小。但它在加载到内存时是否也会影响内核的大小?
我的意思是,当我编译我的硬件不需要的驱动程序时,内核会忽略它们,还是它们也被加载到RAM中?
TL; DR:
我编译内核A只包含我需要的驱动程序;
包含我需要的驱动程序的内核B +我没有的额外驱动程序。
内核B会比内核A占用更多内存吗?
答案 0 :(得分:2)
作为Linux内核映像的一部分构建的任何驱动程序在引导期间都会加载到主内存中,并且无论是否使用它都将继续占用主内存。
构建为独立模块的驱动程序,即 .ko
文件可以根据需要单独加载。除非加载它们,否则它们不会消耗任何主内存。
使用modprobe
加载Linux内核模块时, it 所依赖的任何其他模块都取决于automatically loaded first。
加载内核模块时,需要将它们映射到连续的虚拟内存块中。这是通过引入additional constraint on the memory map using vmalloc
来实现的。