Рейтинг:0

Команда lsmod не работает в подсистеме Windows для Linux

флаг ro

Я установил подсистему Windows для Linux с ubunut версии 20.04 в Windows 10 из магазина Microsoft. Я попытался установить программное обеспечение netextender в эту подсистему через терминал. Но я получаю сообщение об ошибке ниже.

libkmod: ОШИБКА ../libkmod/libkmod-module.c:1668 kmod_module_new_from_loaded: не удалось открыть /proc/modules: нет такого файла или каталога

Я проверил с ноутбуком Ubuntu OS, введя команду lsmod но это дает список модулей, но он недоступен в подсистеме Windows для Linux. Когда я ищу по этой проблеме, он показывает некоторые проблемы с ядром в подобных окнах. Но я не могу понять, почему это не работает. Может ли кто-нибудь помочь с этой проблемой ?

Рейтинг:0
флаг vn

Короткий ответ

Вероятно, вы используете WSL1. lsmod требует WSL2.

Объяснение

Начните с wsl -l -v (из PowerShell или CMD), чтобы подтвердить версию WSL. Вы, вероятно, увидите что-то вроде:

  НАИМЕНОВАНИЕ СОСТОЯНИЕ ВЕРСИЯ
* Убунту работает 1

Одно из основных различий между WSL1 и WSL2:

  • WSL1 — это «уровень перевода», который пытается преобразовать системные вызовы Linux в API ядра Windows.
  • WSL2 — это «виртуализированная» среда, работающая под настоящим ядром Linux.

Так, например, когда лс Команда получает список файлов:

  • В WSL1 Windows предоставляет этот список файлов, используя Windows API для получения файлов в корневой файловой системе WSL.
  • В WSL2 ядро ​​Linux использует файловую систему ext4 на виртуальном диске для получения списка файлов. Для файлов на дисках Windows (например, /мнк/с), он использует сетевой протокол 9P для получения файлов.

Удивительно, как много WSL1 может сделать с учетом этого. Но там находятся ограничения. lsmod является одним из них. Хотя WSL1 предоставляет определенные /прок сопоставление (например, процессов), концепция «модулей ядра» не имеет особого смысла для сопоставления Windows.

Можно было бы перечислить драйверы Windows, но на самом деле это не принесет никакой пользы.

Преобразовать в WSL2

Предполагая, что у вас уже есть WSL2 включено в Windows вы можете преобразовать свой экземпляр Ubuntu в WSL2, используя:

wsl --set-версия Ubuntu 2

Хотя эта команда довольно безопасна, я бы все же рекомендовал сначала создать резервную копию вашего экземпляра с помощью:

wsl --export 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
когда я запускаю эту команду wsl -l -v, она показывает: команда «wsl» не найдена, но может быть установлена ​​​​с помощью: sudo apt install wsl.shud я запускаю эту команду и устанавливаю wsl?
NotTheDr01ds avatar
флаг vn
@user3157334 user3157334 (примечание: хорошее время) Запустите команду `wsl` из PowerShell или CMD. Я отредактирую ответ, чтобы уточнить.
user3157334 avatar
флаг ro
при запуске wsl в powershell приходит тот же ответ, что и выше.
NotTheDr01ds avatar
флаг vn
@user3157334 user3157334 Перепроверьте это. Сообщение об ошибке * «Команда xxx не найдена, но может быть установлена» * является сообщением оболочки bash. Я не могу придумать, как вы могли бы увидеть этот ответ в PowerShell. Если команда не была найдена в PowerShell, вы получите * «Термин «xxxxx» не распознается как имя командлета, функции, файла сценария, ...» * Возможно, вы *ввели* WSL из PowerShell с помощью всего лишь команды `wsl`. В этом случае просто введите «exit» (или Ctrl+D), чтобы выйти из WSL обратно в PowerShell.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.