【问题标题】:How to de-optimize the Linux kernel to and compile it with -O0?如何对 Linux 内核进行反优化并使用 -O0 进行编译?
【发布时间】:2015-05-22 23:01:46
【问题描述】:

我想阅读和理解 Linux 内核的内存管理(尤其是碎片整理\压缩\迁移)。

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

注意:当我说优化内核时,我的意思是当我使用gdb 并告诉它next 它会跳来跳去。我不希望这样,我希望能够像处理简单的 hello world 一样逐行执行代码。

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

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

我可以使用更通用的选项吗?我了解内存压缩的概念;但是,我想看看一切发生在哪里以及它是如何发生的。

【问题讨论】:

  • gdb内核怎么样?您是否开启了kgdb 支持?
  • @EugeneSh。我正在通过qemu -s 启用DEBUG_KERNEL。我将启用kgdb 并报告结果。
  • @EugeneSh。虽然我无法让管道与 qemu 一起工作(gdb 抛出故障),但似乎没有区别。
  • 在回答上面的问题时,我突然很好奇,为什么Linux内核必须优化才能正常工作?
  • Greg 说它无法完成,因此你无法完成(实际上):lists.kernelnewbies.org/pipermail/kernelnewbies/2016-August/… :-) 相关:unix.stackexchange.com/questions/153788/…

标签: linux debugging linux-kernel gdb kernel


【解决方案1】:

您无法取消优化内核。您也许可以取消优化某些功能,如下所示:

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

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

很抱歉,但您确实需要知道您想要进入的兔子洞的大小。

【讨论】:

  • 我们能否将优化设置为-O1 而不是-O0
  • „但是内核作为一个整体需要 -O2,因为代码本身是在假设某些函数将以某种方式优化的前提下编写的。“——这听起来很难看。
猜你喜欢
  • 2017-09-06
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 2012-10-23
  • 2013-10-14
  • 2014-07-28
  • 2014-12-30
  • 1970-01-01
相关资源
最近更新 更多