這邊做一下紀錄。
我的 WSL2 Linux 用的是 Windows 11 + Ubuntu 20.04 LTS,以下就以這個為基礎做紀錄。
估狗了一下,大致上都是說需要 usbip 。簡單來說就是透過網路方式分享 USB`.
比較早的一些方案,抓 usbip for windows 然後重新 compile WSL2 linux kernel 對我無效。
e.g.
最後找到這篇比較官方 (M$) 開發者的說明,還蠻新的
sudo apt install linux-tools-5.4.0-77-generic hwdata
然後編輯 sudoer
visudo
找到 Defaults secure_path 這行,修改如下 (紅色代表我新增的內容)
Defaults secure_path="/usr/lib/linux-tools/5.4.0-77-generic:...
做完這些,還需要打開 Windows 的防火牆設定。(重點,卡了我一點時間)
這樣 host 和 target 才能通。
接著用 Administrator 權限啟動 Windows terminal ,同時也要啟動 WSL2,接著就能在 Windows tesminal (power shell or command prompt) 執行 usbipd
查詢可用的 USB 裝置
查詢可用的 USB 裝置
usbipd wsl list
從這邊可以看到裝置的 BUS ID。然後就可以掛載。
從這邊可以看到裝置的 BUS ID。然後就可以掛載。
usbipd wsl attach --busid <bus-id>
舉我的例子來說,
然後在 WSL2 打 lsusb -t -v 還有 dmesg 應該就能看到裝置了。
BUT ... 因為我用的是 CP2102 的 USB TTL,似乎並沒有直接抓到。
所以還是要參考最早重新 compile kernel 的文章來產生 kernel module。
所以還是要參考最早重新 compile kernel 的文章來產生 kernel module。
替換 kernel 不用參考上面那篇,後來找到的方法感覺比較正統。
compile 好,make modules_install 後,把 Compile 好的 kernel copy 出來
cp vmlinux /mnt/c/User/YourName/vmlinux
編輯 /mnt/c/User/YourName/.wslconfig
內容
[WSL2]
kernel=C:\\Users\\YourName\\vmlinux
然後重新啟動 WSL2
Windows terminal 下關閉 wsl2
wsl --shutdown
然後重新啟動 WSL2,跑上面的 usbipd 指令。
cp vmlinux /mnt/c/User/YourName/vmlinux
編輯 /mnt/c/User/YourName/.wslconfig
內容
[WSL2]
kernel=C:\\Users\\YourName\\vmlinux
然後重新啟動 WSL2
Windows terminal 下關閉 wsl2
wsl --shutdown
然後重新啟動 WSL2,跑上面的 usbipd 指令。
WSL2 裡
sudo modprobe cp210x
sudo modprobe cp210x
再觀察一下 dmesg,應該就能看到他被掛載到 /dev/ttyUSB0
達成我最早的目的。