【问题标题】:HowTo use the VSC to navigate Linux kernel source如何使用 VSC 导航 Linux 内核源代码
【发布时间】:2022-02-01 20:38:04
【问题描述】:

我正在从 Eclipse CDT 转换。在使用预处理器定义(无论是在 Makefile 中明确指定还是通过外部自动生成的头文件包含)浏览 C/C++ 代码时,预处理器宏功能是必须的。如this seminal wiki page on using Eclipse to study the Linux code 所述,没有这个,导航Linux 源代码将是不可能的。我正在寻找 VSC 的等效功能。不胜感激。

问候

【问题讨论】:

    标签: visual-studio-code preprocessor


    【解决方案1】:
    1. 安装 ms-vscode.cpptools 扩展。
    2. 在 VSCode 中打开内核源文件夹。
    3. 关注instructions,将“${workspaceFolder}/include”和“${workspaceFolder}/arch/{your arch}/include”添加到includePath,“your arch”是x86/arm等。
    4. 等待 IntelliSence 索引。

    【讨论】:

    • 我正在使用内核,这个答案就像一个魅力。我注意到,如果您正在使用模块开发,您还可以使用您机器的 linux 头文件。在我的情况下,添加到settings.json:`C_Cpp.default.includePath": ["/usr/src/linux-headers-5.0.0-custom-buster/arch/x86/include/" , "/usr/src /linux-headers-5.0.0-custom-buster/include/"] `
    【解决方案2】:

    截至今天,我发现使用 vscode-linux-kernel 项目优于上面列出的两个答案,因为代码导航和 Intellisense 工作得很好。

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

    【讨论】:

    • 这可能是最好的解决方案。
    【解决方案3】:

    这对我来说最有效(修复a previous answer 中的一些 sn-p 问题):

    {
        "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
    }
    

    您可以将&lt;arch&gt; 替换为您的实际架构。

    【讨论】:

      【解决方案4】:

      我不需要添加 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
      }
      

      【讨论】:

      • 您必须按照内核 .config 文件中的配置添加所有定义 所有定义都已经在 include/generated/autoconf.h(在 /usr/src/linux-headers-$(uname -r)/ 下),应该足以 @ 987654324@它在c_cpp_properties.json
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-11
          • 1970-01-01
          • 1970-01-01
          • 2016-07-03
          相关资源
          最近更新 更多