Solución a la versión inconsistente del kernel wsl2 y la versión del módulo

*** /lib/modules/…build: No existe tal solución de error de archivo o directorio

Este artículo duró un mes completo, del 5 de abril al 5 de mayo, antes de que se resolviera este problema. La siguiente es mi experiencia para su referencia:

Análisis de causa

El kernel de wsl2 ha sido modificado. No hay un kernel correspondiente para wsl o la inconsistencia entre la versión del kernel de wsl y la versión del módulo de módulos conduce a un error.

1. Compruebe la versión del kernel:

uname -r

inserte la descripción de la imagen aquí/2 Ver la versión del módulo de módulos en la ruta /lib/modules

cd /lib/modules

ls

inserte la descripción de la imagen aquí
Si no hay nada en el directorio después de ls, significa que el módulo de módulos no está instalado. Simplemente use el paso 2 de la solución.

Si no hay contenido correspondiente a la versión uname -r, sino a otras versiones, significa que la versión instalada es incorrecta. Tenga en cuenta que las inconsistencias de versión no son solo números diferentes, sino también letras diferentes son inconsistencias de versión. Use resolver los pasos 1, luego 2.

Nuestro objetivo final es hacer que la versión consultada por uname -r sea exactamente igual a la versión del módulo de módulos en la ruta cd /lib/modules.

Solución

No intente usar el método de forzar la correspondencia del contenido de diferentes versiones cambiando el nombre, porque el contenido del archivo principal es inconsistente e insmod seguirá cometiendo un error. (Lecciones de sangre y lágrimas) Lo siguiente proporciona una solución razonable:

1. Vuelva a instalar Ubuntu (omita este paso si no hay ningún módulo instalado)

Tenga en cuenta que si hay archivos importantes en wsl, primero debe hacer una copia de seguridad de ellos en Windows, porque esto es equivalente a reinstalar un sistema wsl2.

(1) Desinstalar Ubuntu (es decir, la distribución de Linux)

Vaya a la función de la aplicación en la configuración y desinstale la distribución de Linux.
inserte la descripción de la imagen aquí

(2) Desinstalar wsl2

Busque linux en el cuadro de búsqueda, elimine el Subsistema de Windows para Linux
inserte la descripción de la imagen aquí

(3) Servicio Pesado

Abra la tienda de Microsoft, busque Ubuntu y descargue una distribución más nueva. (Elegí 20.04)
Haga clic en Obtener.
Solo descárgalo, no lo ejecutes todavía.
inserte la descripción de la imagen aquí

(4) Reinstalar wsl2

Busque el archivo smi que descargó antes de actualizar wsl a wsl2. Si
no puede encontrarlo, descargue uno nuevo.
URL: https://learn.microsoft.com/zh-cn/windows/wsl/install-manual
Buscar paso 4 - descargue el kernel de Linux Complete el paquete de actualización
1. Descargue el paquete más reciente
y haga clic para descargar.
inserte la descripción de la imagen aquí
A continuación, haga clic en el archivo smi que acaba de descargar
. No necesita modificar nada, simplemente haga clic hasta que se complete la instalación.

(5) Ejecución de prueba

En este punto, Ubuntu se ha reinstalado y necesitamos restablecer el nombre de usuario y la contraseña. En este momento, no hay contenido en la ruta /lib/modules.

2. Instale manualmente el kernel en la ruta /lib/modules

Al compilar el controlador, se requieren el archivo de encabezado del kernel y el archivo de módulos.
El kernel de WSL2 ha sido modificado y no puede usar el kernel upstream de ubuntu, por lo tanto, necesitamos compilar e instalar manualmente una versión.

(1) Descarga el código del kernel

Ingrese al sitio web de github: https://github.com/microsoft/WSL2-Linux-Kernel

Encuentre la versión correspondiente a la versión encontrada por uname -r.
inserte la descripción de la imagen aquí
Haga clic en la etiqueta y luego ingrese el contenido digital correspondiente.
inserte la descripción de la imagen aquí
Copie el nombre de la versión correspondiente a las etiquetas (porque solo descargamos una versión de rama en lugar de la versión completa)
y luego ingrese el comando en la terminal de Linux

git clone -b xxx --depth=1 https://github.com/microsoft/WSL2-Linux-Kernel

xxx es el nombre de la versión correspondiente de las etiquetas. Por ejemplo, reemplacé xxx aquí con linux-msft-wsl-5.10.16.3
depth=1, lo que significa que el tamaño del paso es 1, lo que significa descargar la primera versión bajo este rama (aquí no necesitamos cambiar)

(2) Compilar e instalar

Primero, para descargar algunas bibliotecas necesarias

sudo apt install ncurses-dev
sudo apt install flex
sudo apt install bison
sudo apt install libssl-dev

A continuación, configure el entorno.

cd WSL2-Linux-Kernel
LOCALVERSION= make KCONFIG_CONFIG=Microsoft/config-wsl -j8
sudo LOCALVERSION= make KCONFIG_CONFIG=Microsoft/config-wsl modules_install -j8

Finalmente, instale los encabezados (si la versión del kernel de ubuntu es relativamente nueva, este paso no es necesario)

sudo make headers_install ARCH=x86_64 INSTALL_HDR_PATH=/usr

Una vez completada la instalación, se generará una carpeta consistente con la versión actual del kernel en el directorio /lib/modules/.
inserte la descripción de la imagen aquí

(3) Comprobar (compilación de controladores)

➜ hola make
make -C /lib/modules/5.10.74.3-microsoft-standard-WSL2/build M=/home/dw/src/drivers/study/hello modules
make[1]: Ingresando al directorio '/home/dw/ src/kernel/WSL2-Linux-Kernel'
CC [M] /home/dw/src/drivers/study/hello/hello.o
MODPOST /home/dw/src/drivers/study/hello/Module.symvers
CC [M ] /home/dw/src/drivers/study/hello/hello.mod.o
LD [M] /home/dw/src/drivers/study/hello/hello.ko
make[1]: Dejando el directorio '/home/ dw/src/kernel/WSL2-Linux-Kernel'
➜ hola sudo insmod ./hello.ko
➜ hola dmesg
[19254.803777] Hola mundo enter
➜ hola

Rehacer, ejecutar con éxito. Entonces insmod, éxito.

Supongo que te gusta

Origin blog.csdn.net/m0_60634555/article/details/129964554
Recomendado
Clasificación