如何在不检测错误的情况下使用 vscode 开发 Linux 内核模块

Lak*_* Fu 1 visual-studio-code vscode-settings

我正在尝试在 Ubuntu 上使用 vscode 开发 Linux 内核模块,但是 vscode 会抛出很多关于 Linux 系统头、内核宏等的错误(即使它只是一个几乎空的驱动程序......)

有人可以帮我配置 vscode 来消除这些错误吗?
下面是我的配置和错误截图。

//c_cpp_properties.json
{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}",
                "/usr/src/linux-headers-4.15.0-65/include"
            ],
            "defines": [
            ],
            "compilerPath": "/usr/bin/clang",
            "cStandard": "c99",
            "cppStandard": "c++14",
            "browse": {
                "path": [
                    "${workspaceFolder}",
                    "/usr/src/linux-headers-4.15.0-65/include"
                ],
                "limitSymbolsToIncludedHeaders": true
            },
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}
Run Code Online (Sandbox Code Playgroud)
//settings.json
{
    "files.associations": {
        "init.h": "c",
        "module.h": "c",
        "workqueue.h": "c",
        "list.h": "c",
        "types.h": "c",
        "posix_types.h": "c"
    },
    "C_Cpp.errorSquiggles": "Enabled",
    "clang.cflags": [
        "-std=c99",
        "-I/usr/src/linux-headers-4.15.0-65/include",
        "-DMODULE",
    ]
}
Run Code Online (Sandbox Code Playgroud)

1 2 3 4

小智 5

将以下内容添加到您的c_cpp_properties.json:

"defines": [
    "__GNUC__",
    "__KERNEL__"
],
Run Code Online (Sandbox Code Playgroud)

一旦我还整理了我的包含路径,这对我来说就成功了。我的看起来如下:

"includePath": [
    "${workspaceFolder}/**",
    "/usr/include",
    "/usr/local/include",
    "/usr/src/linux-headers-4.15.0-88/include",
    "/usr/src/linux-headers-4.15.0-88-generic/include",
    "/usr/src/linux-headers-4.15.0-88/arch/x86/include",
    "/usr/lib/gcc/x86_64-linux-gnu/7.4.0/include"
],
Run Code Online (Sandbox Code Playgroud)