已编译模块的数量是不是会影响 RAM 中 Linux 内核的大小?
Posted
技术标签:
【中文标题】已编译模块的数量是不是会影响 RAM 中 Linux 内核的大小?【英文标题】:Is number of compiled modules affecting size of linux kernel in RAM?已编译模块的数量是否会影响 RAM 中 Linux 内核的大小? 【发布时间】:2013-08-02 15:23:23 【问题描述】:当我编译 Linux 内核时,我编译的驱动程序和模块的数量肯定会影响生成的二进制文件的大小。但是它是否也会影响内核加载到内存时的大小?
我的意思是,当我编译我的硬件不需要的驱动程序时,内核会忽略它们,还是它们也加载到 RAM 中?
TL;DR : 我编译了只包含我需要的驱动程序的内核 A; 内核 B 包含我需要的驱动程序 + 我不需要的额外驱动程序。 内核 B 会比内核 A 吃掉更多的内存吗?
【问题讨论】:
是的。如果驱动程序是作为内核映像的一部分构建的。如果它们被构建为内核ko
模块并且除非需要,否则不会加载。
@TheCodeArtist:你能提交这个作为答案吗?一些参考文献也会很好:)
【参考方案1】:
作为 Linux 内核映像的一部分构建的任何驱动程序都会在引导期间加载到主内存中,并且无论是否使用都会继续消耗主内存。
作为独立模块构建的驱动程序,即 .ko
文件可以根据需要单独加载。除非它们被加载,否则它们不会消耗任何主内存。
在 Linux 内核加载并运行后,使用 modprobe
和 insmod
命令加载内核模块。
使用modprobe
加载Linux 内核模块 时,它 依赖的任何其他模块都是automatically loaded first。
加载内核模块时,需要将它们映射到连续的虚拟内存块中。这是通过引入additional constraint on the memory map using vmalloc
来实现的。
【讨论】:
以上是关于已编译模块的数量是不是会影响 RAM 中 Linux 内核的大小?的主要内容,如果未能解决你的问题,请参考以下文章
关于STM32 KEIL MDK环境下,程序在RAM中调试的问题
Windows 7(或更高版本)中活动可见 HWND 的数量是不是会显着影响性能?