[嵌入式Linux] 配置WSL2 Ubuntu24.04 连接USB设备 识别SD卡

IMX6ULL的程序烧录可以通过官方的烧录工具直接烧录到SD卡中, 但是需要在Linux环境下运行烧录脚本,这就需要SD卡可以被WSL2识别到。而WSL2中连接外部usb存储设备存在两个坑

1.WSL2本质是一个虚拟机,无法直接访问宿主机的USB设备。

2.WSL2的内核没有加入USB存储设备的驱动

我们来逐一解决

系统:Win11 23H2

WSL2: Ubuntu24.04

一、WSL连接USB设备

通过查阅资料,发现微软提供了usbipd-win来解决WSL连接usb的问题

usbipd-win:USB/IP项目旨在开发一种通用的通过IP网络共享USB设备的系统。为了让计算机之间能够共享USB设备并完全发挥它们的功能。实现的方式是用TCP将USB封装一下,再通过网络传输。

1.在windows中安装usbipd

  打开管理员终端,使用如下命令安装usbipd,安装完成后重启计算机。

winget install --interactive --exact dorssel.usbipd-win

2.在Ubuntu安装usbipd

  进入Ubuntu中,键入如下命令,安装所需工具。安装前先更新最新的包信息索引列表。

sudo apt update
sudo apt-get install usbutils hwdata linux-tools-generic
sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*-generic/usbip 20

  安装完成后在windows终端中重启wsl

wsl --shutdown
wsl

3.验证

  插入usb设备,windows终端中输入usbipd list,列出所有连接到Windows的usb设备

usbipd list

  

  我插入的是SD卡,也就是BUSID为2-3的设备,可以看到状态为Not shared,未分享。下面键入命令usbipd bind -b <busid>来分享此设备

usbipd bind -b <busid>

  

  状态变为Shared后,键入命令usbipd attach --wsl -b <busid>,将设备添加到WSL中

usbipd attach --wsl -b <busid>

   

  若添加不成功则重新共享,多试几次,直到状态变为Attached。添加成功后在ubuntu中键入lsusb命令,获取USB设备列表,查看是否添加成功。

lsusb

  

  发现ID与windows中的USB大容量存储设备一致,说明WSL中已经可以识别到这个USB。至此我们已经成功了一半。

  通过sudo fdisk -l命令,列出所有Ubuntu识别到的磁盘分区表。

sudo fdisk -l

  发现分区表中并未如预期出现ssd设备,这是因为WSL的内核中默认并未添加相关的USB驱动,需要我们重新编译一下WSL内核,加入USB驱动。

4.扩展(与本文主要内容无关)

#从WSL中断开指定的usb
usbipd detach --busid <busid>

#停止共享指定的usb设备
usbipd unbind -b <busid>

二、WSL添加USB驱动

1.从WSL2的内核仓库中获取内核源码,并安装必要工具

  将内核源码clone到Ubuntu中。

git clone https://github.com/microsoft/WSL2-Linux-Kernel.git

  注意,源码包当前分支默认内核版本和最新的Linux内核相同,若使用的不是Ubuntu最新版本(Ubuntu24.04),还需在下载完成后执行如下命令,checkout对应的内核版本。

cd WSL2-Linux-Kernel
git checkout linux-msft-wsl-$(uname -r | cut -d- -f1)

  安装必要的编译工具,安装前先更新最新的包信息索引列表。

sudo apt update
sudo apt install libncurses-dev build-essential flex bison libssl-dev libelf-dev dwarves

2.修改内核编译选项,编译WSL内核

  在源码Makefile所在目录中执行make menuconfig,编辑内核配置文件

make menuconfig KCONFIG_CONFIG=Microsoft/config-wsl

  进入 Device Drivers -> USB support -> Support for Host-side USB ,选中 USB Mass Storage support(* 号是直接编译进内核,M 是编译为内核模块,内核模块需要手动加载)

  把下面弹出来的一堆驱动都选上*,保存完之后就可以退出了,注意左上角的内核版本,之后验证时会用到。

  键入如下命令,开始编译内核,编译完成的内核是bzImage文件,文件名称在编译命令中可配置,编译出的内核文件在arch/x86/boot/文件夹下。编译完成后将编译好的内核copy到windows目录。

make -j$(nproc) bzImage KCONFIG_CONFIG=Microsoft/config-wsl

3.修改wsl配置文件,加载指定的内核

  修改用户目录(C:\Users\{username})下的.wslconfig文件(没有则新建),添加如下内容,其中的<bzImage path>替换为刚刚copy到windows的内核所在文件路径。

[wsl2]
kernel=<bzImage path>

4.验证结果

  首先在Windows终端中重启WSL

wsl --shutdown
wsl

  进入Ubuntu后输入uname -r命令,查看当前内核版本,是否与编译的内核版本对应(编译的内核版本可在前文中选择USB驱动的图片中找到)。

uname -r

  

  可以看到获取到的内核版本与编译的版本一致。再次将SD卡通过usbipd添加到WSL中,执行sudo fdisk -l命令,列出所有磁盘分区表,此时便发现我们的SD卡被列出来了。

sudo fdisk -l

  

至此,usb的配置已完成。

### 如何在WSL上安装Ubuntu 24.04 #### 准备工作 确保Windows Subsystem for Linux (WSL) 已经被启用并更新到了最新版本。可以通过PowerShell以管理员身份运行`wsl --update`来完成此操作。 #### 安装过程 通过命令行可以快速部署Ubuntu 24.04WSL之上: ```bash wsl --install -d Ubuntu-24.04 ``` 这条指令将会自动下载并设置好环境,通常情况下会默认安装到C盘[^2]。 如果希望自定义安装路径,则需按照以下流程操作: 1. **导出已有的Ubuntu发行版** 首先需要有一个已经存在的Ubuntu实例用于导出: ```bash wsl --export Ubuntu-24.04 D:\tmp\Ubuntu-24.04.tar ``` 2. **移除旧的Ubuntu实例** 使用下面的命令删除现有的Ubuntu分发版: ```bash wsl --unregister Ubuntu-24.04 ``` 3. **重新导入Ubuntu映像文件** 将之前保存下来的`.tar`文件作为新的Ubuntu实例导入特定位置: ```bash wsl --import Ubuntu-24.04 "F:\VirtualPCs\Ubuntu-24.04" "D:\tmp\Ubuntu-24.04.tar" ``` 以上步骤允许用户灵活调整存储位置以及管理多个不同版本的操作系统副本。 对于那些想要更精确控制整个安装过程的人而言,还可以考虑从官方渠道获取最新的ISO镜像,并遵循标准服务器安装程序来进行配置,这包括但不限于网络参数设定、磁盘分区规划等高级选项[^4]。 最后,在成功启动新安装好的Ubuntu之后,建议立即执行软件包更新和必要的安全补丁应用,以保障系统的稳定性和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值