Table of Contents
¿La PC va lenta?
Durante algunas de las últimas semanas, algunos de nuestros lectores informaron que experimentaron con la creación de un módulo de kernel.
A veces, es posible que necesite compilar un módulo del kernel de Linux si no puede volver a compilar todo el kernel.
Nota: es mejor reemplazar un cuerpo existente cuando el módulo está construido como un curso (M) en lugar de estar integrado en el kernel (y).
Entorno de construcción
Primero debe permitirles instalar dependencias de compilación como su propio compilador (base-devel) y, como resultado, los archivos de encabezado de Linux.
Luego, debe recuperarlo para obtener el código fuente de la versión principal principal del código en el que realmente desea basar el módulo. Puede tener otras fuentes del kernel, pero la mayoría de los archivos generados probablemente no se cargarán.
Si la versión del kernel especialmente diseñada es el kernel instalado, encuentre la versión de su cachorro con
$ uname -r
Hay dos selecciones principales para adquirir la fuente requerida. Cada opción consta de un uso y un árbol de oraciones ligeramente diferentes.
Composición de la indicación comercial
Consulte Ver kernel/compilación tradicional#Cargar kernel base. Si alguien está usando Git para obtener la base más reciente, debe mostrar la versión con un nombre (por ejemplo, v4.1).
Sistema de construcción de arcos
Consulte la sección ABS para obtener una descripción general del sistema Arch Build. Para obtener el código fuente del núcleo, la fórmula del directorio y otros detalles, consulte Kernel/Arch-System-Build.
Configuración inicial
Si los posibles clientes tienen el código fuente, vaya a cada página de envío. Por la razón #Arch Build System, ahora este directorio será src/archlinux-linux/
debajo de donde se encuentra PKGBUILD.
La salida de make
ayudará con lo siguiente. Empezar a rootear desde
$mrproper
¿Qué comando se usa directamente para construir un módulo?
El sistema kbuild sabe cómo crear una base sólida para el módulo externo gracias al parámetro “M=
Nota: make eliminará tanto .config
como .config.old
. Tal vez realmente quiera guardar estos archivos en otro lugar antes de actualizarlos.
El archivo .config
correspondiente ahora es importante. Si no ve el catálogo de configuración más cercano en el mercado, tal vez de una marca única saved.config
y cree que la versión del kernel es, de hecho, definitivamente un kernel en ejecución, puede verificar el hecho de que este es el archivo de configuración:
$zcat /proc/config.gz > .config
El archivo .File config
se configura para determinar la versión del kernel. Al implementar un nuevo núcleo para las fuentes, no debe solicitar una entrada actual exacta en particular. Sin embargo, para una versión diferente al kernel inicial, es posible que se le realice una encuesta sobre ciertos productos. En cualquier caso, para la opción #Arch Build System exacta, debe analizar la función pkgbuild::prepare()
.
Si el módulo que desea ensamblar tiene opciones de compilación, como compilación de depuración, y no ha sido compilado antes, es posible que deba modificar la configuración del kernel. Esto puede muy bien hacerse utilizando uno de los objetivos de configuración mencionados en la ayuda de make.
Ejecute
$oldconfig
Composición de módulos
¿Cómo genero un módulo kernel?
Para compilar correctamente pero importar nuestro módulo, necesitamos encontrar, diría, el tipo de valor EXTRAVERSION del componente de algunos números de versión actuales del kernel para que coincidamos con el número de versión exactamente en la fuente del kernel más adecuada código. EXTRAVERSION es una variable especificada en el archivo MAKE del kernel de nivel superior, pero para muchos archivos MAKE en el código fuente del kernel Vanilla, EXTRAVERSION tiene la capacidad de estar vacío; Se instala siempre que sea sólo hParte del sistema de compilación del kernel de Arch. Si está presente, el valor de cómo el núcleo Contemporáneo de EXTRAVERSIÓN se puede encontrar mirando la salida de cada comando uname -r
. En general, un núcleo de renderizado es una concatenación de tres componentes. A saber, versión digital, EXTRAVERSIÓN y VERSIÓN LOCAL. La versión numérica en sí es realmente la gran concatenación de tres números. Si LOCALVERSION se creó a partir de un archivo PKGBUILD, se convirtió en un derivado del prefijo pkgrel
diverso gracias al guión. Y EXTRAVERSION sigue siendo un sufijo de la variable pkgver
si ese punto de la derecha, asociado al 3er dígito del número de versión, se sustituye por un guión. Por ejemplo, dada la unidad de Linux linux 5.5.8.arch1-1
, diría que LOCAVERSION podría ser -1
. La VERSIÓN MENOR es simplemente -arch1
. El rendimiento de uname -r
en este ejemplo es honestamente 5 be.5.8-arch1-1
.
Una vez conocido el valor de la EXTRAVERSIÓN, preparamos el montaje del módulo prestador:
$ make EXTRAVERSION=módulos_prepare
$ hacer Módulos_preparar
¿Cómo compilo e instalo el módulo kernel correcto?
Alternativamente, extraversion= -arch1 si realmente le gusta usar módulos de peso corporal con modprobe implementando --force-vermagic< option/code> para ayudarlo a ignorar las discrepancias en el número de versión del kernel, podrá ejecutar:
$ hacer módulos_preparar
Nota. El uso de EXTRAVERSION the new está escrito en el archivo MAKE de nivel superior para esquivar manualmente la especificación de EXTRAVERSION a en la serie de comandos, lo que puede generar discrepancias de tipos. El proceso de compilación del kernel a menudo detectaba esto al agregar un carácter +
real a un parámetro de configuración LOCALVERSION. Ejemplo:
Finalmente, compile el módulo solicitado especificando su convención de nomenclatura. En muchos casos, puede encontrar la ubicación de cualquier módulo, incluida su dirección de directorio definitiva, con o modinfo.
$ hacer M=fs/btrfs
Como último recurso, si todo lo demás falla, lo más probable es que hagas esto
$ Crear módulos
Compilar módulos fuera del árbol
¿Cómo creo un módulo del núcleo?
Modifique el archivo MAKE sintetizando cada aparición de helloWorld y kernelRead con los nombres principales de los módulos que desea compilar.compilar los módulos ejecutando estar en el directorio es importante donde están los módulos.Conviértete en superusuario ahora escribiendo.