0%

VS Code 搭建 Linux Kernel 开发环境 - 2021版

VS CODE 是当今最流行的IDE之一, 其丰富的插件功能使得VS CODE可以面向多种应用场景.

本文介绍一种利用VS CODE的C/C++ Intellisense插件 + vscode-linux-kernel搭建的Linux kernel开发环境.

此方案个人认为是迄今为止(2021年9月份)最好用的VS CODE内核开发IDE方案, 特别是如果你还没有跳入vim或者emacs的坑的话.

操作系统环境

本文使用的是Ubuntu/Debian系操作系统. 理论上Windows也可以使用此方案,不过考虑到Windows文件系统的特性,理论上应该没有Linux上的好用。

安装 VS Code

这句是废话.

安装 C/C++ Intellisense

插件商店直接安装,略过.

下载安装内核源码并执行一次编译

此步骤是为了得到内核编译之后的*.o.cmd文件, 此文件内包含编译对应的目标文件需要的编译命令, 源文件和包含的头文件.

安装vscode-linux-kernel

在编译后的内核源码根目录下, 删除或者备份.vscode目录,然后执行:

1
git clone git@github.com:amezin/vscode-linux-kernel.git .vscode

如果你内核的目标平台不是x64, 需要修改.vscode/c_cpp_properties.json里的intelliSenseMode为:

  • gcc-x86
  • gcc-x64
  • gcc-arm
  • gcc-arm64

中的一个. 例如你编译内核的目标平台是arm64的开发板, 就需要把它改为gcc-arm64.

生成编译命令数据库

1
python .vscode/generate_compdb.py

这一步执行完毕之后,会在内核代码数的根目录生成compile_commands.json文件,此文件中记录了编译内核时所需要的所有编译命令. 然后这个文件通过c_cpp_properties.jsoncompileCommands选项传给C/C++ Intellisense插件, 后续插件会根据此数据库构建它的代码分析和跳转.

启动VS Code

1
code .

IDE启动后会花一些时间来同步后台数据库, 你会在Code的状态栏看到一个圆柱形的图标, 把鼠标悬停在上面可以显示进度.

根据CPU和磁盘的性能, 此阶段所花费的时间不等. 根据我个人的经验, 单核1.8G的CPU,SATA SSD的情况下, 大概要花费20分钟.

同步结束之后, 就可以愉快的使用跳转和搜索引用的功能了.

搜索引用

鼠标右键点击任意函数或者变量, 然后选择Find All Reference[Alt+Shift+F12]查找引用. 结果会显示在左侧, 一共有两块:

  • REFERENCE
  • C/C++: 其他引用结果

上面的那块也可以称之为活动引用. 一般来言, 活动引用是最需要关注的, 因为这些引用是通过参与编译的文件搜索出来的.

下面的那块包含了非活动引用, 注释引用, 字符串引用等.

Out-of-tree 编译的内核或者模块

Out-of-tree编译的内核和模块的配置与上面的配置大同小异, 请直接参考官方文档Out-of-tree buildsOut-of-tree module development, 此处不再赘述.