已编译模块的数量是不是会影响 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 内核加载并运行后,使用 modprobeinsmod 命令加载内核模块。

    使用modprobe 加载Linux 内核模块 时, 依赖的任何其他模块都是automatically loaded first。

    加载内核模块时,需要将它们映射到连续的虚拟内存块中。这是通过引入additional constraint on the memory map using vmalloc 来实现的。

【讨论】:

以上是关于已编译模块的数量是不是会影响 RAM 中 Linux 内核的大小?的主要内容,如果未能解决你的问题,请参考以下文章

关于STM32 KEIL MDK环境下,程序在RAM中调试的问题

Windows 7(或更高版本)中活动可见 HWND 的数量是不是会显着影响性能?

KEIL中三种编译模式以及对变量空间的影响

MPLAB X32 编译器和将函数移动到 RAM 会导致链接器错误

NUMA 会影响内存带宽,还是只是延迟?

C++ 优化级别会影响 Swig Python 模块性能吗