构建高效阅读Kernel源码的环境-VSCode篇

前言

上一篇我们使用vim及其插件搭建了一个类似ide的环境,可以实现跳转等功能,但是个人感觉,还是差点意思,特别是和VSCode对比下来,所以这些年来,基本都是使用VSCode阅读代码了,VSCode的优势明显:

  • 配置方便简单,开箱即用

  • 安装插件极其方便快捷,功能强大

  • 可以同步配置和插件,即使换了电脑,只要登录账号,就可以将配置和插件同步过去

  • 安装vim插件之后,既可以享受VSCode本身的强大,又可以享受vim的飞速编辑

接下来我们就来安装配置VSCode环境,实现更加高效的阅读Kernel源码的目标,利用clangd+compile_commands.json还可以实现精确跳转,阅读代码从未如此高效。

顺便说一下,VSCode有一个强大的远程开发功能,可以实现浏览、编辑远程服务器上的代码,就如同本地一样,不过本文只打算本地部署,需要远程开发的同学可以看我这篇文章:

VSCode远程开发环境配置

安装VSCode

安装VSCode很简单,下载安装包之后,双击即可安装

下面使用命令行进行安装:

wget https://vscode.download.prss.microsoft.com/dbazure/download/stable/848b80aeb52026648a8ff9f7c45a9b0a80641e2e/code_1.100.2-1747260578_amd64.deb
sudo dpkg -i code_1.100.2-1747260578_amd64.deb

一路回车即可安装完成

安装clangd和clangd插件

我们实现精确跳转就是利用clangd和VSCode中的clangd插件完成的

安装clangd

sudo apt install clangd -y

VSCode中安装clangd插件

使用命令打开VSCode

code

然后在插件商店中搜索clangd并安装

生成compile_commands.json文件

在配置VSCode之前,我们先生成对应的compile_commands.json文件

cd debug_kernel/linux-6.12.28
make ARCH=x86 compile_commands.json

配置VSCode

配置clangd插件

在内核源码目录下打开code

cd debug_kernel/linux-6.12.28
code .

之后设置安装的clangd插件:

点击Workspace,因为我们只在内核源码目录下进行配置

点击Clangd: Arguments下的Add Item

输入如下内容:

--compile-commands-dir=./
--header-insertion=never

如图:

--compile-commands-dir=./意思是到当前目录下找compile_commands.json文件

--header-insertion=never意思是不要自动插入包含的头文件,因为这个自动插入头文件有时候会带来麻烦,不如不用,需要的话自己添加必要的头文件

注意clangd path,如果你的clangd没有安装到/usr/bin目录下,请修改一下:

至此,我们配置好了VSCode了,其实上面的配置也可以直接写到.vscode/settings.json文件中:

VSCode的其他配置

在VSCode中输入ctrl+shift+p,然后输入settings,选择Open User Settings (JSON)

其他配置直接参考我的配置吧:

VSCode高效阅读Kernel源码

现在我们就可以高效阅读Kernel源码了,而且可以精确跳转,现在我们打开init/main.c文件,如果操作没有错误的话,在VSCode的左下角,会有clangd进行解析的动作:

解析完成后,我们就可以实现精确跳转了,现在让我们定位到start_kernel函数中,然后试着分别跳转到其中调用的函数:

按F12跳转

直接跳到对应的函数定义处:

再找一个架构相关的函数,看一下是否会跳转到我们的目标架构源文件中:

Nice,果然直接跳到x86源文件中了

至此,我们的VSCode具备了精确跳转的功能了,阅读源码效率大大提高。

VSCode其他妙用

VSCode隐藏其他架构的源文件

VSCode最左侧的Explorer窗口,显示了所有架构的源文件,还显示了编译出的.o等中间文件,而且我们全局搜索时,也会把其他架构同样定义的符号给搜索出来,会影响我们阅读源码,这其实可以通过配置 .vscode/settings.json文件来解决:

VSCode安装vim插件

VSCode的强大已经无须多言,而且使用也方便快捷,但是像我这用使用惯了vim的操作,感觉还是有点难受,两者要是能结合一下,那得有多强大啊,刚好,VSCode中就有vim插件,可以实现在VSCode上使用vim的操作:

安装完vim插件,进行如下配置,当然这是我的习惯,你可以根据你的习惯调整:

    "vim.easymotion": true,
    "vim.searchHighlightColor": "#5f00af",
    "vim.hlsearch": true,
    "vim.highlightedyank.enable": true,
    "vim.highlightedyank.duration": 300,
    "vim.ignorecase": false,
    "vim.replaceWithRegister": true,
    "vim.useSystemClipboard": true,
    "vim.visualstar": true,
    "vim.leader": "<space>",
    "vim.timeout": 600,
    "vim.normalModeKeyBindingsNonRecursive": [

        { "before": ["H"], "after": ["g", "T"], },
        { "before": ["L"], "after": ["g", "t"] },
    ],
        "vim.normalModeKeyBindings": [

        ],
        "vim.commandLineModeKeyBindings": [
        ],
        "vim.commandLineModeKeyBindingsNonRecursive": [

        ],
        "vim.handleKeys": {

        },
        "vim.insertModeKeyBindings": [
        {"before": ["j", "j"], "after": ["<Esc>"]},
        ],
        "vim.insertModeKeyBindingsNonRecursive": [

        ],
        "vim.visualModeKeyBindings": [

        ],
        "vim.visualModeKeyBindingsNonRecursive": [
        {"before": ["p"], "after": ["p", "g", "v", "y"]},
        ],

现在就可以使用vim进行操作了,使用ctrl+]进行函数跳转了,ctrl+o返回,手指不用离开主键盘区了,也不用鼠标了^_^

总结

当然,VSCode还有很多强大的功能和插件,比如强大的远程开发,这里不会再讲这些内容了,需要的同学到这里查看VSCode远程开发环境配置

还可以安装AI插件,遇到难以理解的代码,可以直接问AI,还具备代码插入等功能。

总之,现在我们有了阅读代码和编辑代码的环境了,从下一篇开始,将真正开始debug内核了,折腾起来吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux底层小工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值