¿Cómo funciona el kernel de Linux independientemente de la plataforma en la que se encuentre?

¿Cómo funciona el kernel de Linux independientemente de la plataforma en la que se encuentre?

Lo que quiero saber específicamente aquí es: Independientemente del hardware subyacente, se trata de cómo el kernel de Linux logra funcionar en todas las diferentes PC.

O, en general, cómo puede funcionar cualquier kernel (kernel NT de Microsoft, mac os y Linux) en cualquier PC, independientemente de la configuración de hardware de la PC.

Para explicar mi duda, aquí hay un escenario: en comparación con la PC-2, el bluetooth, el teclado, el wifi, etc. de la PC-1 tienen una configuración diferente y son desarrollados por diferentes fabricantes. Para que todo este hardware sea funcional, supongo que el kernel debería tener un código específico de hardware para habilitar ese hardware. ¿Creo que el kernel tiene una capa de controlador de dispositivo donde debería habilitar este hardware? ¿O simplemente carga firmware específico del dispositivo desde otro lugar? ¿Dónde se encuentra exactamente el código específico del hardware en el kernel? Además, mientras aclaraba mis dudas me encontré con HAL, BSP. ¿Qué son y dónde se encuentran estas capas en el núcleo?

Respuesta1

Lo que quiero saber específicamente aquí es, independientemente del hardware subyacente, cómo el kernel de Linux logra funcionar en todas las PC diferentes.

Antes que nada, el kernel puede ejecutarse en cualquier PC siempre que esté compilado para esa arquitectura específica. Con las computadoras de uso general, la arquitectura tiende a ser la misma (x86_64/amd64), pero esto cambia cuando se trata de dispositivos integrados.

árbol de dispositivos

Aparte de la compilación, el núcleo en sí es independiente del hardware. te doy elárbol de dispositivos!

La forma en que el kernel de Linux se ocupa del hardware no detectable es a través del árbol de dispositivos. Esto le brinda al kernel información sobre la CPU, la memoria, los buses, los dispositivos conectados a través de I2C, SPI y demás. En lugar de que el diseño del dispositivo esté codificado, se puede cambiar a través del árbol de dispositivos. Todo es realmente mágico cuando lo entiendes. El árbol de dispositivos también le dice al kernel qué controlador debe usar para un dispositivo específico a través del compatibleparámetro.

El árbol de dispositivos se puede almacenar de muchas maneras diferentes dependiendo de cómo se compiló el kernel, pero generalmente la jerarquía se puede ver en /proc/device-treeo /sys/firmware/devicetree/base.

Para cosas como dispositivos USB, todo lo realiza el controlador USB. El kernel tiene un código básico para controlar cosas como teclados y ratones. Algunos proveedores tienen controladores personalizados que luego se envían con el dispositivo.

Módulos

Para los controladores, el kernel de Linux usa algo llamadomódulos del núcleo. Todos los módulos se pueden encontrar en /lib/modules. Hay dos tipos de módulos: módulos cargables y módulos integrados. Puede ver todos los módulos cargados usando el lsmodcomando. Cuando el kernel encuentra un determinado dispositivo en el árbol de dispositivos o incluso cuando conecta un dispositivo a un periférico, buscará si hay un módulo que pueda cargar para ese dispositivo y el módulo se convierte en el controlador de ese dispositivo.

Lo bueno de los módulos cargables es que mantienen la imagen del núcleo más pequeña. Los módulos se pueden compilar por separado. Los módulos integrados se compilan en el kernel y, por lo tanto, aumentan el tamaño real de la imagen. También puedes compilar y cargar módulos en el kernel mientras se está ejecutando, pero ese es un tema completamente diferente.

BSP

Usted ingresa al BSP (Paquete de soporte de placa) cuando un proveedor envía el kernel y un conjunto de módulos específicos para su propio hardware (esto incluye el procesador y el hardware conectado). A veces, los proveedores realizan cambios en los módulos existentes o envían módulos personalizados con el kernel. Algunos proveedores han realizado cambios en el propio kernel y todo el paquete personalizado se convierte en el BSP. Esto sucede mucho en el mundo integrado.

HAL

HAL (Capa de abstracción de hardware) puede ser sinónimo de BSP. No he visto que se use mucho en el mundo Linux, pero cuando te metes en los microcontroladores, se usa con bastante frecuencia. Básicamente, HAL es un conjunto de bibliotecas que se utilizan para acceder al hardware, lo que facilita mucho la interfaz con el hardware. Por ejemplo, con un chip wifi, le brindará rutinas básicas para conectarse a un AP, escanear la red, crear un punto de acceso, etc. En ese sentido, actúa como un controlador.

información relacionada