构建内核; WSL2;错误:初始化元素不是常量
Posted
技术标签:
【中文标题】构建内核; WSL2;错误:初始化元素不是常量【英文标题】:Building Kernel; WSL2; error: initializer element is not constant 【发布时间】: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 时被发现。 另见此问题:Why “initializer element is not a constant” is… not working anymore?. 安装 gcc 9 解决了这个问题 【参考方案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);
【讨论】:
以上是关于构建内核; WSL2;错误:初始化元素不是常量的主要内容,如果未能解决你的问题,请参考以下文章