wsl2 使用串口/usb


wsl2串口

搜了几个方案,都不合适
网上很多人说wsl可以直接使用win的串口,com* 就对应 /dev/ttyS*
实际上这是wsl1的,wsl2官方明确表示不支持了

CH340 介绍

CH340是一个USB总线的转接芯片,实现USB转串口或者USB转打印口。 在串口方式下,CH340提供常用的MODEM联络信号,用于为计算机扩展异步串口,或者将普通的串口设备直接升级到USB总线。

win下检查串口是否好用

https://zhuanlan.zhihu.com/p/342339132

重新编译内核

原文在这里
https://askubuntu.com/questions/1373910/ch340-serial-device-doesnt-appear-in-dev-wsl/
按照上面的步骤做就行了

wsl2 usb

和串口一样,wsl的kernel里面默认没有包含usb的各种驱动,包括sd card reader等,要使用usb就需要重新编译内核,步骤参考上面的链接

注意: 如果要使用usb块设备的话(比如格式化micro sd卡)可以在编译内核的时候把sd卡相关的驱动也装上,因为上次每装,所以我一次装了可能有关的和可能用到的很多驱动

#查看安装的usb驱动:
$ls /sys/bus/usb/drivers/
cdc_acm    ch341     hub     microtekX6  ums-cypress    ums-freecom   ums-karma     ums-sddr09  usb     usb-storage
cdc_ether  cp210x    lvs     uas         ums-datafab    ums-isd200    ums-onetouch  ums-sddr55  usbfs   usbtest
cdc_ncm    ftdi_sio  mdc800  ums-alauda  ums_eneub6250  ums-jumpshot  ums-realtek   ums-usbat   usbhid

查看usb设备可以使用 lsusb 命令,不过出现在下面的设备有可能因为没有驱动的原因无法在 /dev/ 文件夹中看到,可以通过 lsblk 或者 lspci 命令来查看可使用的 usb,lsblk 命令会输出相应的端口号,更方便一点

这里sdf1是我的tf卡的一个分区,我的tf卡总共60G

命令速查

注意,必须在管理员权限下

# 列出usb id
usbipd wsl list
# 将设备附加到wsl
usbipd wsl attach --busid 2-3
# 将附加的设备卸载
usbipd wsl detach --busid 2-3

oscomp内容

比赛中需要开发让内核支持文件系统,并从文件系统中加载程序

linux下格式化tf卡为fat32的步骤如下

https://github.com/oscomp/testsuits-for-oskernel/blob/testscripts/fat32-info.md

但是有一个问题,xv6这种系统支持的fat32不能存在分区表,而在windows下的各种磁盘管理软件中,一定是有分区表这个东西的(只要你有分区的操作,就一定有分区表),所以下面这一步必须在linux中做,创建一个没有分区表的fat32文件系统

来源:https://superuser.com/questions/1052723/format-usb-flash-drive-without-partitions

$sudo wipefs --all /dev/sdk
$sudo mkfs.vfat -F 32 /dev/sdk
$lsblk

注意这里sdk不能有sdk1的分区

测试

使用同学的os测试

成功的结果如下:

之前失败的结果如下:

使用xv6-k210测试

cd到xv6-k210目录下
make run即可
成功的结果如下:

之前失败的结果如下:

更新点无关的

wsl2能否固定ip地址? - hez2010的回答 - 知乎
https://www.zhihu.com/question/387747506/answer/2399932025