当前位置: 首页 > news >正文

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

文章目录

  • 前言
  • 一、环境说明
  • 二、环境安装
    • 1.Vscode安装Remote SSH实现远程访问
    • 2.Vscode安装clangd插件
    • 3.远程linux安装clangd
    • 4.配置Vscode中clangd插件
    • 5.远程linux安装bear
  • 三、编译环境
    • 1.Vscode创建工作区
    • 2.编译linux内核
    • 3.退出Vscode,然后远程连接,重新打开Vscode的工作区
  • 其他内容


前言

在驱动开发工程中,需要查看一些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 生成)来正确解析项目代码。
http://www.dtcms.com/a/307619.html

相关文章:

  • Visual Studio Code (VSCode) 的常用快捷键
  • 33.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--财务服务--记账
  • Shader开发(五)什么是渲染管线
  • 【大模型理论篇】混合思考之自适应思维链
  • day28_2025-07-31
  • 基于京东评论的文本挖掘与分析,使用LSTM情感分析算法以及网络语义分析
  • 【数据结构】算法代码
  • 前端框架Vue3(三)——路由和pinia
  • 分布内侧内嗅皮层的层Ⅱ或层Ⅲ的网格细胞(grid cells)对NLP中的深层语义分析的积极影响和启示
  • vue3.0 +TypeScript 项目中pinia基础语法和使用
  • 【大数据】open_metadata 开源元数据管理平台建设与数据血缘实践
  • 「源力觉醒 创作者计划」开源大模型重构数智文明新范式
  • AI任务相关解决方案12-NLP的15项任务大融合系统:传统NLP与Qwen大模型的深度结合
  • NTLDR源代码分析之从GetSector函数到blread函数
  • 解决 IntelliJ IDEA Build时 Lombok 不生效问题
  • 商旅平台怎么选?如何规避商旅流程中的违规风险?
  • 【未解决】STM32无刷电机驱动电路问题记录
  • .NET Core部署服务器
  • 智慧收银系统开发进销存库存统计,便利店、水果店、建材与家居行业的库存汇总管理—仙盟创梦IDE
  • Spring Boot 异常处理:从全局捕获到优化用户体验!
  • PostgreSQL面试题及详细答案120道(01-20)
  • 解放双手!Report Distro 实现报表自动化分发
  • 微软发布Microsoft Sentinel数据湖国际版
  • SecurityContextHolder 管理安全上下文的核心组件详解
  • 【STM32】HAL库中的实现(一)GPIO/SysTick/EXTI
  • 【运维基础】Linux 计划任务管理
  • AI 安监系统:为工业园安全保驾护航
  • 社会治安满意度调查:为城市安全治理提供精准参考(满意度调查公司)
  • LeetCode 85:最大矩形
  • 光伏热斑误检率↓79%!陌讯多模态融合算法在智慧能源的落地优化