介绍动机最近有阅读Linux内核源码的需求,现在主力机是Mac,所以Windows环境下传统的SourceInsight工具已经不能用了。那么,就不得不求助于宇宙最强编辑器——VSCode了!效果先看最终效果图:代码语法高亮不会出现烦人的红色波浪线报错。同时支持跳跃。到这里,从structsocket结构体跳转到socket_state枚举就成功了:当然,全局搜索、大纲视图、拆分编辑器等VScode的基本功能就不用多说了,一定要满足查看源码的需求.如果你对最终的效果还是满意的,那我们就开始配置环境吧!配置基础环境这里使用宿主机Mac+虚拟机UbuntuServer(开启SSH服务)进行环境配置。当然,如果宿主机是Windows环境,配置过程几乎没有区别。下载并解压源码。从kernel.org下载源码,选择你要下载的内核版本,这里我们选择linux-5.0-rc3.tar.gz进行下载。在Linux虚拟机中执行:wgethttps://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.0-rc3.tar.gz下载内核代码。使用:tar-xflinux-5.0-rc3.tar.gz解压内核代码到当前目录。修改inotify参数返回宿主机,在VSCode中安装配置Remote-SSH插件,连接虚拟机后打开内核代码目录作为工作空间。这个时候VSCode加载会很慢,还会产生错误ENOSPC,因为我们导入了整个Linux内核代码,把user_watches资源吃光了。inotify是Linux下监控文件变化的工具。当系统文件发生变化时,它可以向应用层发送通知。我们增加了它可以同时监控的文件数量。打开虚拟机中的/etc/sysctl.conf文件,添加fs.inotify.max_user_watches=524288执行:sudosysctl-p使参数生效。配置全局工具,安装全局工具。globaltool是一款GNU协议下的源代码标记软件(相信标记自己的东西处理的很好,哈哈)。在Ubuntu上使用apt安装,只需要执行命令sudoaptinstallglobal安装全局插件即可。VSCode有现成的插件可以直接使用。我们在VSCode的SSH会话中安装C/C++GNUGlobal插件,然后在内核代码项目/settings.json中新建一个.vscode(如果自定义全局工具的路径,需要显式配置gnuGlobal.globalExecutable和gnuGlobal.gtagsExecutable字段)。如果不知道全局路径,可以使用whichisglobalwhichisgtags来查看。同时,我选择将代码生成的GPATH、GRTAGS、GTAGS文件全部存放在同一个文件夹中,所以明确配置了gnuGlobal.objDirPrefix字段。生成标签在VSCode工作区按F1执行ShowGNUGlobalVersion。如果配置正确,右下角会显示global(GNUGLOBAL)
