Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial Internet of Things >> Incrustado

Controladores de dispositivos Linux integrados:comprensión de su función

Nota del editor:Embedded Linux se ha clasificado constantemente entre los principales sistemas operativos utilizados en el diseño de sistemas embebidos. Con el rápido crecimiento del interés en Internet de las cosas (IoT), la capacidad de Linux integrado para cumplir múltiples funciones resultará vital para satisfacer las diversas necesidades que se encuentran en cada capa de la jerarquía de aplicaciones de IoT. A su vez, la capacidad de los ingenieros para dominar los sistemas Linux integrados será fundamental para lograr un desarrollo rápido y confiable de sistemas más sofisticados. En Mastering Embedded Linux Programming - Second Edition, el autor Chris Simmonds lleva al lector a un recorrido detallado por la amplitud y profundidad de este importante sistema operativo, utilizando ejemplos detallados para ilustrar cada punto clave.

En este extracto, Capítulo 9, del libro, el autor describe cómo los controladores de dispositivos del kernel interactúan con el hardware del sistema y cómo los desarrolladores pueden escribir controladores de dispositivos y usarlos en sus aplicaciones. Las siguientes entregas presentan este extracto sobre los controladores de dispositivos de Linux integrados:

• Comprender su función

• Lectura del estado del controlador en tiempo de ejecución

• Controladores de dispositivo en el espacio de usuario

• Escribiendo un controlador de dispositivo del kernel

• Descubriendo la configuración del hardware

Adaptado de Dominio de la programación de Linux embebido - Segunda edición, por Chris Simmonds.

Capítulo 9. Interfaz con controladores de dispositivo

Los controladores de dispositivos del kernel son el mecanismo a través del cual el hardware subyacente se expone al resto del sistema. Como desarrollador de sistemas integrados, necesita saber cómo encajan estos controladores de dispositivo en la arquitectura general y cómo acceder a ellos desde programas de espacio de usuario. Es probable que su sistema tenga algunas piezas de hardware novedosas y tendrá que encontrar una forma de acceder a ellas. En muchos casos, encontrará que se le proporcionan controladores de dispositivo y puede lograr todo lo que desee sin escribir ningún código del kernel. Por ejemplo, puede manipular los pines GPIO y los LED utilizando archivos en sysfs, y existen bibliotecas para acceder a los buses seriales, incluida SPI (Interfaz de periféricos en serie) y yo 2 C (circuito interintegrado).

Hay muchos lugares para averiguar cómo escribir un controlador de dispositivo, pero pocos le dicen por qué querría hacerlo y las opciones que tiene para hacerlo. Esto es lo que quiero cubrir aquí. Sin embargo, recuerde que este no es un libro dedicado a escribir controladores de dispositivos del kernel y que la información que se proporciona aquí es para ayudarlo a navegar por el territorio, pero no necesariamente para configurar su hogar allí. Hay muchos libros y artículos buenos que le ayudarán a escribir controladores de dispositivos, algunos de los cuales se enumeran al final de este capítulo.

En este capítulo cubriremos los siguientes temas:

La función de los controladores de dispositivo

Como mencioné en el Capítulo 4, Configuración y construcción del kernel , una de las funciones del kernel es encapsular las muchas interfaces de hardware de un sistema informático y presentarlas de manera coherente a los programas espaciales de usuario. El kernel tiene marcos diseñados para facilitar la escritura de un controlador de dispositivo, que es el fragmento de código que media entre el kernel de arriba y el hardware de abajo. Un controlador de dispositivo puede estar escrito para controlar dispositivos físicos como un controlador UART o MMC, o puede representar un dispositivo virtual como el dispositivo nulo (/ dev / null) o un disco RAM. Un controlador puede controlar varios dispositivos del mismo tipo.

El código del controlador del dispositivo del kernel se ejecuta a un alto nivel de privilegios, al igual que el resto del kernel. Tiene acceso completo al espacio de direcciones del procesador y a los registros de hardware. Puede manejar interrupciones y transferencias DMA. Puede hacer uso de la sofisticada infraestructura del núcleo para la sincronización y la gestión de la memoria. Sin embargo, debe tener en cuenta que esto tiene una desventaja; si algo sale mal en un controlador con errores, puede salir realmente mal y hacer que el sistema se caiga. En consecuencia, existe el principio de que los controladores de dispositivos deben ser lo más simples posible con solo proporcionar información a las aplicaciones donde se toman las decisiones reales. A menudo escucha que esto se expresa como sin política en el kernel . Es responsabilidad del espacio de usuario establecer la política que gobierna el comportamiento general del sistema. Por ejemplo, la carga de módulos del kernel en respuesta a eventos externos, como conectar un nuevo dispositivo USB, es responsabilidad del programa de espacio de usuario, udev, no del kernel. El kernel solo proporciona un medio para cargar un módulo del kernel.

En Linux, hay tres tipos principales de controladores de dispositivo:

También hay un cuarto tipo que se presenta como un grupo de archivos en uno de los pseudo sistemas de archivos. Por ejemplo, puede acceder al controlador GPIO a través de un grupo de archivos en / sys / class / gpio, como describiré más adelante en este capítulo. Comencemos analizando con más detalle los tres tipos básicos de dispositivos.

Dispositivos de personajes

Los dispositivos de caracteres se identifican en el espacio de usuario mediante un archivo especial llamado nodo de dispositivo . . Este nombre de archivo se asigna a un controlador de dispositivo utilizando los números mayores y menores asociados a él. En términos generales, el número principal asigna el nodo del dispositivo a un controlador de dispositivo en particular, y el número menor le dice al conductor a qué interfaz se accede. Por ejemplo, el nodo del dispositivo del primer puerto serie en el ARM Versatile PB se llama / dev / ttyAMA0, y tiene el número mayor 204 y el número menor 64. El nodo del dispositivo para el segundo puerto serie tiene el mismo número mayor, ya que es manejado por el mismo controlador de dispositivo, pero el número menor es 65. Podemos ver los números de los cuatro puertos seriales de la lista de directorios aquí:

 # ls -l / dev / ttyAMA * crw-rw ---- 1 raíz raíz 204, 64 1 de enero de 1970 / dev / ttyAMA0crw-rw ---- 1 raíz raíz 204, 65 1 de enero de 1970 / dev / ttyAMA1crw-rw ---- 1 raíz raíz 204, 66 1 de enero de 1970 / dev / ttyAMA2crw-rw ---- 1 raíz raíz 204, 67 1 de enero de 1970 / dev / ttyAMA3 

La lista de números principales y secundarios estándar se puede encontrar en la documentación del kernel en Documentation / devices.txt. La lista no se actualiza con mucha frecuencia y no incluye el dispositivo ttyAMA descrito en el párrafo anterior. Sin embargo, si observa el código fuente del kernel en drivers / tty / serial / amba-pl011.c, verá dónde se declaran los números mayor y menor:

 #define SERIAL_AMBA_MAJOR 204 #define SERIAL_AMBA_MINOR 64 

Cuando hay más de una instancia de un dispositivo, como con el controlador ttyAMA, la convención para formar el nombre del nodo del dispositivo es tomar un nombre base, ttyAMA, y agregar el número de instancia de 0 a 3 en este ejemplo.

Como mencioné en el Capítulo 5, Creación de un sistema de archivos raíz , los nodos del dispositivo se pueden crear de varias formas:

Es posible que tenga la impresión de los números que he usado anteriormente de que tanto los números mayores como los menores son números de 8 bits en el rango de 0 a 255. De hecho, desde Linux 2.6 en adelante, el número mayor es de 12 bits, lo que da números válidos. de 1 a 4.095, y el número menor es de 20 bits, de 0 a 1.048.575.


Incrustado

  1. Rol de los sistemas integrados en automóviles
  2. El papel diverso del epoxi en la fabricación de PCB de dispositivos IoT
  3. Las tecnologías clave potencian el papel cada vez mayor de la visión integrada
  4. Actualizaciones OTA para Embedded Linux, parte 2 - Una comparación de los sistemas de actualización estándar
  5. Actualizaciones de OTA para Embedded Linux, parte 1 - Fundamentos e implementación
  6. Controladores de dispositivo Linux integrados:Descubriendo la configuración de hardware
  7. La plataforma de código abierto apunta a IoT con Linux incorporado
  8. Blog:Comprender el papel de PDMS en el ámbito de la microfluídica
  9. De IoT a Cryptojacking:comprensión de las nuevas amenazas para dispositivos móviles
  10. Una introducción a la piratería de hardware integrado en dispositivos IoT
  11. Componentes de CAM y su función en el mecanizado CNC