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 .