内核源码+vscode+bear+clang实现函数任意跳转,无缝跳转,无缝阅读,无缝开发
一、准备工作
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内核源码》
内核源码+vscode+bear+clang实现函数任意跳转,无缝跳转,无缝阅读,无缝开发的更多相关文章
- Linux内核源码分析方法
一.内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次.如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径.我们都 ...
- 【转】Linux内核源码分析方法
一.内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次.如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径.我们都 ...
- Linux内核源码分析方法_转
Linux内核源码分析方法 转自:http://www.cnblogs.com/fanzhidongyzby/archive/2013/03/20/2970624.html 一.内核源码之我见 Lin ...
- 鸿蒙内核源码分析(进程回收篇) | 老父亲如何向老祖宗临终托孤 ? | 百篇博客分析OpenHarmony源码 | v47.01
百篇博客系列篇.本篇为: v47.xx 鸿蒙内核源码分析(进程回收篇) | 临终前如何向老祖宗托孤 | 51.c.h .o 进程管理相关篇为: v02.xx 鸿蒙内核源码分析(进程管理篇) | 谁在管 ...
- Linux内核源码分析--内核启动之(6)Image内核启动(do_basic_setup函数)(Linux-3.0 ARMv7)【转】
原文地址:Linux内核源码分析--内核启动之(6)Image内核启动(do_basic_setup函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://bl ...
- Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7)【转】
原文地址:Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.c ...
- 鸿蒙内核源码分析(GN应用篇) | GN语法及在鸿蒙的使用 | 百篇博客分析OpenHarmony源码 | v60.01
百篇博客系列篇.本篇为: v60.xx 鸿蒙内核源码分析(gn应用篇) | gn语法及在鸿蒙的使用 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙 ...
- 鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程 | 百篇博客分析OpenHarmony源码 | v59.01
百篇博客系列篇.本篇为: v59.xx 鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿 ...
- 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视GCC编译全过程 | 百篇博客分析OpenHarmony源码| v57.01
百篇博客系列篇.本篇为: v57.xx 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视编译全过程 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙 ...
- 鸿蒙内核源码分析(汇编基础篇) | CPU在哪里打卡上班? | 百篇博客分析OpenHarmony源码 | v22.01
百篇博客系列篇.本篇为: v22.xx 鸿蒙内核源码分析(汇编基础篇) | CPU在哪里打卡上班 | 51.c.h .o 硬件架构相关篇为: v22.xx 鸿蒙内核源码分析(汇编基础篇) | CPU在 ...
随机推荐
- 使用image-syncer镜像同步工具将阿里云镜像仓库镜像迁移至私有Harbor
借助于阿里云开源的镜像同步工具image-syncer实现harbor及阿里云镜像仓库之间的镜像迁移 下载镜像同步工具 curl -fL "https://wiseo-generic.pkg ...
- Win32 滚动条控件
1.创建控件 HWND hScrollBar = ::CreateWindow( WC_SCROLLBAR, //控件类名 NULL, ...
- Diskpart 操作
DiskPart 是 Windows 操作系统中的一个命令行工具,用于管理磁盘分区.它可以创建.删除.格式化和调整分区大小,还可以设置活动分区等.以下是一些常用的 DiskPart 命令和操作步骤. ...
- c++学习笔记(三):函数++
函数PLUS 函数默认参数 在c++中,函数的形参列表中的形参是可以有默认值的.调用函数时,如果未传递参数的值(传入参数为空),则会使用默认值,如果指定了值,则会忽略默认值,使用传递的值. 语法:返回 ...
- Java基础 韩顺平老师的 泛型 的部分笔记
553,泛型引入 package com.hspedu.list_; import java.util.*; import java.util.concurrent.CompletionService ...
- spark 先groupby 再从每个group里面选top n
import spark.implicits._ val simpleData = Seq(("James","Sales","NY",90 ...
- 9.5内网横向&代理&隧道
Socks代理思路: 工具:nps.frp.ngrok.reGeorg.sockscap64.earthworm.proxifier.proxychains 知识点 1.内外网简单知识 2.内网1和内 ...
- Serilog文档翻译系列(二) - 设置AspNetCore应用程序
Serilog 日志记录适用于 ASP.NET Core.此包将 ASP.NET Core 的日志消息通过 Serilog 进行路由,使你可以将有关 ASP.NET 内部操作的信息写入与应用程序事件相 ...
- 深度解读:Spring.3版本自动装配机制的演变与实践
前言 今天,我们将开启对Spring-AI系列源码的讲解.请大家不急不躁,我会逐步深入,每次专注于一个知识点,以防让人感到困惑. 首先,源码的讨论自然离不开自动装配.有人可能会问,之前已经讲解过这个内 ...
- WiFi基础(四):WiFi工作原理及WiFi接入过程
liwen01 2024.09.16 前言 802.11 无线 WiFi 网有三类帧:数据帧.管理帧.控制帧.与有线网相比,无线 WiFi 网会复杂很多.大部分应用软件开发对 WiFi 的控制帧和管理 ...