【linux驱动开发】Vscode + Remote SSH + clangd + bear=内核源码阅读环境搭建

文章目录


前言

在驱动开发工程中,需要查看一些API的参数,但是使用vscode编辑器的时候,不能像source insight一样查看linux源码查看,另外自己习惯使用vscode,查看网上方法发现可以使用vscode+clangd+bear 实现内核源码快速访问,其中有些小问题这里记录供大家参考。


一、环境说明

1.vscode运行在Windows环境

2.Linux虚拟机是在Windows环境下通过VMWare安装,版本为Ubuntu20.04

二、环境安装

1.Vscode安装Remote SSH实现远程访问

vscode安装Remote SSH实现远程访问linux服务器
参考链接1
参考连接2

2.Vscode安装clangd插件

注意:确保在第一步已经使用Remote SSH远程连接到linux服务器在进行下面这步

在vscode的插件搜索栏clangd插件,安装到远程linux中【192.168.198.128】,可以在插件栏看到是否安装到linux中,并且将C/C++插件给卸载掉,否则会冲突

3.远程linux安装clangd

方法1:网上的其他方法是,在第2步vscode安装好clangd插件之后,vscode会自动在linux端安装clangd服务【但是这个过程很慢,除非科学上网】
方法2:去github拉取clangd文件,拷贝到linux中解压【这个方法由于公司电脑原因,不能使用】
方法3:直接在linux上输入安装指令:sudo apt-get install clangd或者sudo apt install clangd【下图是clangd官方给出的方法,安装的是clangd-12版本,这里我实测可以直接安装clangd,不用指定版本】

检查linux上clangd是否安装成功,如下输入:
clangd --version查看版本

bash 复制代码
lubancat@ubuntu:~/code/lubancat_kernel$ clangd --version
clangd version 10.0.0-4ubuntu1 

which clangd查看路径

bash 复制代码
lubancat@ubuntu:~/code/lubancat_kernel$ which clangd
/usr/bin/clangd

4.配置Vscode中clangd插件

配置1clangd插件的设置【注意这里要切到远程linux下面设置】

首先在clangd.arguments输入【注意,下面的内容一条一条的添加,之前测试是一次性复制输入,发现不行】

bash 复制代码
--compile-commands-dir=${workspaceFolder}
--background-index
--completion-style=detailed
--header-insertion=never
-log=info

然后在clangd.path输入【这里根据自己的路径】

bash 复制代码
/usr/bin/clangd

5.远程linux安装bear

在linux端直接输入:sudo apt-get install bear libear ,这里如果输入sudo apt-get install bear报错
检查linux上bear是否安装成功,如下输入:
bear --version查看版本

bash 复制代码
lubancat@ubuntu:~/code/lubancat_kernel$ bear --version
bear 2.4.3

which bear查看路径

bash 复制代码
lubancat@ubuntu:~/code/lubancat_kernel$ which bear
/usr/bin/bear

三、编译环境

1.Vscode创建工作区

使用vscode将linux内核源码和驱动源码放在俩个文件夹下,把这俩个文件夹放在一个工作区,方法在编写驱动程序的时候,可以直接访问linux源码。工作区包含的文件夹如下

bash 复制代码
1.lubancat_kerner #用来存放linux内核
2.linux_driver    #用来存放驱动源码

2.编译linux内核

bash 复制代码
make clean
bear make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- lubancat2_defconfig
bear make ARCH=arm64 -j4 CROSS_COMPILE=aarch64-linux-gnu-

①等待编译完成【时间有点长,可以喝杯茶】,完毕之后会在linux源码的根目录路径下多出一个compile_commands.json文件,这个文件应该很多行【如果很小,说明编译有问题,按照上面清除之后重新编译】。

②编译完成后,这里我遇到一个问题在vscode的输出终端哪里一直报错
解决方法1clangd不能跳转,并报failed: Couldn't build compiler instance错误
解决方法2 clangd:Couldn't build compiler instance

③这里前人的解决方法是,创建一个.clangd文件输入配置信息,但是我试了下发现不太行,而且还要重新编译linux内核【还在等很久实在受不了】
解决方法3------我的方法想了下这里不就是把compile_commands.json这个文件中的-mabi=lp64去掉吗,于是直接在compile_commands.json文件中按下ctrl+F搜索-mabi=lp64,然后用空白内容替换不就行了,直接简单暴力】

3.退出Vscode,然后远程连接,重新打开Vscode的工作区

工作区存放的文件夹如下:

bash 复制代码
1.lubancat_kernel【这是我放linux内核源码的目录】
2.linux_driver【这是我放驱动源码的目录】

然后,在linux内核源码和驱动源码中的头文件、函数、变量就可以直接使用ctrl+鼠标左键进行跳转,这样简直泰裤啦!!!

其他内容

bash 复制代码
1. bear 的作用
核心功能
生成 compile_commands.json 文件(编译数据库),记录项目编译时的所有命令、参数和文件路径。

为什么需要它?
C/C++ 项目通常通过 Makefile、CMake 等构建系统编译,IDE 无法直接获知每个文件的编译规则。

compile_commands.json 明确告诉工具(如 clangd)如何解析每个源文件(包括头文件路径、宏定义等)。
bash 复制代码
2. clangd 的作用
核心功能
C/C++ 语言服务器(Language Server Protocol, LSP),为编辑器(如 VSCode、Vim)提供:代码补全、跳转到定义、实时错误检查、代码重构、文档悬停提示

为什么需要它?
传统的 C/C++ 插件(如 VSCode 的 C/C++ 插件)基于文本匹配,分析能力有限。clangd 基于 LLVM/Clang,能像编译器一样精准理解代码语义。

依赖条件
需要 compile_commands.json(由 bear 生成)来正确解析项目代码。
相关推荐
猪脚踏浪5 小时前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠21 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush421 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5201 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩1 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
古城小栈1 天前
Unix 与 Linux 异同小叙
linux·服务器·unix
凡人叶枫1 天前
Effective C++ 条款42:了解 typename 的双重意义
java·linux·服务器·c++
2601_961875241 天前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant
java_cj1 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes
lsyeei1 天前
linux 系统目录详解
linux·运维·服务器