VSCode开发Linux内核代码
VSCode作为Linux kernel源码的开发环境
接下来我们就来安装配置VSCode环境,实现更加高效的阅读Kernel源码的目标,利用clangd+compile_commands.json还可以实现精确跳转,阅读代码从未如此高效。
顺便说一下,VSCode有一个强大的远程开发功能,可以实现浏览、编辑远程服务器上的代码,就如同本地一样。
安装VSCode
安装VSCode很简单,下载安装包之后,双击即可安装。下载地址如下
code.visualstudio.co...
下面使用命令行进行安装:
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
如果系统提供的不是13的版本,建议从github下载安装
github.com/clangd/cl...
VSCode中安装clangd插件
使用命令打开VSCode,然后在插件商店中搜索clangd并安装
生成compile_commands.json文件
在配置VSCode之前,我们先生成对应的compile_commands.json文件
cd linux-imx-4.14
export ARCH=arm
bear -- make zImage -j4
执行后会生成compile_commands.json文件。
配置clangd插件
打开vscode后,打开内核源码目录,在clangd插件配置中,添加如下,每个一行。
–compile-commands-dir=${workspaceFolder}
–background-index
–completion-style=detailed
–header-insertion=never
-log=info
也可以配置在settings.json文件中,内容如下
{
"C_Cpp.default.intelliSenseMode": "linux-gcc-arm",
"C_Cpp.intelliSenseEngine": "disabled",
"clangd.path": "/usr/bin/clangd",
"clangd.arguments": [
"--log=verbose",
"--compile-commands-dir=${workspaceFolder}",
"--background-index",
"--pretty",
"--completion-style=detailed",
"--header-insertion=never"
],
}
不同CPU构架有区别,在workspace目录下创建一个.clangd文件,ARM32平台使用下面配置
CompileFlags:
Add: --target=armv7-a
ARM64位平使用下面的配置
CompileFlags:
Add: --target=aarch64-linux-gnu
Remove: -mabi=lp64
CompileFlags:
Add:
[
"-I/usr/src/linux-headers-5.15.0-46/", # 配置linux源码目录
"-I./include", # 配置包含目录
"-DDEBUG", # 配置宏,方便调试模式切换
"-Wunused-result", # 配置 clang 参数
]
Remove: # 移除 clang 编译时的参数,因为clangd会使用compile_commands.json这个文件的编译参数,但是这个文件是gcc适用的,所以需要移除clang不适用的参数
[
"-mpreferred-stack-boundary*",
"-mindirect-branch=thunk-extern",
"-mindirect-branch-register",
"-mfunction-return=thunk-extern",
"-fno-allow-store-data-races",
"-fconserve-stack",
"-mrecord-mcount",
]
Compiler: clang # 注意,内核使用的是gcc来编译代码的,但是此处配置的是使用clang来编译llvm IR进行语法提示,两者是不一样的
Diagnostics:
ClangTidy:
CheckOptions:
readability-identifier-naming.VariableCase: CamelCase
禁用C/C++ extension有代码跳转功能的相关插件,否则与clangd可能有冲突。
作者:SteveChen 创建时间:2025-05-22 09:54
最后编辑:SteveChen 更新时间:2025-05-24 10:08
最后编辑:SteveChen 更新时间:2025-05-24 10:08