EST. 2026 — บันทึกงานเซิร์ฟเวอร์จริง SYSADMIN · SECURITY · AI · DIRECTADMIN เล่มที่ 01
THE SYSADMIN ALMANAC
หน้าหลัก / Linux / ส่ง USB เข้า WSL2 ด้วย usbipd-win — ให้ Linux บน Windows จับฮาร์ดแวร์จริง
Linux

ส่ง USB เข้า WSL2 ด้วย usbipd-win — ให้ Linux บน Windows จับฮาร์ดแวร์จริง

โดย Ton-Or ·11 ก.ค. 2026·อ่าน 7 นาที
ส่ง USB เข้า WSL2 ด้วย usbipd-win — ให้ Linux บน Windows จับฮาร์ดแวร์จริง

WSL2 ใช้แทน Linux เครื่องจริงได้เกือบหมด ยกเว้นกำแพงเดียวคืออุปกรณ์ USB — usbipd-win คือทางที่ Microsoft รับรอง ส่ง serial adapter บอร์ด dev หรือ dongle ข้ามไปให้ Ubuntu ใน WSL จับได้เหมือนเสียบเครื่องจริง

พอดีผมมีงาน flash firmware อุปกรณ์ตัวหนึ่งที่ toolchain มีแต่ฝั่ง Linux เท่านั้นครับ เครื่องที่นั่งทำอยู่เป็น Windows — WSL2 ทุกวันนี้ใช้แทน Linux เครื่องจริงได้เกือบหมดแล้ว ยกเว้นเรื่องเดียวที่ชนกำแพงตลอด: อุปกรณ์ USB — เสียบ serial adapter, บอร์ด dev, dongle อะไรก็ตาม ฝั่ง Ubuntu ใน WSL มองไม่เห็นเลย เพราะ WSL2 เป็น VM ที่ไม่มี USB controller ของตัวเอง

ทางแก้ที่ Microsoft รับรองคือ usbipd-win — ใช้โปรโตคอล USB/IP ส่งอุปกรณ์จาก Windows ข้ามไปให้ kernel ของ WSL ตรงๆ บทความนี้เป็นค่าจริงจากงาน local ของผมทั้งหมด

เส้นทางอุปกรณ์USB deviceเสียบเครื่อง Windows→usbipd-winbind + attach→kernel WSL2USB/IP protocol→/dev/ttyUSB0ใช้เหมือนเครื่องจริง

ติดตั้ง

ฝั่ง Windows (PowerShell แบบ admin):

winget install usbipd

ฝั่ง Ubuntu ใน WSL — ตัว userspace tools:

sudo apt install linux-tools-virtual hwdata usbutils
sudo update-alternatives --install /usr/local/bin/usbip usbip \
  $(ls /usr/lib/linux-tools/*/usbip | tail -1) 20

ใช้งานจริง: 3 คำสั่ง

1. ดูว่ามีอะไรเสียบอยู่ (PowerShell):

usbipd list
# BUSID  VID:PID    DEVICE                       STATE
# 1-3    0403:6001  USB Serial Converter          Not shared
# 1-5    2e8a:0003  RP2 Boot                      Not shared

2. bind อุปกรณ์ (ครั้งแรกครั้งเดียวต่ออุปกรณ์ — ต้อง admin):

usbipd bind --busid 1-3

3. attach เข้า WSL (ครั้งนี้ไม่ต้อง admin แล้ว):

usbipd attach --wsl --busid 1-3

ฝั่ง Ubuntu เช็ค:

lsusb
# Bus 001 Device 002: ID 0403:6001 Future Technology Devices FT232 Serial
dmesg | tail -3
# usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB0

ได้ /dev/ttyUSB0 มาใช้เหมือน Linux เครื่องจริงทุกประการ — จะ minicom, esptool, openocd อะไรก็ว่าไป

เลิกใช้ก็คืนให้ Windows:

usbipd detach --busid 1-3
usbipd unbind --busid 1-3   # ถ้าจะเลิกถาวร

ข้อควรรู้จากการใช้จริง

1. ถอดสายเมื่อไหร่ attach หลุด — USB/IP ผูกกับ session ถ้าถอดเสียบใหม่ต้อง attach ซ้ำ (bind ยังอยู่) ใครใช้ประจำเขียน PowerShell profile function สั้นๆ ไว้เรียกได้:

function wsl-usb { usbipd attach --wsl --busid 1-3 }

2. Windows จะใช้อุปกรณ์นั้นไม่ได้ระหว่าง attach — มันถูกยกไปให้ WSL ทั้งตัว ไม่ใช่ share กัน

3. กับดัก CRLF เวลาสั่ง bash ผ่าน wsl.exe — อันนี้ไม่เกี่ยว USB ตรงๆ แต่ผมเจอระหว่างทำงานเดียวกัน:

CRLF ตัวมองไม่เห็น

ยิงคำสั่งจาก PowerShell แบบ multi-line เข้า wsl -- bash -c "..." ตัวขึ้นบรรทัด CRLF ของ Windows จะติดเข้าไปใน string ฝั่ง bash — ตัวแปรที่มี path จะมี \r ต่อท้ายแบบมองไม่เห็น แล้ว path พังหมด อาการคือ No such file or directory ทั้งที่ไฟล์อยู่ วิธีเลี่ยง: ยิงเป็น single-line เสมอ หรือเขียนเป็นไฟล์ .sh แล้วผ่าน sed -i 's/\r$//' ก่อนรัน

4. อุปกรณ์เน็ต USB บางตัวแย่ง default route ของ Windows — เคสผมคือ USB modem (HiLink) ที่เสียบไว้เฉยๆ ไม่มีซิม มันประกาศตัวเป็น network adapter แล้วดึง default route ไป — เน็ตทั้งเครื่องเงียบ งงอยู่พักใหญ่ แก้ด้วยการกด metric ของ interface นั้นให้จมดิน:

# admin PowerShell — ดู ifIndex จาก Get-NetIPInterface ก่อน
Set-NetIPInterface -InterfaceIndex <idx> -InterfaceMetric 9999

สรุป

usbipd-win ทำให้ WSL2 ปิดช่องว่างสุดท้ายกับ Linux เครื่องจริงได้ครับ — เวิร์กโฟลว์ list -> bind (ครั้งเดียว) -> attach จำง่าย ใช้จริงเสถียรกว่าที่คิด งาน embedded/flash firmware บน Windows ไม่ต้องหาเครื่อง Linux แยกหรือพก live USB อีกต่อไป

ส่วนตัวผมทุกวันนี้เครื่อง Windows ตัวหลักมี Ubuntu ใน WSL ค้างไว้ตลอด งานไหนต้องจับฮาร์ดแวร์ก็ attach เอาตามสะดวก ตรงไหนผมอธิบายตกหล่นหรือพิมพ์ผิด เดี๋ยวกลับมาแก้เพิ่มให้ภายหลังครับ

อยากให้เราทำให้ไหม?

ให้เราช่วยติดตั้ง ตั้งค่า ย้ายระบบ หรือแก้ปัญหาเซิร์ฟเวอร์ เพื่อให้คุณมีเวลาไปทำงานที่สำคัญกว่า

คุยเรื่องงานกับเรา

เคยเจองานแบบนี้ไหม? ติดตรงไหน?

มาแลกวิธีกันต่อในบอร์ด LinuxThai

→ คุยต่อในบอร์ด

ความคิดเห็น 0

ยังไม่มีความคิดเห็น — เป็นคนแรกเลย