内核源码+vscode+bear+clang实现函数任意跳转,无缝跳转,无缝阅读,无缝开发

一、准备工作

1、内核源码版本选择

务必有一份能编译通过的《内核源码》,本次选择5.10版本的。

sh 复制代码
#说明: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

sh 复制代码
sudo apt-get install -y bear
bear --version #验证bear有无安装好,出现版本号则正常

2.2、内核源码目录操作

进入该内核源码目录

sh 复制代码
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的左下角将看到类似如下提示:

sh 复制代码
# 数字可以不是下面所写的,仅供案例参考
<转圈> indexing:98/3695

当索引结束,即可使用。

2.5、工程目录操作

复制一份 compile_commands.json 文件到当前工程目录下即可。


三、clang+源码内置脚本

3.1、内核源码目录操作

​ 1.1、进入该内核源码目录,弄配置文件

sh 复制代码
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、进入该内核源码目录,编译内核源码

sh 复制代码
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、产物

sh 复制代码
# 在内核源码所在目录下执行:
python scripts/clang-tools/gen_compile_commands.py
# 生成 compile_commands.json 文件

3.4、VSC操作

直接打开你的vscode,用vsc仅仅打开内核源码所在目录,然后任意点击一个C代码文件将触发clang,在VSC的 终端 页码里点击"输出",然后选择"clangd",即可看到触发clang的过程。同时,在VSC的左下角将看到类似如下提示:

sh 复制代码
# 数字可以不是下面所写的,仅供案例参考
<转圈> 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内核源码》

https://blog.csdn.net/weixin_40209493/article/details/128175003?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-128175003-blog-135051470.235v43pc_blog_bottom_relevance_base5&spm=1001.2101.3001.4242.1&utm_relevant_index=1

相关推荐
摇滚侠2 小时前
Spring Boot 3零基础教程,IOC容器中组件的注册,笔记08
spring boot·笔记·后端
程序员小凯4 小时前
Spring Boot测试框架详解
java·spring boot·后端
程序猿小三4 小时前
Linux下基于关键词文件搜索
linux·运维·服务器
虚拟指尖5 小时前
Ubuntu编译安装COLMAP【实测编译成功】
linux·运维·ubuntu
你的人类朋友5 小时前
什么是断言?
前端·后端·安全
刘某的Cloud6 小时前
parted磁盘管理
linux·运维·系统·parted
程序员小凯6 小时前
Spring Boot缓存机制详解
spring boot·后端·缓存
啊?啊?6 小时前
4 解锁 Linux 操作新姿势:man、grep、tar ,创建用户及添加权限等 10 大实用命令详解
linux·服务器·实用指令
程序员老舅6 小时前
干货|腾讯 Linux C/C++ 后端开发岗面试
linux·c语言·c++·编程·大厂面试题
爱倒腾的老唐6 小时前
24、Linux 路由管理
linux·运维·网络