Haciendo un driver para Haiku OS

Introducción

Este artículo es parte traducción, parte cosecha propia, de un artículo publicado en la página oficial de Haiku. Ni que decir tiene que no pretendo con esto tener nada funcional, sino tener simplemente un artículo informativo de cuales son los primeros pason  para realizar un driver para esta plataforma. Lo que quiero con este artículo es colmar mi curiosidad.

Interfaz con el sistema operativo

El kernel driver se carga durante el inicio del sistema operativo, es iniciado por el sistema operativo y publicado en el área de usuario, pudiendo acceder al driver utilizando “user hooks”.

Para programar un kernel driver necesitamos codificar las siguientes rutinas:

  • init_hardware()
  • init_driver()
  • uninit_driver()
  • find_device()
  • publish_devices()

Los kernel drivers están dentro de dos carpetas en Haiku:

  • /boot/beos/system/add-ons/kernel/drivers/bin/: para drivers del sistema.
  • /boot/home/config/add-ons/kernel/drivers/bin/ : para los drivers add-on de usuario.

Los kernel drivers están apuntados por un enlace simbólico, localizado en:

  • /boot/beos/system/add-ons/kernel/drivers/dev/graphics

Y los driver de addons por parte del usuario están apuntados por un enlace simbólico, que está en:

  • /boot/home/config/add-ons/kernel/dev/graphics

Si surge algún problema con un determinado addon durante el inicio del sistema, puede accederse a una ventana de configuración presionando la barra espaciadora. Eligiendo “Safe Mode Options” | Disable User Addons” podremos continuar con la carga, esto no funciona en Haiku según he probado, pero si debe funcionar en BeOS.

Descripción en detalle de las rutinas del kernel driver

  1. init_hardware()– el sistema inicializa el kernel driver llamando a esta rutina durantre el inicio del sistema (startup). Esta rutina comprueba si bus del sistema está disponible, y si el dispositivo está presente.
  2. init_driver() – se ejecuta después de init_hardware(). init_driver() inicializa variables, como pueden ser, el nombre del dispositivo y abre el bus del sistema para su uso.
  3. publish_devices() – el sistema llama a todo el hardware del sistema que está disponible utilizando esta rutina. Los nombres son publicados como enlaces simbólicos en la carpeta /dev/. Este enlace simbólico apunta a la localización del driver.
  4. uninit_driver() – cuando el driver ya no es necesario, el sistema llama a uninit_driver() que liberará todos los recursos usados y cerrará todas las entradas al bus usadas por el driver.
  5. find_device() – devuelve todos los nombres de las rutinas asociados al “unique name”, y los deja preparados para su por parte del “drivers hooks”. Este “driver hooks” es el interfaz con el usuario, usado para acceder al driver en el kernel.

Interfaz para el Usuario

Una vez que el sistema operativo a inicializado el kernel driver, este está disponible para ser accesible utilizando las rutinas “hook”:

  • open_hook()
  • close_hook()
  • free_hook()
  • control_hook()
  • read_hook()
  • write_hook()

La instrucción open_hook()

La rutina open_hook() construye una información compartida con una estructura (struct) que puede ser accedida por todos los aceleradores (accelerants), contiene los ID de las tarjetas, el fabricante, las especificaciones y los valores de visibilidad si estos son necesarios.

La rutina close_hook()

Esta rutina cierra el  driver.

La rutina free_hook()

Cierra el kernel driver. El número de veces que el driver es abierto o cerrado queda almacenado en el log del sistema operativo, cuando el kernel driver se cierra por última vez se llama a free_hook(), destruyéndose además la información compartida en la estructura mencionada anteriormente.

La rutina control_hook()

Esta rutina se llama siempre que se quiera acceder al kernel_driver, otra función es activar o desactivar las rutinas de interrupción o ejecutar los comandos de los buses del sistema (PCI).

La rutina read_hook()

Esta rutina no se usa, devuelve el estado B_NOT_ALLOWEB.

La rutina write_hook()

Igual que read_hook, write_hook() devuelve el estado B_NOT_ALLOWEB.

 

Anuncios
Deja un comentario

1 comentario

  1. Tweets that mention Haciendo un driver para Haiku OS | Un paso más cerca de Japón -- Topsy.com

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: