众做周知在嵌入式开发中经常需要制作SD卡系统来启动开发板,最近从虚拟机转到WSL发现不能像以前那样对SD卡进行操作了,记录下解决方法(我的系统环境是Win10+WSL2)

编译WSL2内核

由于WSL2的内核默认没有添加USB存储设备的驱动的支持,所以无法进行烧录操作,需要对内核进行重新配置。在微软官方的WSL2内核仓库中下载内核源码到WSL2中解压后进行配置和编译(我这里下载的是WSL2-Linux-Kernel-linux-msft-wsl-5.15.150.1.tar.gz).

#安装必要的软件
sudo apt update && sudo apt upgrade -y
sudo apt install libncurses-dev build-essential flex bison libssl-dev libelf-dev dwarves
#解压内核源码
tar xf WSL2-Linux-Kernel-linux-msft-wsl-5.15.150.1.tar.gz
#进入内核源码目录
cd WSL2-Linux-Kernel-linux-msft-wsl-5.15.150.1/
#配置内核
make menuconfig KCONFIG_CONFIG=Microsoft/config-wsl

选中 Device Drivers > USB support > USB Mass Storage support 以及下面的一系列子选项,然后 < Save > & < Exit >

<*>   USB Mass Storage support                                         
[ ]     USB Mass Storage verbose debug                                 
<*>     Realtek Card Reader support                                    
<*>     Datafab Compact Flash Reader support                           
<*>     Freecom USB/ATAPI Bridge support                               
<*>     ISD-200 USB/ATA Bridge support                                 
<*>     USBAT/USBAT02-based storage support                            
<*>     SanDisk SDDR-09 (and other SmartMedia, including DPCM) support 
<*>     SanDisk SDDR-55 SmartMedia support                             
<*>     Lexar Jumpshot Compact Flash Reader                            
<*>     Olympus MAUSB-10/Fuji DPC-R1 support                           
<*>     Support OneTouch Button on Maxtor Hard Drives                  
<*>     Support for Rio Karma music player                             
<*>     SAT emulation on Cypress USB/ATA Bridge with ATACB             
<*>     USB ENE card reader support                                    
<*>     USB Attached SCSI                                              

配置完成后对内核进行编译:

make bzImage KCONFIG_CONFIG=Microsoft/config-wsl

编译完成后bzImage文件在内核源码的arch/x86/boot/目录下。

将bzImage文件拷贝出来放到Windows系统的用户目录下(例如我的是C:\Users\admin),然后在用户目录创建一个.wslconfig文件,把内核路径添加到文件中(关于该配置文件可以参考微软官方文档),示例如下:

[wsl2]
kernel=c:\\Users\\admin\\bzImage

上面的操作完成后重新启动WSL2使用的就是新编译的内核了。

安装usbipd-win软件

  1. 首先参考微软官方文档连接 USB 设备安装usbipd-win软件

  2. 使用PowerShell 运行usbipd命令共享USB设备到WSL2:

    1. 列出设备usbipd list,示例如下:

      PS C:\Users\admin> usbipd list
      Connected:
      BUSID  VID:PID    DEVICE                  STATE
      1-3    062a:8572  USB 输入设备             Not shared
      1-5    14cd:1212  USB 大容量存储设备        Not shared
      1-6    2717:5016  USB 输入设备             Not shared
      
    2. 共享设备usbipd bind,示例如下:

      PS C:\Users\admin> usbipd bind --busid 1-5
      PS C:\Users\admin> usbipd list
      Connected:
      BUSID  VID:PID    DEVICE                  STATE
      1-3    062a:8572  USB 输入设备             Not shared
      1-5    14cd:1212  USB 大容量存储设备        Shared
      1-6    2717:5016  USB 输入设备             Not shared
      
    3. 添加USB设备到WSL2 usbipd attach,示例如下:

      PS C:\Users\admin> usbipd attach --wsl --busid 1-5
      usbipd: info: Using WSL distribution 'Ubuntu-20.04' to attach; the device will be available in all WSL 2 distributions.
      usbipd: info: Using IP address 192.168.69.1 to reach the host.
      PS C:\Users\admin> usbipd list
      Connected:
      BUSID  VID:PID    DEVICE                  STATE
      1-3    062a:8572  USB 输入设备             Not shared
      1-5    14cd:1212  USB 大容量存储设备        Attached
      1-6    2717:5016  USB 输入设备             Not shared
      
    4. 在WSL下查看usb设备的命令 lsusb

    5. 在 WSL中完成设备使用后,断开 USB 设备,在PowerShell中运行 usbipd detach 命令,示例:

      PS C:\Users\admin> usbipd detach --busid 1-5
      usbipd: info: Device with busid '1-5' was already not attached.
      
    6. 若要取消USB设备共享,在PowerShell中运行 usbipd unbind 命令,示例:

      usbipd unbind --busid 1-5
      

验证

使用 lsblk 命令查看设备是否挂载(例如我的是sdd)

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 388.5M  1 disk
sdb      8:16   0     2G  0 disk [SWAP]
sdc      8:32   0     1T  0 disk /mnt/wslg/distro
sdd      8:48   1  29.2G  0 disk
├─sdd1   8:49   1   500M  0 part
└─sdd2   8:50   1  28.7G  0 part
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐