使用VSCode进行内核开发
Linux内核并没有任何官方IDE,所以大家都是各显神通,比较常见的就是使用Vim/Emacs结合各种插件,但这种方式普遍存在配置复杂和上手难度高的问题,我个人是不愿意浪费太多时间在IDE上的。碰巧有一款IDE,同样支持大量插件,并且社区活跃,它就是VSCode,所以今天就来看看如何通过各种插件将它打造为高效的内核开发IDE。
远程连接Linux服务器
我们要开发Linux内核,当然最好还是在Linux上进行,除非你的笔记本/台式机就是Linux系统,我们更多的还是使用Windows/Mac连接服务器来完成开发工作。
通过使用Remote - SSH插件,我们可以像在本地一样,在远程服务器上进行开发。
配置SSH连接
1 | # <HOME>/.ssh/config |
设置代码索引和代码补全
这一直是内核开发的老大难问题,因为内核源码过于庞大,以往的补全方案,要么速度快,但不精准,如ctags/cscope;要么精准,但速度慢,如C/C++ IntelliSense。
然而clangd插件的出现,非常好的解决了速度和精确性的问题,但它有一个强依赖:需要使用compile_commands.json
来生成索引数据。好在内核源码树中已经有工具可以为我们生成compile_commands.json
。
安装clangd
1
sudo apt install clangd
生成
compile_commands.json
首先我们需要对内核或模块进行编译,编译成功后,在编译目录执行以下命令
1
./scripts/clang-tools/gen_compile_commands.py
打开
compile_commands.json
,确认不为空。配置clangd插件
1
2
3
4
5
6
7
8
9# Settings > Remote > Extensions > clangd > Arguments
--compile-commands-dir=${workspaceFolder}
--background-index
--completion-style=detailed
--header-insertion=never
-log=info
-pretty
-j=8注意最后的
-j=8
是clangd在生成索引所创建的进程数,通常设置为CPU数量。配置工程
因为clangd使用clang来编译每个文件,如果我们的内核是使用GCC编译的,就会存在一些clang无法识别的编译选项,这些编译选项通常是用来进行代码优化的,所以去掉也不会影响代码索引。
在VSCode中执行命令
>clangd: Open project configuration file
,打开.clangd
文件,加入以下内容1
2
3
4CompileFlags:
Remove:
- -m*
- -f*重启clangd
在VSCode中执行命令
>clangd: Restart language server
。
配置汇编代码高亮
做内核开发时,难免会涉及到一些汇编文件,但是VSCode默认并不对汇编文件进行高亮,因此需要安装插件来解决。
ARM汇编: Arm Assembly
X86汇编: x86 and x86_64 Assembly
MIPS汇编: MIPS Assembly Formatter
LoongArch汇编: LoongArch Assembly
显示代码历史git commit
使用git blame
是经常使用的“甩锅”手段,通过GitLens插件,我们可以实时看到每一行代码来自哪个commit。
配置Vim快捷键
我个人并不是Vim的狂热粉丝,但是Vim的快捷键设定,确实可以让我在大部分时间脱离鼠标和触控板,提高开发效率。通过安装Vim插件,即可立即享受大部分Vim的快捷键操作。