如何将Linux内核去优化并使用-O0进行编译?

时间:2015-03-19 17:29:15

标签: linux debugging linux-kernel gdb kernel

我想阅读并理解Linux内核的内存管理(特别是defrag \ compaction \ migration)。

所以,我关闭.config中的大小优化(当然使用make menuconfig)并编译......这让我仍然有一个优化的内核。

注意:当我说优化内核时,我的意思是当我使用gdb并告诉它next它会跳转时。我不希望这样,我希望能够像在简单的hello世界中一样逐行地遵循代码。

接下来,我编辑Makefile并与-O2交换-O0,这会导致事情中断。

我找到了this,但我不知道我想要哪些文件,因为我不知道兔子洞到底有多远。

我可以使用更通用的选项吗?我理解内存压缩的概念;但是,我希望看到一切发生的地方以及它是如何发生的。

1 个答案:

答案 0 :(得分:9)

您无法取消优化内核。您可以对某些功能进行去优化,例如:

void __attribute__((optimize("O0"))) foo(unsigned char data) {
    // unmodifiable compiler code
}

但内核作为一个整体需要-O2,因为代码本身的编写假设某些函数将以某种方式进行优化。

很抱歉,你真的需要知道你想要的兔子洞的大小。