GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:¿un núcleo corrupto en Linux?

Bajo ciertas condiciones, el kernel de Linux puede volverse contaminado . Por ejemplo, cargar un controlador de video patentado en el kernel contamina el kernel. Esta condición puede ser visible en los registros del sistema, los mensajes de error del kernel (ups y panic) y a través de herramientas como lsmod. y permanece hasta que se reinicia el sistema.

¿Qué significa esto? ¿Afecta mi capacidad para usar el sistema y cómo podría afectar mis opciones de soporte?

Respuesta aceptada:

Cuando el núcleo está contaminado, significa que está en un estado que no es compatible con la comunidad . La mayoría de los desarrolladores del kernel ignorarán los informes de errores que involucran kernels contaminados, y los miembros de la comunidad pueden pedirle que corrija la condición contaminada antes de que puedan continuar con el diagnóstico de problemas relacionados con el kernel. Además, algunas funciones de depuración y llamadas a la API pueden desactivarse cuando el kernel está contaminado.

En la mayoría de los casos que involucran controladores patentados, puede ignorar con seguridad la condición corrupta , pero algunos escenarios que hacen que el núcleo se contamine pueden ser indicativos de problemas graves del sistema.

La función está destinada a identificar las condiciones que pueden dificultar la resolución adecuada de un problema del kernel. Por ejemplo, la carga de un módulo propietario puede hacer que la salida de depuración del kernel no sea confiable porque los desarrolladores del kernel no tienen acceso al código fuente del módulo y, por lo tanto, no pueden determinar qué pudo haberle hecho el módulo al kernel. Asimismo, si el kernel había experimentado previamente una condición de error o si se había producido un error grave de hardware, la información de depuración generada por el kernel puede no ser confiable.

El kernel puede contaminarse por varias razones , incluyendo (pero no limitado a) lo siguiente:

  • El uso de un módulo de kernel patentado (o no compatible con GPL):esta es la causa más común de kernels contaminados y, por lo general, resulta de la carga de controladores de video NVIDIA o AMD patentados
  • El uso de la puesta en escena controladores, que son parte del código fuente del kernel pero no se han probado por completo
  • El uso de fuera del árbol módulos que no están incluidos con el código fuente del kernel de Linux
  • Carga o descarga forzada de un módulo del kernel (como la inserción forzada de un módulo no creado para la versión actual del kernel)
  • El uso de un núcleo SMP (multiprocesador) en ciertas CPU monoprocesador no compatibles, principalmente procesadores AMD Athlon más antiguos
  • Anulación de ACPI DSDT, a veces necesaria para corregir errores de administración de energía (ver aquí para más detalles)
  • Ciertas condiciones de error críticas, como excepciones de verificación de la máquina y oopses del kernel
  • Ciertos errores graves en el firmware del sistema (BIOS, UEFI) que el kernel debe solucionar

Cada una de estas condiciones está representada por una bandera particular en el kernel. Algunos proveedores de Linux, como SUSE, agregan indicadores de corrupción adicionales para indicar condiciones como la carga de un módulo que no es compatible con el proveedor.

Hay más información disponible en la documentación del kernel. Las banderas de corrupción enumeradas allí son (con _ un sustituto de 'en blanco')

  • G|P :G si todos los módulos cargados tienen licencia GPL o compatible, en caso contrario se ha cargado un módulo propietario. Los módulos sin MODULE_LICENSE o con MODULE_LICENSE que insmod no reconoce como compatibles con GPL se supone que son propietarios.
  • F|_ :si algún módulo se cargó a la fuerza con "insmod -f", de lo contrario, si todos los módulos se cargaron normalmente.
  • E|_ :si el error se produjo en un kernel SMP que se ejecuta en hardware que no ha sido certificado como seguro para ejecutar multiprocesador. Actualmente, esto ocurre solo en varios Athlons que no son compatibles con SMP.
  • D|_ :si un módulo fue descargado a la fuerza por rmmod -f , de lo contrario, si todos los módulos se descargaron normalmente.
  • M|_ :si algún procesador ha informado una Excepción de verificación de máquina,
    de lo contrario, no se han producido Excepciones de verificación de máquina.
  • B|_ :si una función de liberación de página ha encontrado una referencia de página incorrecta o algunos avisos de página inesperados.
  • E|_ :si un usuario o una aplicación de usuario solicitó específicamente que se establezca el indicador Tainted.
  • D|_ :si el kernel murió recientemente, es decir, hubo un OOPS o BUG.
  • A|_ :si la tabla ACPI ha sido anulada.
  • E|_ :si el kernel ha emitido previamente una advertencia (aunque algunas advertencias pueden establecer indicadores de contaminación más específicos).
  • C|_ :si se ha cargado un controlador de ensayo.
  • Yo|_ :si el núcleo está solucionando un error grave en el firmware de la plataforma (BIOS o similar).
  • O|_ :si se ha cargado un módulo construido externamente ("fuera del árbol").
  • E|_ :si se ha cargado un módulo sin firmar en una firma de módulo compatible con el kernel.
  • E|_ :si anteriormente se ha producido un bloqueo suave en el sistema.
  • K|_ :si el kernel ha sido parcheado en vivo.
Relacionado:Linux:¿cómo ejecutar un comando en segundo plano con un retraso?
Linux
  1. Linux – Kernel:¿Soporte de espacios de nombres?

  2. Linux – ¿Reenvío de IP del kernel?

  3. Linux:¿cómo determinar qué módulo contamina el kernel?

  4. ¿Cómo codificar un módulo del kernel de Linux?

  5. ¿Es posible desarrollar el módulo kernel de Linux en CLion?

Comando Lsmod en Linux (Lista de módulos del kernel)

Comando Modprobe en Linux

Comando Sysctl en Linux

Comando Rmmod en Linux

¿Linux es un sistema operativo o un kernel?

Núcleo de Linux vs. Núcleo de Mac