【问题标题】:Problems compiling a kernel I have modified编译我修改过的内核时出现问题
【发布时间】:2020-07-27 03:01:39
【问题描述】:

我采用 Linux 内核版本 4.9.30,添加了一个新目录 /fsac,其文件包含来自其他目录 (/include/fsac) 的头文件,这几乎是我所做的全部更改。尝试编译时,我在 /kernel/sched/core.c 中遇到很多错误,如下所示:

kernel/sched/core.c:2326:20: error: invalid storage class for function ‘set_schedstats’

kernel/sched/core.c:2342:19: error: invalid storage class for function ‘setup_schedstats’

(...)

在线搜索我看到建议是简单地从函数中删除“静态”。这样做有效地避免了这些错误,但相反,我开始从 objtool 收到很多警告,例如对于删除了静态的每个函数的“帧指针状态不匹配”。

我发现这些警告可以通过更改配置文件CONFIG_STACK_VALIDATION=n 来避免。这可行,但即使没有警告,编译也会失败(错误 2)。

因此,我想知道:

1 - 从被冒犯的函数中删除“静态”是正确的解决方案吗?

2 - 如果是这样,我该如何处理 objtool 警告?这些警告是否会单独构成编译错误,还是一定有其他原因?

3 - 你认为我应该降级 GCC 吗?

这是项目的源代码:https://github.com/Zildj1an/FSAC_Kernel 这是没有删除静态的编译日志:https://github.com/Zildj1an/FSAC_Kernel/blob/master/build_err

我很乐意提供您可能需要的任何其他信息。

干杯。

【问题讨论】:

  • 最好你也在这里添加编译警告。
  • static 函数是仅对同一文件中的其他函数可见的函数。所以,如果你在原始文件之外使用那些 static 函数(我猜你可能在你的代码中使用它们)那么你会得到这些错误。
  • @campescassiano 完成!我没有使用 core.c 中的函数
  • 你能在不修改的情况下编译内核吗?

标签: c linux makefile compilation kernel


【解决方案1】:

发现问题,我在函数内部有一个函数...可能是被移动复制了其他东西。

【讨论】:

    猜你喜欢
    • 2013-09-27
    • 1970-01-01
    • 2023-03-06
    • 2014-01-20
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多