linux-device-driver device-driver vxworks bsp

linux device driver - BSP vs controladores de dispositivos



linux-device-driver device-driver (4)

Mientras que entender cada uno por sí mismo (o tal vez no), parece que estoy muy lejos de entender las diferencias prácticas entre los dos.

Según tengo entendido, un BSP es un paquete de controladores y configuraciones que permite que una imagen del kernel arranque una placa (y es parte de ella). El controlador de dispositivo individual, opera en un componente específico (HW), interactuando en un lado con el núcleo del núcleo y en el otro lado con el dispositivo en sí.

Mirando el kernel de Linux, no me queda claro dónde comienza el rol de BSP y termina el rol de controlador de dispositivo. Específicamente, estoy acostumbrado a ver un BSP por placa por imagen, sin embargo, el Kernel de Linux genérico puede cargarse en cualquier familia de arquitectura con la misma imagen (está claro que para diferentes familias hay diferentes imágenes: x86, amd64, arm, etc ...), donde la placa específica y los controladores de periféricos se cargan por necesidad desde el initrd.

¿Hay un BSP para las distribuciones comunes de Linux Kernel? ¿O es BSP relevante solo para tableros de casos especiales?

¿Es este comportamiento similar en otros núcleos? VxWorks?

Y el último, ¿es común combinar diferentes BSP / s para generar una sola imagen que se ajuste a diferentes tableros?


El paquete de soporte de la placa incluye todo lo que se necesita para usar la placa mediante una aplicación. Estos incluyen controladores de dispositivos para los dispositivos en la placa y software de utilidad para programadores de aplicaciones. Un entorno de ventanas también está disponible en tableros multimedia. Los ingenieros de sistemas pueden agregar extensiones al tablero. Algunas aplicaciones requieren la reimplementación de parte de la bsp para mejoras. Aquí, la bsp desempeña un papel de implementación de referencia o un punto de partida para tales requisitos.

La confusión radica en el modelo de negocio. La placa de referencia o desarrollo no es un producto final / consumidor como un dispositivo móvil. Juega un papel importante para diseñar y desarrollar un producto como iPhone o Samsung Galaxy.

Un bsp genérico carecerá de optimización en la mayoría de los casos, por lo tanto, solo puede esperar un bsp genérico para el modelo de novato o donde se deja la optimización para que lo haga. En el caso de tableros baratos, el bsp es bastante genérico porque el productor invertirá menos en él.

No te estreses mucho en términos de kernel y espacio de usuario, ya que también hay micro-kernels disponibles. Aquí los controladores son parte del espacio de usuario! Nuevamente, piense en una placa de baja potencia que solo tiene una pieza de código sin ningún núcleo. Así que se reduce al software que soporta la placa para hacer su trabajo.


Hoy en día, las cosas son modulares para aumentar la reutilización, el desarrollo de software para sistemas integrados normalmente se divide en tres capas.

  • Kernel (que contiene manejo de tareas, programación, administración de memoria)
  • Stack (que es la capa superior en los controladores de dispositivos y proporciona implementaciones de protocolo para I2C, SPI, Ethernet, SDIO, serie, sistema de archivos, redes, etc.)
  • BSP = Controladores de dispositivo (que proporcionan acceso a los registros de cualquier controlador en hardware como los registros de I2C, SDIO, SPI, Ethernet_MAC, UART (serie) y manejo de interrupciones (ISR).

Board Support Package (controlador de dispositivo) es una capa de software que cambia con cada placa manteniendo las otras dos capas de software sin cambios.


Según mi experiencia, BSP es un alcance mucho más amplio. incluye el cargador de arranque, rootfs, kernel y controladores, etc., lo que significa que tener un BSP hace que su placa sea capaz de arrancar a sí misma. Los controladores hacen que los dispositivos funcionen y son solo una parte de BSP.

Los controladores no es igual a BSP.


Veo la relación entre los BSP y los controladores de dispositivos como "has-a" . Los paquetes de soporte de placa incluyen controladores de dispositivo.

Las diferencias entre BSPs y kernels no son fáciles de distinguir. Un kernel traduce las instrucciones al hardware. Los núcleos a menudo se escriben para familias particulares de hardware , por lo que no son tan portátiles o genéricos como parecen. Se trata de diferentes permutaciones del código para cada familia de arquitectura.

El BSP actúa como una especie de inverso: proporciona las herramientas e instrucciones para trabajar con el conjunto específico de hardware de esa placa. En situaciones específicas, controladas, el núcleo podría hacer este trabajo. Pero el BSP permite que cualquier pila de aplicación / kernel / sistema compatible use esa placa, siguiendo sus instrucciones de configuración .

Si solo necesita acceder a los ciclos de la CPU y la memoria, tal vez algunos protocolos (USB, Ethernet, un par de tipos de video), un núcleo con soporte de arquitectura amplia es fantástico, y hubo un momento en que la amplitud de esa abstracción de hardware se valoró por completo . Pero ahora, considere que la placa puede tener un conjunto de sensores (acelerómetro, magnetómetro, giroscopio, luz, proximidad, presión atmosférica, etc.), telefonía, puede haber múltiples CPU, múltiples GPU, etc. Se puede escribir un kernel para proporcionar VGA / DVI / HDMI / DisplayPort, y varias combinaciones de combinaciones de CPU / GPU, si / cuando alguien usa esos paquetes de hardware en particular, pero no es práctico escribir soporte para todos los contextos teóricos, en comparación con utilizar un BSP que está construido para un tablero específico. E incluso entonces, eso sería para un núcleo; La placa es capaz de soportar Linux, Windows, Android, Symbian, lo que sea.

Es por eso que existen esfuerzos como Yocto , para desacoplar aún más el kernel y el hardware. Los BSP hacen que los conjuntos de hardware sean extensibles más allá de una pila de kernel / os / app o dos, mientras que los kernels hacen que una pila particular de os / app sea portátil en múltiples arquitecturas de HW .