在 vs 代码中包含智能感知的 Linux 内核头文件

Include Linux kernel headers for intellisense in vs code

我想使用 VS 代码开发 linux 内核模块。我将路径添加到我的浏览路径,但不幸的是它不起作用。 这是我的 c_cpp_properties.json:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${HOME}/Workspaces/kernel-sources/mainline/linux/include",
                "${workspaceRoot}"
            ],
            "defines": [],
            "intelliSenseMode": "clang-x64",
            "browse": {
                "path": [
                    "${HOME}/Workspaces/kernel-sources/mainline/linux/include/",
                    "${workspaceRoot}"
                ],
                "limitSymbolsToIncludedHeaders": true,
                "databaseFilename": ""
            }
        }
    ],
    "version": 3
}

我想像 #include <linux/miscdevice.h> 那样包含,但智能感知解析器无法找到该文件。我将解析器引擎更改为 "Tag Parser" 因为新的默认解析器无法递归包含文件,因为它们在内核源代码中。 关于如何配置我的智能感知有什么想法吗?

我为 ubuntu 16.04

使用 vs code 1.19

确保安装了 kernel-devel 软件包。

在头文件下看到绿色波浪线的地方 #include,单击它。 它应该在项目的 .vscode 目录中生成一个 c_cpp_properties.json 文件。

找到“Linux”、“IncludePath”部分并添加您需要的包含路径。

我的最终看起来像这样:

"name": "Linux",
"includePath": [
    "${workspaceFolder}",
    "/usr/include",
    "/usr/local/include",
    "/usr/src/kernels/3.10.0-693.el7.x86_64/include/",
    "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/",
    "/usr/src/kernels/3.10.0-693.el7.x86_64/arch/x86/include/"

如果有人在其他机器上使用 Visual Studio 代码开发 linux 内核模块,例如我在 MacOS 上编写所有内容并在带有 Fedora 的 VirtualBox 上测试它,那么我推荐这个配置:

https://gist.github.com/gyulkkajo/c29c19fc2c64f61d8b6b4892566bf10c

然后复制内核文件到你的机器,或者给我的共享文件夹。但是你只有头文件,所以你可以复制整个文件夹。

哪些文件夹:

  • 我们需要 LINUX_PATH/include,所以我们从 {KERNEL_PATH}/include
  • 复制文件夹
  • 我们需要 LINUX_PATH/arch/x86/include,所以我们从 {KERNEL_PATH}/arch/x86/include
  • 复制文件夹

然后使用 VS Code 将所有 LINUX_PATH 更改为本地计算机上的路径。

您还需要复制文件夹:mmfskernel 并相应地更新您的 browse.path