一、准备工作
1、内核源码版本选择
务必有一份能编译通过的《内核源码》,本次选择5.10版本的。
#说明:5.10版本的《内核源码》里,在 scripts/clang-tools 目录下有《gen_compile_commands.py》文件,这个脚本也能生成《compile_commands.json》文件。
已确定4.19版本没有,请尽量选择高版本的内核源码。
2、VScode
2.1、安装 Clangd 插件,确保安装到已经远程连接的虚拟机里。
以下简称:VSC
经过别的文章提示,建议务必禁止vsc插件为:<C/C++ Extension>。
二、clang+bear
2.1、安装bear
sudo apt-get install -y bear
bear --version #验证bear有无安装好,出现版本号则正常
2.2、内核源码目录操作
进入该内核源码目录
bear make ARCH=arm64 CROSS_COMPILE=/home/topeet/Linux/rk3568_linux_5.10/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- rockchip_linux_defconfig
#或者用下面这个
bear make ARCH=arm64 CROSS_COMPILE=/home/topeet/Linux/rk3568_linux_5.10/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- rockchip_defconfig
bear make ARCH=arm64 CROSS_COMPILE=/home/topeet/Linux/rk3568_linux_5.10/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- -j8
2.3、产物
会在kernel文件夹下生成 compile_commands.json 文件。
2.4、VSC操作
直接打开你的vscode,用vsc仅仅打开内核源码所在目录,然后任意点击一个C代码文件将触发clang,在VSC的 终端 页码里点击“输出”,然后选择“clangd”,即可看到触发clang的过程。同时,在VSC的左下角将看到类似如下提示:
# 数字可以不是下面所写的,仅供案例参考
<转圈> indexing:98/3695
当索引结束,即可使用。
2.5、工程目录操作
复制一份 compile_commands.json 文件到当前工程目录下即可。
三、clang+源码内置脚本
3.1、内核源码目录操作
1.1、进入该内核源码目录,弄配置文件
make ARCH=arm64 CROSS_COMPILE=/home/topeet/Linux/rk3568_linux_5.10/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- rockchip_linux_defconfig
1.2、进入该内核源码目录,编译内核源码
make ARCH=arm64 CROSS_COMPILE=/home/topeet/Linux/rk3568_linux_5.10/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- -j8
3.2、产物
# 在内核源码所在目录下执行:
python scripts/clang-tools/gen_compile_commands.py
# 生成 compile_commands.json 文件
3.4、VSC操作
直接打开你的vscode,用vsc仅仅打开内核源码所在目录,然后任意点击一个C代码文件将触发clang,在VSC的 终端 页码里点击“输出”,然后选择“clangd”,即可看到触发clang的过程。同时,在VSC的左下角将看到类似如下提示:
# 数字可以不是下面所写的,仅供案例参考
<转圈> indexing:98/3695
当索引结束,即可使用。
3.5、工程目录操作
复制一份 compile_commands.json 文件到当前工程目录下即可。
四、参考文档
1、《【vscode基于clangd实现Android/Linux代码跳转】》
https://huaweicloud.csdn.net/654861dd91098a1041274b84.html
2、《看代码神器:vscode+clangd轻松实现linux内核代码跳转(图文并茂)》
https://blog.csdn.net/ludaoyi88/article/details/135051470
3、《VSCode+clangd阅读linux内核源码》