利用clangd阅读linux源码
前提步骤
在上篇【利用qemu启动linux吧】中描述了怎样编译linux内核,内核中有许许多多的宏,普通跳转很容易跳到云里雾里,利用内核原生的工具和clangd容易让我们完成一个完美的跳转工具。
- vscode
- 编译好的linux内核
- sudo apt-get install clangd
生成索引文件
clangd利用compile_commands.json作为索引文件的来源,其生成方式有很多种,本文利用原生内核的脚本生成;
- 在之前直接在源码目录下执行make,导致编译产物散落在各个目录下,我们可以利用编译选项来归类到某个目录下;
make O=output defconfig
make O=output menuconfig
make O=output -j$(nproc)
O后面接输出路径,通过上面的命令可以将编译产物输出到output文件夹下
2. 利用gen_compile_commands.py和上面的编译产物生成符号表信息
gen_compile_commands.py文件在低版本的kernel可能没有(kernel-4.9上就没有),可以在高版本的kernel中下载一个,本文用的是6.6kernel中的文件去解析4.9的kernel也是可以的,该文件的路径在scripts/clang-tools/目录下,利用python3来执行;【注意在要解析的源码目录下执行】
python3 gen_compile_commands.json -d 产物路径
执行完毕之后,即可在目录下生成compile_commands.json文件,clangd插件利用该文件进行解析,可以避免非编译代码导致的跳转混乱。
正确执行上述命令之后,compile_commands.json文件不为空;
配置vscode
【首先禁掉Micorsoft C/C++插件】

- 在源码所在的服务器安装clangd
sudo apt-get install clangd
-
在本地和服务器端安装clangd插件

-
重启vscode之后,加载源码目录,目录下有compile_commands.json文件,下面有插件运行的标记,此时即可实现代码跳转了

-
注意
如果出现不能跳转的情况,查看vscode的output的输出,如果出现" Couldn’t build compiler instance"的报错,在源码目录下创建.clangd文件,在文件中添加如下内容:
CompileFlags:
Remove: -mabi=lp64
这是因为clang不支持API ‘lp64’ 这个参数
重启vscode,即可实现跳转。
547

被折叠的 条评论
为什么被折叠?



