乐趣区

关于linux:阅读-Linux-内核源码的正确姿势

引言

动机

最近有浏览 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/setting.json(如果自定义了 global 工具的门路的话须要在这里显式地配置 gnuGlobal.globalExecutablegnuGlobal.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 源码了!

退出移动版