Score:0

คำสั่ง lsmod ไม่ทำงานในระบบย่อย windows สำหรับ linux

ธง ro

ฉันได้ติดตั้งระบบย่อย windows สำหรับ linux ด้วย ubunut เวอร์ชัน 20.04 ใน windows 10 จาก microsoft store ฉันพยายามติดตั้งซอฟต์แวร์ netextender ในระบบย่อยนั้นผ่านเทอร์มินัล แต่ฉันได้รับข้อความแสดงข้อผิดพลาดด้านล่าง

libkmod: ข้อผิดพลาด ../libkmod/libkmod-module.c:1668 kmod_module_new_from_loaded: ไม่สามารถเปิด /proc/modules: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว

ฉันตรวจสอบกับแล็ปท็อประบบปฏิบัติการ Ubuntu โดยป้อนคำสั่ง lsmod แต่นั่นให้รายชื่อโมดูล แต่ไม่มีในระบบย่อย windows สำหรับ linux เมื่อฉันค้นหาเกี่ยวกับปัญหานี้ มันแสดงปัญหาเคอร์เนลบางอย่างใน windows แบบนั้น แต่ฉันไม่เข้าใจและทำไมสิ่งนี้ถึงไม่ทำงาน ใครสามารถช่วยปัญหานี้ได้ ?

Score:0
ธง vn

คำตอบสั้น ๆ

คุณกำลังเรียกใช้ 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

user3157334 avatar
ro flag
when i run this command wsl -l -v,it shows - Command 'wsl' not found, but can be installed with: sudo apt install wsl.shoud i run this command and install wsl?
NotTheDr01ds avatar
vn flag
@user3157334 (Side note: Good timing) Run the `wsl` command from PowerShell or CMD. I'll edit the answer to clarify.
user3157334 avatar
ro flag
when run wsl in powershell,same above response comes.
NotTheDr01ds avatar
vn flag
@user3157334 Double-check that. The error message *"Command xxx not found, but can be installed"* is a bash shell message. I can't think of any way you would see that response in PowerShell. If the command weren't found in PowerShell, you'd get, *"The term 'xxxxx' is not recognized as a name of a cmdlet, function, script file, ..."* You might have *entered* WSL from PowerShell with just a `wsl` command. In that case, just type `exit` (or Ctrl+D) to exit WSL back to PowerShell.

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา