Componentes Básicos de un Driver en Haiku OS


Un driver en Haiku OS consta de las siguientes partes esenciales:


1. Estructura del Módulo

Todo driver debe exportar una API específica que termina con driver_v1 para indicar la versión del API que soporta device_manager_introduction.rst:103-105 . La estructura básica incluye:


module_info: Información del módulo con nombre, flags y operaciones estándar haiku-module.h:50-54

driver_t: Estructura que define el nombre, métodos y tamaño del softc haiku-module.h:62-66

2. Funciones Obligatorias del Driver

El device manager espera las siguientes funciones de un módulo de driver device_manager_introduction.rst:70-101 :


supports_device(): Determina si el driver soporta un nodo de dispositivo padre dado

register_device(): Registra el nodo del dispositivo y puede reclamar recursos de I/O

init_driver(): Inicializa los recursos necesarios para el driver

uninit_driver(): Libera los recursos adquiridos por init_driver()

register_child_devices(): Registra nodos de dispositivos hijos o publica dispositivos

rescan_child_devices(): Se llama cuando se activa un rescaneo manual

device_removed(): Se llama cuando el dispositivo está por ser desregistrado

3. Funciones de Exportación Estándar

Los drivers deben exportar funciones estándar para integrarse con el sistema es1370.c:26-30 :


init_hardware(): Inicialización del hardware

init_driver(): Inicialización del driver

uninit_driver(): Limpieza del driver

publish_devices(): Publica los nombres de dispositivos disponibles

find_device(): Retorna los hooks del dispositivo

4. Device Hooks

Para publicar un dispositivo en /dev, el driver debe implementar hooks de dispositivo device_manager_introduction.rst:151-177 :


init_device(): Llamado cuando se abre el dispositivo por primera vez

uninit_device(): Llamado cuando se cierra el último descriptor

open(): Llamado al abrir el dispositivo

close(): Llamado al cerrar

free(): Libera estructuras de datos privadas

read() / write(): Operaciones de lectura/escritura

control(): Operaciones ioctl

select() / deselect(): Para I/O asíncrono

5. Ejemplo Práctico: Driver Gráfico

Los drivers gráficos como intel_extreme demuestran esta estructura driver.cpp:1-30 :


Incluyen headers necesarios (driver.h, device.h, lock.h)

Usan módulos del sistema (AGP, KernelExport, PCI)

Implementan todas las funciones requeridas

6. Gestión de Recursos

Los drivers deben manejar:


Memoria: Mapeo de registros del dispositivo, buffers DMA

Interrupciones: Registro de manejadores de interrupciones

Sincronización: Uso de mutexes y locks para acceso concurrente

Notas

La arquitectura de drivers de Haiku sigue un modelo jerárquico con un Device Manager central que coordina el descubrimiento, carga y comunicación entre drivers. Los drivers pueden ser de kernel (modo kernel) o tener componentes en espacio de usuario (como los accelerants en drivers gráficos). Para drivers de red, Haiku incluye una capa de compatibilidad con FreeBSD que permite usar drivers de FreeBSD con modificaciones mínimas haiku-module.h:102-122 .