【问题标题】:Building Kernel; WSL2; error: initializer element is not constant构建内核; WSL2;错误:初始化元素不是常量
【发布时间】:2021-09-21 09:32:58
【问题描述】:

我正在尝试使用本教程在 Ubuntu-18.04 WSL2构建内核https://www.frakkingsweet.com/running-pi-gen-on-wsl2/

配置一切正常。 但是在构建它时:

制作 KCONFIG_CONFIG=Microsoft/config-wsl.new -j4

出现此错误:

drivers/hyperv/dxgkrnl/dxgmodule.c:422:39:错误:初始化元素不是常量 const int DXGK_VMBUS_VERSION_OFFSET = DXGK_VMBUS_CHANNEL_ID_OFFSET +

发生错误的 dxgmodule 文件是 C 文件文件内容:

419: /* vGPU VM 总线通道实例 ID */

420: 常量 int DXGK_VMBUS_CHANNEL_ID_OFFSET = 192;

421: /* DXGK_VMBUS_INTERFACE_VERSION (u32) */

422: const int DXGK_VMBUS_VERSION_OFFSET = DXGK_VMBUS_CHANNEL_ID_OFFSET +

423: sizeof(guid_t);

如何更改代码,以便编译器将初始化表达式读取为常量?

【问题讨论】:

  • 我认为代码依赖于允许这种初始化形式的最新版本的 GCC。它不适用于较旧的 GCC 版本。应该更改代码以与可用于构建内核的最低 GCC 版本兼容。我猜这个问题会在微软代码被上游化到 Linux 时被发现。
  • 安装 gcc 9 解决了这个问题

标签: compiler-errors linux-kernel wsl-2 initializer


【解决方案1】:

我有一个解决办法。

我改成

419: /* vGPU VM 总线通道实例 ID */

420: 常量 int DXGK_VMBUS_CHANNEL_ID_OFFSET = 192;

421: /* DXGK_VMBUS_INTERFACE_VERSION (u32) */

422: const int DXGK_VMBUS_VERSION_OFFSET = 192 +

423: sizeof(guid_t);

【讨论】:

    猜你喜欢
    • 2012-04-10
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 2012-06-04
    • 1970-01-01
    • 2015-07-21
    相关资源
    最近更新 更多