Leyendo Be Book – cómo hacer un driver

Introducción

Escribir el driver de un dispositivo requiere conocimientos adicionales de cómo funciona BeOS/Haiku. Este artículo es parte traducción parte cosecha propia, es traducción de los capítulos de BeBook acerca de cómo programar un driver.

El Kernel y el Driver Author

El Kernel de BeOS/Haiku contiene las funcionalidades básicas del sistema operativo:

  • El proceso de inicio del sistema
  • La gestión de memoria y los hilos
  • Administrar el bus PCI e ISA
  • Gestionar el sistema de archivos (devfs, administra /dev), el sistema raíz (rootfs, administra /)
  • Otras cosas…

Eso no es suficiente para la mayoría de las aplicaciones, el Kernel es extensible utilizando add-ons. Durante el inicio del sistema se cargan addons para manejar cosas como:

  • Sistemas  de archivos reales, como FAT, NTFS…
  • Dispositivos, como la pantalla, el ratón, el teclado…
  • Los Buses del sistema, etc…

Tipos de Kernel Add-on

Hay 3 tipos de Kernel Add-on:

  1. Los drivers de dispositivos son add-ons que se comunican directamente con el dispositivo.
  2. Los módulos del espacio del kernel que exportan API para su uso con los drivers (o por otros módulos).
  3. Los sistemas de archivos son add-ons que soportan tipos específicos, como son BFS, DOSFS,HFS…

Drivers de dispositivos

Un driver de dispositivo es un add-on que reconoce un determinado dispositivo ( o una clase de éstos) y permite entender al resto del sistema para comunicarse con él. Normalmente esta comunicación implica el uso de protocolo específico de comunicación. Por ejemplo. si el sistema quiere usar una tarjeta de red Ethernet o una tarjeta gráfica, es necesario cargar addon que hace de driver del dispositivo que conoce como comunicarse con esa tarjeta. De manera similar, el código que conoce como hablar con una determinada clase de dispositivos (discos SCSI, dispositivos ATA, USB, etc.) debe implementarse como un addon que hace las veces de driver de dispositivo.

Los apartados de módulos y sistemas de archivos no han sido traducidos.

Interactuando con el Kernel

El kernel dispone de diversos servicios que pueden usarse con los drivers y los módulos. Esto incluye:

  • Habilitar y desabilitar interrupciones.
  • Configurar la para memoria para el acceso directo a memoria (DMA).
  • Acceder a otros dispositivos y módulos.

El Kernel además, a nivel de usuario, dispone de un API cuasi-Posix para el acceso a dispositivos. Una aplicación puede abrir un dispositivo con open(), y usarlo con read(), write() e ioctl() para acceder al mismo.

Las llamadas Posix son convertidas a llamadas del sistema por el propio kernel, el cual usa vía devfs, el driver apropiado. El apartado de devfs no ha sido traducido.

Principios de implementación de Drivers

Gran parte de la estabilidad de BeOS/Haiku se debe a que existe un muro entre el kernel y las aplicaciones de usuario. Los drivers son grietas en este muro. Si un driver se comporta mal o falla, hay una gran posibilidad de que esto acuse un comportamiento inesperado o tire por completo al sistema. Es absolutamente crítico que los drivers no sólo sean cuidadosamente testados antes de ser publicados, además ellos deben seguir los siguientes principios al pie de la letra.

  • Kernel Space vs. User Space (espacio del Kernel contra espacio de usuario)

Una forma que puede reducir el riesgo de que el driver cause un fallo en el sistema es poniendo la mayoría del código en el espacio de usuario. Crear un driver que… [aquí he parado de traducir].

  • Código de sincronización
  • Funciones disponibles durante el Spinlocks
  • Usando Spinlocks
  • Deshabilitando interrupciones
  • Funciones disponibles cuando las interrupciones están deshabilitadas
  • No bloquees
  • No te adelantes
Anuncios
Deja un comentario

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: