WSL2安装Ubuntu及clangd配置

一、前言

WSL2 的全称是 Windows Subsystem for Linux 2 (适用于 Linux 的 Windows 子系统第二代)。简单来说,它是一项由微软开发的技术,让你能够在 Windows 操作系统上直接、无缝地运行一个真正的 Linux 环境,而不需要安装笨重的双系统或传统的虚拟机(如 VMware、VirtualBox)。

它在底层使用了一个高度轻量级的 Hyper-V 虚拟机 ,并在里面运行了一个由微软维护和定制的真正的 Linux 内核

二、 开启 Windows 虚拟化支持

在安装之前,必须确保你的 Windows 已经开启了硬件虚拟化。

  1. 右键点击任务栏,打开任务管理器

  2. 点击"性能"选项卡,在CPU一栏查看右下角的虚拟化是否显示为"已启用"。

    如果未启用,需进入 BIOS 开启 Intel VT-x 或 AMD-V。

三、安装命令

wsl --install

  • 注意 :这个命令会自动安装 WSL2 核心组件以及默认的 Ubuntu 分发版。

  • 如果系统提示已安装,或者你想指定版本,可以使用 wsl --install -d Ubuntu-22.04

四、重启与初始化

  • 命令执行完毕后,必须重启电脑

  • 重启后,会弹出一个 Linux 终端窗口,等待几分钟进行解压。

  • 设置用户名和密码

注意:有可能重新后并不会有linux中断,这样的话只有手动打开wsl窗口重新执行安装命令:
wsl --install -d Ubuntu-22.04

避坑问题

检查 WSL 版本

wsl -l -v

如果 VERSION 下方显示的是 1,请执行 wsl --set-version Ubuntu 2

限制内存占用(防卡死)

WSL2 默认会占用 Windows 80% 的内存,编译内核时可能会把宿主机带崩。

  1. 在 Windows 中按 Win + R,输入 %UserProfile%

  2. 新建一个名为 .wslconfig 的文本文件(注意前面有个点)。

  3. 写入以下内容(假设你电脑 32G 内存,给 Linux 分 16G):

复制代码
[wsl2]
memory=16GB 
processors=8

五、clangd配置

clangd配置是为了让我们更好的去阅读linux内核源码,再次自己的linux内核编译完成。

5.1环境配置

vscode安装clangd插件。(注意是在wsl远程环境下安装的插件,不是本地)

ubuntu需要安装clangd类似于服务器的概念:

sudo apt update sudo apt install clangd -y

5.2收集编译命令

方法一

执行内核自带的脚本,搜集所有编译命令

python3 ./scripts/clang-tools/gen_compile_commands.py

方法二

从 Linux 5.x 版本开始,内核的 Makefile 里其实已经内置了生成 Clangd 索引文件的专门命令:

export ARCH=arm64

export CROSS_COMPILE=aarch64-linux-gnu-

make compile_commands.json

5.3解决交叉编译爆红

由于我们是交叉编译(在 x86 电脑上为 ARM64 编译),Clangd 默认会用本机的 x86 编译器去寻找头文件。为了让跳转 100% 完美,我们需要给 Clangd 写一个配置文件。

例如在你的内核源码根目录(~/rk3588/kernel/),新建一个名叫 .clangd 的文本文件,把下面这段代码复制进去并保存:

CompileFlags:

告诉 Clangd,我们是在为 ARM64 架构编译

Add: ["--target=aarch64-linux-gnu", "-Wno-everything"]

允许 Clangd 去探测交叉编译器的内部头文件路径

Compiler: aarch64-linux-gnu-gcc

如果由于你裁剪或某些特殊配置导致 make compile_commands.json 报错或仍然没有生成,我们还有一个在原厂被誉为"万能拦截器"的神器:bear

sudo apt install bear -y

bear -- make Image dtbs -j28

注意vscode再执行终端命令时,确保是在ubuntu环境下,而不是在本地。

也需要将C/C++的intense功能关闭

可能会遇到的报错及无法跳转的问题

复制代码
[object Object]

I[16:54:50.640] <-- textDocument/codeAction(37)

I[16:54:50.640] --> reply:textDocument/codeAction(37) 0 ms, error: invalid AST

I[16:54:50.640] --> textDocument/clangd.fileStatus

[Error - 4:54:50 PM] Request textDocument/codeAction failed.

[object Object]

I[16:54:50.703] <-- textDocument/definition(38)

I[16:54:50.703] --> reply:textDocument/definition(38) 0 ms, error: invalid AST

I[16:54:50.703] --> textDocument/clangd.fileStatus

[Error - 4:54:50 PM] Request textDocument/definition failed.

[object Object]

compile_commands.json 7.7MB 的导航图里,全都是写给 gcc 看的编译参数。但是 clangd 底层用的是 clang 引擎。Linux 内核里有大量极其偏门的 GCC 专属参数(比如 -fconserve-stack 等)。当 clangd 读到这些它根本不认识的参数时,它的解析器直接就"脑死亡"了,连树都建不起来,于是抛出 invalid AST

要彻底制服它,我们需要在项目根目录建一个配置文件(.clangd),专门把那些导致崩溃的参数剔除掉。

bash 复制代码
CompileFlags:
  # 强行指定交叉编译器的名字,让 clangd 去找它的头文件
  Compiler: aarch64-linux-gnu-gcc
  # 告诉 clangd 我们的目标架构,并关掉所有烦人的警告
  Add: 
    - "--target=aarch64-linux-gnu"
    - "-Wno-everything"
  # 极其关键:剔除导致 clangd 解析崩溃的 GCC 专属参数!
  Remove: 
    - "-fconserve-stack"
    - "-fno-allow-store-data-races"
    - "-mgeneral-regs-only"
    - "-Wno-psabi"
    - "-mabi=lp64"
    - "-fno-var-tracking-assignments"

修改 VS Code 的 settings.json 参数格式

  1. Ctrl + Shift + P,输入 Open Remote Settings

  2. 选择 首选项: 打开远程设置 (WSL: Ubuntu-22.04) (JSON)

  3. 确保你的 clangd.arguments 是这样的(特别是 --query-driver 的路径,为了防止通配符失效,我们直接写死绝对路径):

bash 复制代码
{
    "clangd.arguments": [
        "--background-index",
        "--query-driver=/usr/bin/aarch64-linux-gnu-gcc",
        "--log=verbose"
    ]
}

既然换了配置文件,必须再次抹除它的记忆,否则它还是会直接抛出之前的 invalid AST 缓存

执行:

bash 复制代码
rm -rf .cache/clangd

重启VScode

相关推荐
辰风沐阳2 小时前
OpenClaw 安装教程(Ubuntu 24.04 Desktop)
linux·ubuntu
嘿嘿嘿x33 小时前
Linux记录过程
linux·开发语言
程序猿编码4 小时前
一个授予普通进程ROOT权限的Linux内核级后门:原理与实现深度解析
linux·运维·服务器·内核·root权限
小夏子_riotous4 小时前
openstack的使用——9. 密钥管理服务Barbican
linux·运维·服务器·系统架构·centos·云计算·openstack
六点的晨曦5 小时前
VMware安装Ubuntu的记录
linux·ubuntu
w6100104666 小时前
CKA-2026-Service
linux·服务器·网络·service·cka
HXQ_晴天6 小时前
castor什么时候已有的 .cdh 数据可以直接用,不需要重新从 root 转换?
linux
Mapleay6 小时前
Ubuntu 源的重要性!之 libgmp-dev 无法安装
linux·服务器·windows
Benszen6 小时前
Linux容器:轻量级虚拟化革命
java·linux·运维
问简6 小时前
ubuntu 字体相关问题
运维·服务器·ubuntu