引言
动机
最近有阅读 Linux 内核源码的需求,而现在主力机是 Mac,所以 Windows 环境下传统的 Source Insight 工具不能继续使用了。
那么,只好祭出宇宙最强编辑器——VSCode!
效果
先看最终效果图:
代码语法高亮也不会有讨厌的红色波浪线报错。
同时支持跳转,这里成功从 struct socket
结构体跳转到 socket_state
枚举:
当然全局搜索、大纲视图、拆分编辑器这些 VScode 基本功能就不用多说了,肯定满足看源码的需求。
如果你还对最终效果满意,那么我们开始配置环境吧!
配置
基本环境
这里用宿主机 Mac + 虚拟机 Ubuntu Server(开启 SSH 服务)配置环境,当然宿主机如果是 Windows 环境配置过程几乎没有区别。
下载并解压源码
源码从 kernel.org 上下载,选择一个你想阅读的内核版本下载,
这里我们选择 linux-5.0-rc3.tar.gz 下载。
在 Linux 虚拟机中执行:
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.0-rc3.tar.gz
下载内核代码。
使用:
tar -xf linux-5.0-rc3.tar.gz
解压内核代码到当前目录。
修改 inotify 参数
回到宿主机,在 VSCode 中安装并配置 Remote-SSH 插件,连接到虚拟机后打开内核代码目录作为工作区。这时候 VSCode 加载会非常缓慢且有 error ENOSPC
产生,因为我们一股脑儿地导入了整个 Linux 内核代码吃光了 user_watches
资源。
inotify 是 Linux 下监控文件变化的工具,当系统的文件发生变化时,可以发送通知到应用层,我们调大它同时能监控的文件数量
打开虚拟机里的 /etc/sysctl.conf
文件,追加
fs.inotify.max_user_watches=524288
执行:
sudo sysctl -p
使参数生效。
配置 global 工具
安装 global 工具
global 工具是 GNU 协议下的源码标记软件(标记自家的东西相信处理得很好吧 笑)。Ubuntu 上使用 apt 安装只需要执行命令
sudo apt install global
安装 global 插件
VSCode 上有现成的插件可以直接使用,我们在 VSCode 这个 SSH 会话里安装 C/C++ GNU Global 插件,然后在内核代码项目中新建 .vscode/settings.json(如果自定义了 global 工具的路径的话需要在这里显式地配置 gnuGlobal.globalExecutable
和 gnuGlobal.gtagsExecutable
字段)。
如果不清楚 global 的路径可以使用
which is global
which is gtags
查看。
同时我选择将所有代码生成的 GPATH, GRTAGS, GTAGS 文件存到同一个文件夹中,所以我显式配置了 gnuGlobal.objDirPrefix
字段。
{
"gnuGlobal.globalExecutable": "/usr/bin/global",
"gnuGlobal.gtagsExecutable": "/usr/bin/gtags",
"gnuGlobal.objDirPrefix": "/home/constantine3/Repo/.global"
}
生成 tag
在 VSCode 工作区中按 F1 执行 Show GNU Global Version
,如果配置正确,右下角会显示 global (GNU GLOBAL) <Global_Version>
。
执行 Rebuild Gtags Database
,等待完成后就可以愉快地阅读 Linux 源码了!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。