Puncte:0

Comanda lsmod nu funcționează în subsistemul Windows pentru Linux

drapel ro

Am instalat subsistemul Windows pentru Linux cu versiunea ubunut 20.04 în Windows 10 din magazinul Microsoft. Am încercat să instalez software-ul netextender în acel subsistem prin terminal. Dar primesc mai jos un mesaj de eroare.

libkmod: EROARE ../libkmod/libkmod-module.c:1668 kmod_module_new_from_loaded: nu s-a putut deschide /proc/modules: Nu există un astfel de fișier sau director

Am verificat cu ubuntu os laptop introducând comanda lsmod dar asta oferă o listă de module, dar care nu este disponibilă în subsistemul Windows pentru Linux. Când caut cu privire la această problemă, arată o problemă de kernel în Windows ca asta. Dar nu înțeleg și de ce nu funcționează. Poate cineva să ajute cu această problemă ?

Puncte:0
drapel vn

Răspuns scurt

Probabil că rulați WSL1. lsmod necesită WSL2.

Explicaţie

Începe cu wsl -l -v (de la PowerShell sau CMD) pentru a vă confirma versiunea WSL. Probabil vei vedea ceva de genul:

  NUME STARE VERSIUNE
* Ubuntu Running 1

Una dintre diferențele principale dintre WSL1 și WSL2:

  • WSL1 este un „strat de traducere” care încearcă să convertească apelurile de sistem Linux în API-ul kernel-ului Windows.
  • WSL2 este un mediu „virtualizat” care rulează sub un nucleu Linux real.

Deci, de exemplu, când ls comanda primește o listă de fișiere:

  • În cadrul WSL1, Windows oferă acea listă de fișiere folosind API-ul Windows pentru a obține fișierele în rootf-urile WSL.
  • Sub WSL2, nucleul Linux folosește sistemul de fișiere ext4 pe un disc virtual pentru a prelua lista de fișiere. Pentru fișierele de pe unități Windows (de ex. /mnc/c), folosește protocolul de rețea 9P pentru a obține fișierele.

Este cu adevărat uimitor cât de mult este capabil să facă WSL1 având în vedere acest lucru. Dar acolo sunt limitări. lsmod este unul dintre ei. În timp ce WSL1 oferă anumite /proc mapare (cum ar fi procesele), conceptul de „module kernel” nu are prea mult sens cu o mapare Windows.

Ar putea fi posibil să enumerați driverele Windows, dar asta nu ar oferi cu adevărat niciun beneficiu.

Convertiți în WSL2

Presupunând că aveți deja WSL2 activat pe Windows, vă puteți converti instanța Ubuntu în WSL2 folosind:

wsl --set-version Ubuntu 2

Deși această comandă este destul de sigură, aș recomanda totuși să faceți mai întâi o copie de rezervă a instanței dvs. cu:

wsl --export Ubuntu backup.tar

La fel ca și inițiala wsl comandă, aceasta este o comandă Windows, deci va trebui să fie rulată din PowerShell sau CMD.

Instalarea/Activarea WSL2

Dacă nu aveți WSL2 activat, puteți face acest lucru urmând pașii 2-5 din acest doc.

Activarea WSL2 face nu actualizați instanțe deja instalate, așa că va trebui să faceți în continuare pasul de conversie (wsl --set-version) de mai sus.

Limitări

Dar rețineți că nucleul furnizat cu WSL are deja toate modulele disponibile compilate, deci rezultatul lsmod va fi doar o listă goală.

Tu poate sa compilați-vă propriul nucleu cu module încărcate dacă doriți. Vă rugăm să vedeți Nucleul Linux WSL Github si WSL Doc pentru cum să încărcați WSL cu nucleul personalizat.

Dar sperăm că acest lucru nu va fi necesar pentru Netextender.

user3157334 avatar
drapel ro
când rulez această comandă wsl -l -v, arată - Comanda „wsl” nu a fost găsită, dar poate fi instalată cu: sudo apt install wsl.shoud rulez această comandă și instalez wsl?
NotTheDr01ds avatar
drapel vn
@user3157334 (Notă secundară: sincronizare bună) Rulați comanda `wsl` din PowerShell sau CMD. Voi edita răspunsul pentru a clarifica.
user3157334 avatar
drapel ro
când rulați wsl în powershell, vine același răspuns de mai sus.
NotTheDr01ds avatar
drapel vn
@user3157334 Verificați de două ori. Mesajul de eroare *„Comanda xxx nu a fost găsită, dar poate fi instalată”* este un mesaj shell bash. Nu mă gândesc la vreun fel în care ați vedea acel răspuns în PowerShell. Dacă comanda nu ar fi găsită în PowerShell, veți obține: *„Termenul „xxxxx” nu este recunoscut ca nume al unui cmdlet, funcție, fișier script, ...”* Este posibil să fi *introdus* WSL de la PowerShell doar cu o comandă `wsl`. În acest caz, trebuie doar să tastați „exit” (sau Ctrl+D) pentru a ieși din WSL înapoi în PowerShell.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.