如何阅linux内核源码,阅读 Linux 内核源码的正确姿势

bg-219.7a1acf4f.svg

首页 专栏 linux 文章详情

0

bg-219.7a1acf4f.svg

阅读 Linux 内核源码的正确姿势

09641977eaf658ec923ac541a27842e8.png

Constantine3 发布于 2 月 28 日

引言

动机

最近有阅读 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) 。

执行 Rebuild Gtags Database,等待完成后就可以愉快地阅读 Linux 源码了!

linux 内核

阅读 46 更新于 3 月 1 日

收藏

分享

本作品系原创, 采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议

09641977eaf658ec923ac541a27842e8.png

Constantine3

弱鸡

1 声望

0 粉丝 关注作者

0 条评论

得票 时间

9d2d564462b7558f9433bc769da841ba.png

提交评论

09641977eaf658ec923ac541a27842e8.png

Constantine3

弱鸡

1 声望

0 粉丝 关注作者

宣传栏

目录

引言

动机

最近有阅读 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) 。

执行 Rebuild Gtags Database,等待完成后就可以愉快地阅读 Linux 源码了!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值