在Linux内核编译的“make”步骤中,我得到了很多这些错误:

Building modules, stage 2.
MODPOST 2283 modules
WARNING: modpost: Found 1 section mismatch(es).
To see full details build your kernel with:
'make CONFIG_DEBUG_SECTION_MISMATCH=y'

我知道我可以做一个make CONFIG_DEBUG_SECTION_MISMATCH= y并继续进行下去,但是我想知道是否有更好的方法来处理这个问题。也许向某人报告或我自己如何解决这些问题,等等。

最佳答案

这只是一个警告。内核构建系统进行了完整性检查,发现可能存在错误。警告消息说,在内核代码中的某处存在可能执行不适当的横截面访问的代码。请注意,您的内核确实已构建!

要了解警告的含义,请考虑以下示例:

内核文本部分中的某些内核代码可能正在尝试调用标有__init数据宏的函数,链接器将其放置在内核init部分中,该宏在引导或模块加载后被取消分配。

这可能是运行时错误,因为如果文本部分中的代码在初始化代码完成之后调用init部分中的代码,则基本上是在调用陈旧的指针。

话虽如此,该调用可能非常好-内核文本部分中的调用可能有充分的理由知道,只有在保证该部分存在时,它才调用init部分中的函数。

当然,这只是一个例子。类似的其他情况也存在。

解决方案是使用CONFIG_DEBUG_SECTION_MISMATCH=y进行编译,该输出将为您提供尝试访问哪些数据或函数以及它们属于哪个部分的函数的输出。然后,您可以尝试确定是否需要进行构建时间警告,以及是否有希望修复此警告。

init.h__ref__refdata可用于允许此类初始化引用而不会发出警告。例如,

char * __init_refok bar(void)
{
  static int flag = 0;
  static char* rval = NULL;
  if(!flag) {
     flag = 1;
     rval = init_fn(); /* a function discarded after init */
  }
  return rval;
}
__init_refok等可以修复“有效”实例,因此它们存在的事实可能不会激发信心。

关于linux - Linux内核CONFIG_DEBUG_SECTION_MISMATCH出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6807766/

10-14 17:01
查看更多