Tengo un error en un módulo de kernel de Linux que hace que el kernel Ubuntu 14.04 de stock se vaya (se cuelgue).
Es por eso que quiero editar / parchear la fuente de solo ese módulo de núcleo único para agregar una salida de depuración adicional. El módulo del kernel en cuestión es mvsas
y no es necesario arrancar. Por esa razón, no veo ninguna necesidad de actualizar ninguna imagen initrd.
He leído mucha información (como se muestra a continuación) y encuentro la confusión del proceso de configuración y construcción. Necesito dos recetas:
- configurar / configurar el entorno de compilación una vez
- pasos a seguir después de editar cualquier archivo fuente de este módulo de kernel (
.c
y.h
) y convertir esa edición en un nuevo módulo de kernel (.ko
)
Las fuentes que se han utilizado son:
- construir un módulo de kernel - búsqueda de Google
- http://www.linuxquestions.org/questions/linux-kernel-70/rebuilding-a-single-kernel-module-595116/
- https://stackoverflow.com/questions/8744087/how-to-recompile-just-a-single-kernel-module
- http://www.pixelbeat.org/docs/rebuild_kernel_module.html
- ¿Cómo construyo un solo módulo de kernel en árbol?
- http://ubuntuforums.org/showthread.php?t=1153067
- http://ubuntuforums.org/showthread.php?t=2112166
- http://ubuntuforums.org/showthread.php?t=1115593
- Construir un módulo de kernel ubuntu - búsqueda de Google
- 'make + single + kernel + module' - Pregúntale a Ubuntu
- 'make + kernel + module' - Pregúntale a Ubuntu
- Mi archivo MAKE da como resultado: No se necesita una regla para hacer que `arch / x86 / tools / relocs.c 'sea necesario
- '"Formato de módulo inválido"' - Pregunte a Ubuntu
- Instalación del controlador: compilando el código fuente para el kernel más nuevo
- Modprobe: 'Formato de nódulo no válido', pero funciona después de insmod
- "Falta el volcado de la versión del símbolo" "falta - Búsqueda de Google
- https://stackoverflow.com/questions/9425523/should-i-care-that-the-symbol-version-dump-is-missing-how-do-i-get-one
- https://askubuntu.com/questions/369051/where-can-i-find-the-corresponding-module-symvers-and-config-files-for-ubutunu
- "sin versión de símbolo para module_layout" al intentar cargar usbhid.ko
- Enlaces rotos dentro de la carpeta del archivo de encabezado de Linux
- 'make modules_install' - Pregúntale a Ubuntu
- 'modules_install' - Pregúntale a Ubuntu
- Directorio de compilación vacío en kernel compilado personalizado
- https://askubuntu.com/questions/444345/not-able-to-see-pr-info-output
- https://askubuntu.com/questions/472496/in-which-directory-are-the-kernel-source-files-and-how-can-i-recompile-it
- ¿Cómo puedo compilar e instalar ese archivo parcheado libata-eh.c?
- 'modules_install + depmod' - Pregúntale a Ubuntu
- modules_install depmod - Búsqueda de Google
- "make modules_install" - Búsqueda de Google
- http://www.csee.umbc.edu/courses/undergraduate/CMSC421/fall02/burt/projects/howto_build_kernel.html
- https://unix.stackexchange.com/questions/20864/what-happens-in-each-step-of-the-linux-kernel-building-process
- https://wiki.ubuntu.com/KernelCustomBuild
- http://www.cyberciti.biz/tips/build-linux-kernel-module-against-installed-kernel-source-tree.html
- http://www.linuxforums.org/forum/kernel/170617-solved-make-modules_install-different-path.html
- "hacer prepararse" - Búsqueda de Google
- guiones "make prepare" "/ kconfig / conf --silentoldconfig Kconfig" - Búsqueda de Google
- http://ubuntuforums.org/showthread.php?t=1963515
- ubuntu versión "make prepare" - búsqueda de Google
- https://stackoverflow.com/questions/8276245/how-to-compile-a-kernel-module-against-a-new-source
- https://help.ubuntu.com/community/Kernel/Compile
- ¿Cómo compilo un módulo de kernel?
- ¿Cómo agregar un controlador personalizado a mi kernel?
- https://askubuntu.com/questions/426549/compile-and-loading-kernel-module-without-compiling-the-kernel
Respuestas:
Es posible que la receta para construir un módulo personalizado deba dividirse en tres secciones.
Configurar una vez
Soy demasiado vago para copiar los archivos fuente del controlador específico mvsas; simplemente cópielos a su directorio de trabajo actual. Si
apt-get
da como resultado un mensaje de error sobre los URI de origen faltantes , consulte la nota n. ° 4 al final.Esto preparará algunos archivos necesarios para construir un módulo de kernel.
Cada versión del kernel
Esto instalará los encabezados y el archivo de configuración del kernel de Ubuntu para esa versión del kernel en / lib / modules.
Esto para evitar que aparezca el mensaje " sin versión de símbolo para module_layout " al cargar el módulo con insmod o modprobe.
Esto cambiará el nombre del módulo del núcleo original (compilación de Ubuntu) para asegurarse de que se cargará el parche personalizado.
Cada edición
Estos son para las ediciones.
Esto compilará y compilará el
.ko
archivo del módulo del kernel utilizando la configuración del kernel de la distribución de Ubuntu que tiene almacenada/lib/modules/$(uname -r)/
.Esto instalará el módulo del núcleo
/lib/modules/$(uname -r)/extra/
, no sobrescribirá el módulo de distribución en caso de que no cambie el nombre del archivo del módulo del núcleo de distribución. En este caso mvsas también ejecutará depmod .Si esto resulta en alguna salida, el módulo mvsas necesita descargarse
modprobe -r mvsas
primero con ( ).Esto debería cargar el nuevo módulo del kernel.
Verifique la salida para verificar que
/lib/modules/.../extra/mvsas.ko
se está cargando.Error de Modprobe: no se pudo insertar
En algunos casos, es posible que experimente un
modprobe: ERROR: could not insert 'xyz': Unknown symbol in module, or unknown parameter (see dmesg)
tiempo en la salida detallada de modprobe que verá queinsmod
está intentando cargar el módulo desde la ubicación predeterminada del núcleo. Por ejemplo:En ese caso, debe ejecutar depmod manualmente e intentar cargar el módulo nuevamente:
Notas
.ko
archivos del módulo resultante sean mucho (por ejemplo, 20 veces) más grandes que los archivos del módulo original distribuidos por Ubuntu; en ese caso, elmake prepare
paso podría haber creado un desarrollador de Linux para depurar el archivo de configuración del núcleo y usted está construyendo desde el directorio fuente. Su-C
param podría no funcionar como se esperaba.make modules_prepare
ymake M=scripts/mod
pero no creo que sean necesarios para este caso.-C /lib/modules/$(uname -r)/build
con-C /usr/src/linux-headers-$(uname -r)
apt-get source linux-sources
devolverá el errorE: You must put some 'source' URIs in your sources.list
. Para solucionar este problema, puede modificar el archivo/etc/apt/sources.list
descomentando (eliminando#
el inicio de) la primeradeb-src
línea. Ejemplo para Ubuntu 17.10:deb-src http://ie.archive.ubuntu.com/ubuntu/ artful main restricted
. ejecutarsudo apt-get update
, y luego el comando entregará fuentes para usted. Consulte también esta pregunta donde también se describe un método GUI para hacerlo.fuente
$(uname-r)
aparentemente está mal ... Necesitas llamar alshell
incorporado:$(shell uname -r)
$(shell uname -r)
que no funciona . ¿Por qué$(uname -r)
aparentemente está tan mal?echo "search extra built-in" | sudo tee /etc/depmod.d/00-extra.conf
para quedepmod
vea el archivo recién actualizado.../extra
.