vscode + Remote SSH + clangd Linux内核源码阅读环境搭建


1、vscode + Remote SSH 远程连接Linux虚拟机

环境说明

  • vscode运行在Windows环境
  • Linux虚拟机是在Windows环境下通过VMWare安装
    • Linux版本:openEuler 22.03
    • 涉及到的软件包安装基本上都是基于 rpm 包安装的

连接配置过程

  1. 安装 Remote - SSH 插件

  2. 添加远程主机

    首先,打开 vscode 命令输入栏(快捷键 F1Ctrl + Shift + P),搜索 Remote-SSH: Connect to Host... ,回车。

    在连接窗口中,输入你要远程连接的远程主机(这里是我的Linux虚拟机),输入格式为:user@host,如 root@192.168.0.111 ,回车。

    此时会弹出一个新的 vscode 窗口,依此选择远程主机的系统类型(我的是 Linux),输入远程主机的密码,回车。

    如果一切正常的话,你将成功连上你的远程主机,此时 vscode 窗口左下角会出现 SSH: 192.168.x.x 表示你连上的远程主机IP。另外,你可以在 explorer 侧边栏点击 OpenFolder ,此时会弹出远程主机的文件目录结构,选择一个文件夹作为你的工作目录即可。

    至此,你就可以直接在Windows环境下通过 vscode 操作远程主机上的代码了。

遇到的问题

  1. 远程主机一直连不上,打开 vscode 的输出控制台,打印 open failed: administratively prohibited: open failed 字样的错误。

    去 vscode 官网,查看 Remote-SSH 插件的问题处理文档:https://code.visualstudio.com/docs/remote/troubleshooting#_troubleshooting-hanging-or-failing-connections ,搜索关键字,找到相应的解决办法。

2、安装 clangd 插件

安装 clangd 插件,安装好后在 settings.json 中添加如下 clangd 的配置(可按需扩展),

"clangd.arguments": [
    "--compile-commands-dir=${workspaceFolder}",
    "--background-index",
    "--completion-style=detailed",
    "-log=info"
],

注意,clangd 插件跟 C/C++ 插件是冲突的,如果使用 clangd 的功能,需要禁用 C/C++ 插件。

"C_Cpp.intelliSenseEngine": "Disabled"

另外,在使用 Remote - SSH 连接上远程 Linux 虚拟机后,需要同时在远程 Linux 虚拟机上安装 clangd 插件,根据 Extensions 侧边栏 clangd 插件的提示按钮 Install in SSH: 192.168.x.x 点击安装即可(可能安装不成功,看后面手动安装步骤)。安装好后,拷贝 clangd 插件的配置到远程 Linux 虚拟机上的 clangd 上,同时配置远程 Linux 虚拟机上安装的 clangd 的可执行文件路径。

手动在远程 Linux 虚拟机上安装 clangd

  1. 直接在 github 发布页面上下载 clangd 的二进制包,我下载的是 13.0.0 版本的 clangdhttps://github.com/clangd/clangd/releases/tag/13.0.0

  2. 拷贝二进制包到 Linux 安装目录,解压即可。

    unzip clangd-linux-13.0.0.zip
  3. 在解压后的文件夹中找到二进制文件 clangd 的文件路径,并在 vscode 中配置远程 Linux 虚拟机上安装的 clangd 的可执行文件路径。(如上所述)

3、生成 clangd 需要的配置文件 compile_commands.json

安装 bear

  1. 直接在 https://koji.fedoraproject.org/koji/ 下载合适的 bear 版本的 rpm 包,我下载的版本 bear-2.4.4-1.fc31
  2. 将 rpm 包拷到 Linux 虚拟机上,通过 yum install bear-2.4.4-1.fc31.x86_64.rpm 安装即可。

编译内核代码生成compile_commands.json

参考文档:https://www.cyberciti.biz/tips/compiling-linux-kernel-26.html

  1. 下载指定的内核版本的源码包,可以直接去官网下载:https://www.kernel.org/

  2. 解压源码包 tar -zxvf kernel.tar.gz ,并进入源码包的根目录。

  3. 可以直接拷贝当前Linux虚拟机的内核配置文件(cp -v /boot/config-$(uname -r) .config),或直接使用 make menuconfig 来配置内核支持的特性和模块配置。

  4. 安装编译依赖的工具包

    yum group install "Development Tools"
    yum install ncurses-devel bison flex elfutils-libelf-devel openssl-devel
  5. 使用 bear 编译内核,执行 bear make -j 8

  6. 编译完成后,会在源码包的根目录下生成 compile_commands.json 文件。

4、通过 vscode 阅读内核源码,可自由跳转了


文章作者: algorithmofdish
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 algorithmofdish !
  目录