VS Code远程开发Linux Kernel

在我的工作中,大部分开发和运维都在Linux服务器端,而为了方便工作,使用 macOS 作为主要的工作平台。这就带来了跨平台开发的问题,需要远程 ssh服务 登陆到远程Linux服务器采用终端黑屏模式进行。

VS Code远程开发-SSH模式 可以让我们借助服务器强大的计算能力,来实现远程开发调试程序。对于 Kernel Atlas 开发,通过简单的设置,也可以实现方便的内核代码浏览和开发。内核开发需要加载大量的代码,对编辑器有内存和CPU要求,所以直接采用 Linux桌面 成本较高。

准备工作

我是在 私有云架构 构建虚拟机 z-dev ,然后通过 私有云SSH访问 ( SSH ProxyCommand实现穿透主机访问后端服务器 ) 登陆到服务器上:

远程服务器

远程服务器需要安装 global 用于解析符号表:

sudo dnf install global

安装完成后,系统有2个二进制文件: globalgtags

本地主机

  • 本地主机(我使用的是macOS) VS Code远程开发-SSH模式 安装好 Remote-SSH 插件

  • 在 VSCode 中 按下 F1⇧⌘P 启动命令行面板,然后选择 Remote-SSH: Connect to Host... ,然后输入需要访问的SSH服务器 z-dev

  • 此时VSCode会在远程 z-dev 服务器上自动下载并运行一个 vscode-server 并完成初始化: 初始化完成后,在远程 z-dev 上执行 ps aux | grep code 可以看到这个服务进程

远程服务器

  • 此时在本地 VSCode 的左下角有一个提示表明现在连接的是远程服务 >< SSH: z-dev ,这表示我们现在的操作,包括安装插件将在远程服务器上完成。这点非常重要,因为我们接下来需要在远程 vscode-server 上安装方便我们开发的插件

  • 在远程服务器上打开存放源代码的目录,这里案例是 Kernel 2.6.34 代码,打开目录后,后续 global 命令就知道对当前目录创建符号表解析

  • 点击 VSCode 最左边的导航按钮 Extensions ⇧⌘X ,然后搜索安装 C/C++ GNU Global ,并确保是安装在远程服务器上 SSH:Z-DV - INSTALLED

  • 在VSCode配置(注意,点一下 Remote[SSH:z-dev] 确保配置是在远程服务器上生效)

../../../_images/vscode_remote_dev_kernel.png

输入以下配置:

{
    "gnuGlobal.globalExecutable": "/usr/bin/global",
    "gnuGlobal.gtagsExecutable": "/usr/bin/gtags",
    // 指明生成的符号表存放在哪个位置(目录必须有当前用户的写入权限
    "gnuGlobal.objDirPrefix": "/home/huatai/.global"
}

注意:”gnuGlobal.objDirPrefix” 的路径必须要手动创建好,如果不存在,会导致后续 Rebuild 的失败:

mkdir /home/huatai/.global
  • 按下 ⇧⌘P 调出命令面板,然后执行 Global: Show GNU Global Version ,如果前面正确设置,就会在 VSCode 右下角显示版本号 global (GNU GLOBAL) 6.6.5 表示一切就绪

  • 按下 ⇧⌘P 调出命令面板,然后执行 Global: Rebuild Gtags Database 运行不报错对话并提示 Build tag files successfully ,则会在 /home/huatai/.global 目录下生成对应源代码的 GPATH  GRTAGS  GTAGS (这里案例就是 /home/huatai/.global/home/huatai/github.com/linux-2.6.34 目录下)

  • 然后就可以使用 VSCode 进行代码阅读以及开发

参考