如何使用 Visual Studio Code 导航 Linux 内核源代码

问题描述 投票:0回答:7

我正在从 Eclipse CDT 进行转换。当使用预处理器定义(无论是在 Makefile 中明确指定还是通过外部自动生成的头文件包含)浏览 C/C++ 代码时,预处理器宏功能是必须的。如果没有这个,就不可能浏览 Linux 源代码,如这个关于使用 Eclipse 研究 Linux 代码的开创性 wiki 页面 中所述。我正在寻找 Visual Studio Code 的等效功能。希望能指点一下。

visual-studio-code preprocessor
7个回答
9
投票
  1. 安装 ms-vscode.cpptools 扩展。
  2. 在 VSCode 中打开内核源文件夹。
  3. 按照说明,添加“${workspaceFolder}/include”和“${workspaceFolder}/arch/{your arch}/include”到includePath,“your arch”是x86/arm等。
  4. 等待 IntelliSence 索引。

8
投票

截至今天,我发现 vscode-linux-kernel 项目的使用优于上面列出的两个答案,因为代码导航和智能感知效果非常好。

该项目已发布到公共领域。


7
投票

这对我来说最有效(解决了之前的答案中片段的一些问题):

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "${workspaceFolder}/include",
                "${workspaceFolder}/arch/<arch>/include",
                "${workspaceFolder}/arch/<arch>/include/generated"
            ],
            "forcedInclude": [
                "${workspaceFolder}/BUILD/include/generated/autoconf.h"
            ],
            "defines": [
                "__KERNEL__"
            ],
            "compilerPath": "/usr/bin/gg", # replace this with your compiler (also gcc cross-compiler)
            "cStandard": "c11",
            "intelliSenseMode": "gcc-x64"
        }
    ],
    "version": 4
}

您可以将

<arch>
替换为您的实际架构。


3
投票

我不需要添加 arch 文件夹(对于 x86_64,它实际上是空的),但添加一些基本定义以使编译器特定类型和宏对智能感知可见。我的最小配置如下所示。为了获得完美的结果,您必须添加内核 .config 文件中配置的所有定义(例如 CONFIG_MMU)。其中有很多,因此通常您只会关注您真正关心的少数几个。

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "${workspaceFolder}/include"
            ],
            "defines": [
                "__GNUC__",
                "__KERNEL__"
            ],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}

1
投票

Makefile Tool 为 Makefile 项目的 VS Code C/C++ 扩展提供 IntelliSense 配置。我们不必手动管理

c_cpp_properties.json

这是我所知道的在 VSCode 中使用 Linux 内核代码的最佳解决方案。


1
投票

就我而言,上述答案都没有真正解决问题。这是我的解决方案。

  1. 禁用或卸载官方
    C/C++ plugin
  2. 安装
    clangd
    插件。
  3. 使用
    clang
    构建内核:
/path/to/kernel_source$ make CC=clang defconfig
/path/to/kernel_source$ make CC=clang -j16
  1. 生成
    compile_commands.json
/path/to/kernel_source$ python ./scripts/clang-tools/gen_compile_commands.py

如果没有出现错误,您会在

compile_commands.json
中找到
/path/to/kernel_source/

  1. 使用以下参数配置
    clangd
    插件:

image.png

或者将以下内容复制到您的settings.json:

{
    "clangd.arguments": [
        "--compile-commands-dir=${workspaceFolder}",
        "--background-index",
        "--completion-style=detailed",
        "--header-insertion=never",
        "-log=info",
        "-pretty"
    ],
    "clangd.path": "/usr/bin/clangd"
}
  1. 打开内核源代码中的任意
    C
    文件并享受它:)

image.png


0
投票

这些回复很有帮助,但是https://www.kernel.org/doc/html/latest/process/programming-language.html会表明

cStandard
应该是
gnu11
(根据@pqnet的评论) ).

© www.soinside.com 2019 - 2024. All rights reserved.