Vscode + SSH + Clangd 配置, 查看内核源码

最近在用VsCode学习网络编程时,想在写代码的时候能够查看内核源码,看了许多教程,没配成功,但是最终摸索了一种比较方便的方法。

直接展示效果:

前置工作

我虚拟机版本使用的是ubuntu22.04, 确保自己的主机可以通过ssh连接虚拟机,这个网上教程很多,不赘述。

安装 Clangd插件

在插件市场上搜索Clangd,一定要确保主机 和 远程机器都要安装上,然后记得禁用掉C/C++ Extension,因为可能这俩插件会引起冲突。

安装成功后,进入插件设置中

配置Clangd: Arguments, 点击Add Item, 加入下面的配置。

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

接下来,在你的虚拟机/Linux服务器上

安装clangd,bear

bash 复制代码
sudo apt-get update
sudo apt install clangd
sudo apt install bear
sudo apt-get install flex bison

进入/usr/src,查看内核源码版本

我是6.8的,下载对应源码到一个你的工程项目文件夹下,我放在了 /home/chan/kernel-dev,这个路径之后也会用到。

下载源码

使用wget下载对应linux内核源码,如果网速慢,下载不下来,可以自己使用浏览器,复制下面的http链接,大概138M的大小,然后传到你的虚拟机上面。(或者使用这个夸克网盘的链接 https://pan.quark.cn/s/6ec385b561f8)

bash 复制代码
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.8.9.tar.xz

解压这个压缩包

bash 复制代码
tar -xvf linux-6.8.9.tar.xz

cd进入linux-6.8.9,依次运行下面的三条指令,编译整个内核源码(第一个指令运行时间可能较长),最终我们会得到一个compile_commands.json文件,这样就已经配置得差不多了。

bash 复制代码
cd linux-6.8.9/
make defconfig
make modules_prepare
python3 scripts/clang-tools/gen_compile_commands.py

当前我们可以打印一下路径看看,之后就把它作为我们Vscode的项目工程文件。

bash 复制代码
$ pwd
/home/chan/kernel-dev/linux-6.8.9

使用Vscode ssh连接打开该文件夹,作为我们的项目文件夹

第一次打开的时候,记得重启VsCode,确保是第一次打开该项目。

然后一般情况下,我们会看到,vscode下面已经提示clangd在工作了。

如果没有显示的话,可以使用ctrl + shift p, reload一下window, 或者restart一下clangd

可以打开/init/main.c测试一下,main.c建议不要关掉,下次重新加载Vscode看到它clangd就会直接加载。

但是,如果我们实际的项目文件夹跟这个路径不一样怎么办呢?

我的方法是启动路径仍然选择咱们刚才json所在的路径/home/chan/kernel-dev/linux-6.8.9 然后把咱们实际项目文件夹通过Add Folder to Workspace来打开,这个其实本质还是clangd把/home/chan/kernel-dev/linux-6.8.9的内核源码同步过来了,但是这就足够了。

相当于打开了两个文件夹,只是启动文件夹的环境是我们的内核源码。

全部已经配置好了,如果你想下次打开的时候也有这个workspace,记得第一次退出VsCode的时候,会有个提示让你是否保存,选择"YES",下次就可以直接打开了。

可以看到,我们可以进行代码补全,查看函数参数类型,或者查看定义,非常方便!

相关推荐
Julien20043 天前
Docker 容器存储原理(一)
linux·运维·服务器·ssh·学习方法
2501_915909063 天前
移动端开发工具链怎么组合比较好,iOS、Android、跨端三套配置方案
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
Polevne3 天前
C# SFTP客户端实现文件传输
c#·ssh
sunoo-2293 天前
【ARM嵌入式学习笔记Day6】一文打通i.MX6ULL时钟体系:PLL/PFD/预分频+滞回比较器全解析
arm开发·笔记·vscode·单片机·imx6ull·汇编语言
明天…ling3 天前
gitee与vscode远程连接
vscode·gitee
2501_915918413 天前
iOS编程用什么软件好?主流工具Xcode、AppCode、CodeRunner与新兴快蝎对比
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
__pop_4 天前
VSCode Remote SSH 远程连接 glibc 高版本依赖问题
vscode
daxiangxm4 天前
【趣味休息】“围住小猫在线玩”-“困住小猫”,又回来了
数据结构·人工智能·vscode·github·php
星光开发者4 天前
基于Spring Boot的充电桩管理系统的设计与实现-计算机毕设【课程设计】57105
vue.js·spring boot·vscode·mysql·django·php·express
Julien20044 天前
Docker 容器技术的本质
运维·服务器·ssh·学习方法