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

发布于:2025-08-01 ⋅ 阅读:(17) ⋅ 点赞:(0)


前言

在驱动开发工程中,需要查看一些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查看版本

lubancat@ubuntu:~/code/lubancat_kernel$ clangd --version
clangd version 10.0.0-4ubuntu1 

which clangd查看路径

lubancat@ubuntu:~/code/lubancat_kernel$ which clangd
/usr/bin/clangd

4.配置Vscode中clangd插件

配置1clangd插件的设置【注意这里要切到远程linux下面设置】
在这里插入图片描述
首先在clangd.arguments输入【注意,下面的内容一条一条的添加,之前测试是一次性复制输入,发现不行】

--compile-commands-dir=${workspaceFolder}
--background-index
--completion-style=detailed
--header-insertion=never
-log=info

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

/usr/bin/clangd

5.远程linux安装bear

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

lubancat@ubuntu:~/code/lubancat_kernel$ bear --version
bear 2.4.3

which bear查看路径

lubancat@ubuntu:~/code/lubancat_kernel$ which bear
/usr/bin/bear

三、编译环境

1.Vscode创建工作区

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

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

2.编译linux内核

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的工作区

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

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

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

其他内容

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

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

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

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

依赖条件
需要 compile_commands.json(由 bear 生成)来正确解析项目代码。