文章目录
前言
在驱动开发工程中,需要查看一些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插件
配置1
clangd插件的设置【注意这里要切到远程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的输出终端哪里一直报错
解决方法1
clangd不能跳转,并报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 生成)来正确解析项目代码。