Как разработать модуль ядра Linux с vscode без некорректного обнаружения ошибок - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь разработать модуль ядра Linux с vscode в Ubuntu, но 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
}
//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",
    ]
}

1 2 3 4

1 Ответ

0 голосов
/ 24 октября 2019

Я разрабатываю модуль ядра на CentOS с кодом Visual Studio. Вот фрагмент моего c_cpp_properties.json. Я знаю, что это относится к моей версии ядра и дистрибутиву Linux, но, возможно, это укажет вам правильное направление. Я полагаю, что у меня также есть полный исходный код ядра и загружена отладка.

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/include",
                "/usr/local/include",
                "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include",
                "/usr/src/kernels/3.10.0-1062.1.1.el7.x86_64/include",
                "/usr/src/kernels/3.10.0-1062.1.1.el7.x86_64/arch/x86/include"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c11",
            "cppStandard": "c++14",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}

Вот немного больше информации (о чем я думаю), каждый из которых указывает на:

/usr/include Заголовокфайлы для компилятора C.

/usr/local/include Заголовочные файлы для сторонних программ.

/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include Заголовочные файлы для GCC.

/usr/src/kernels/3.10.0-1062.1.1.el7.x86_64/include Заголовочные файлы для конкретноговерсия ядра, которую вы используете. Убедитесь, что пакет kernel-devl установлен.

/usr/src/kernels/3.10.0-1062.1.1.el7.x86_64/arch/x86/include Я почти уверен, что здесь представлены специфичные для архитектуры заголовочные файлы для ядра.

Это обеспечивает бесплатную ошибку (и скрытность)vscode для моей настройки.

...