คำตอบสั้น ๆ
คุณกำลังเรียกใช้ WSL1 lsmod ต้องใช้ WSL2
คำอธิบาย
เริ่มกับ wsl -l -v (จาก PowerShell หรือ CMD) เพื่อยืนยันเวอร์ชัน WSL ของคุณ คุณอาจเห็นบางอย่างเช่น:
ชื่อรุ่นของรัฐ
* อูบุนตูทำงาน 1
หนึ่งในข้อแตกต่างหลักระหว่าง WSL1 และ WSL2:
- WSL1 เป็น "เลเยอร์การแปล" ที่พยายามแปลง Linux syscalls เป็น API ของเคอร์เนล Windows
- WSL2 เป็นสภาพแวดล้อม "เสมือน" ที่ทำงานภายใต้เคอร์เนลลินุกซ์จริง
ตัวอย่างเช่น เมื่อ ล คำสั่งรับรายการไฟล์:
- ภายใต้ WSL1 Windows จัดเตรียมรายการไฟล์นั้นโดยใช้ Windows API เพื่อรับไฟล์ใน WSL rootfs
- ภายใต้ WSL2 เคอร์เนล Linux กำลังใช้ระบบไฟล์ ext4 ในดิสก์เสมือนเพื่อดึงรายการไฟล์ สำหรับไฟล์ในไดรฟ์ Windows (เช่น
/mnc/ค) จะใช้โปรโตคอลเครือข่าย 9P เพื่อขอรับไฟล์
มันค่อนข้างน่าทึ่งมากที่ WSL1 สามารถทำเช่นนี้ได้ แต่มี เป็น ข้อ จำกัด lsmod เป็นหนึ่งในนั้น ในขณะที่ WSL1 ให้บางอย่าง /proc การทำแผนที่ (เช่นกระบวนการ) แนวคิดของ "โมดูลเคอร์เนล" ไม่สมเหตุสมผลที่จะทำกับการแมป Windows
อาจเป็นไปได้ที่จะแสดงรายการไดรเวอร์ Windows แต่นั่นจะไม่มีประโยชน์อะไรเลย
แปลงเป็น WSL2
สมมติว่าคุณมี WSL2 อยู่แล้ว เปิดใช้งาน บน Windows คุณสามารถแปลงอินสแตนซ์ Ubuntu เป็น WSL2 โดยใช้:
wsl --set-version อูบุนตู 2
แม้ว่าคำสั่งนี้จะค่อนข้างปลอดภัย แต่ฉันก็ยังแนะนำให้สำรองข้อมูลอินสแตนซ์ของคุณก่อนด้วย:
wsl -- ส่งออก Ubuntu backup.tar
เช่นเดียวกับการเริ่มต้น wsl คำสั่งนี้เป็นคำสั่งของ Windows ดังนั้นจึงจำเป็นต้องเรียกใช้จาก PowerShell หรือ CMD
การติดตั้ง/เปิดใช้งาน WSL2
หากคุณไม่ได้เปิดใช้งาน WSL2 คุณสามารถทำได้โดยทำตามขั้นตอนที่ 2-5 ของ เอกสารนี้.
การเปิดใช้งาน WSL2 ทำ ไม่ อัปเดตอินสแตนซ์ที่ติดตั้งแล้ว ดังนั้นคุณยังคงต้องทำขั้นตอนการแปลง (wsl --set-เวอร์ชั่น) ข้างต้น.
ข้อจำกัด
แต่โปรดทราบว่าเคอร์เนลที่มาพร้อมกับ WSL ได้รวบรวมโมดูลที่มีอยู่ทั้งหมดแล้ว ดังนั้นผลลัพธ์ของ lsmod จะเป็นเพียงรายการที่ว่างเปล่า
คุณ สามารถ รวบรวมเคอร์เนลของคุณเองด้วยโมดูลที่โหลดได้หากคุณต้องการ โปรดดูที่ เคอร์เนล WSL Linux Github และ เอกสาร WSL สำหรับวิธีโหลด WSL ด้วยเคอร์เนลที่คุณกำหนดเอง
แต่หวังว่าจะไม่จำเป็นสำหรับ Netextender