Capacidades Actuales del Controlador

El módulo del kernel hwbus_io.ko actúa como un controlador de dispositivo de caracteres enfocado en la inspección y exposición de parámetros PCI en espacio de usuario. En su estado de desarrollo actual, el controlador implementa los siguientes mecanismos funcionales:

  • Gestión de Parámetros de Módulo: El driver define e inicializa el parámetro hwbus_bdf_param, configurado por defecto con la dirección BDF "0000:02:00.0". Este parámetro se expone dinámicamente en el árbol de sysfs bajo la ruta /sys/module/hwbus_io/parameters/hwbus_bdf_param.

  • Registro de Dispositivo de Caracteres y Clase: Durante la fase de inicialización (init), el controlador reserva un número Major dinámico (registrado con el identificador 240 en /proc/devices) y crea la clase de dispositivo hwbusc. Esto automatiza la creación del nodo de carácter /dev/hwbusc a través de udev, así como su jerarquía asociada en /sys/class/hwbusc/hwbusc/.

  • Operación de Lectura (.read): Al invocar operaciones de lectura sobre /dev/hwbusc, la implementación interna consulta los registros del espacio de configuración PCI correspondientes al BDF asignado. La función mapea los identificadores de hardware y entrega exactamente 4 bytes estructurados como [VendorID (2 bytes) | DeviceID (2 bytes)] respetando la ordenación little-endian. La operación gestiona adecuadamente el puntero de archivo (f_pos), retornando los bytes leídos en la primera llamada y 0 (EOF) en accesos subsecuentes dentro de la misma sesión.

  • Protección de Escritura (.write): El controlador opera estrictamente en modo de solo lectura para las operaciones del dispositivo de caracteres. Las peticiones de escritura dirigidas a /dev/hwbusc son interceptadas y rechazadas intencionadamente en espacio de kernel, devolviendo la constante de error -EINVAL (Invalid argument).

Aislamiento Arquitectónico

El diseño del controlador cumple estrictamente con el principio de separación de espacio de kernel y espacio de usuario definido en el manifiesto:

  • Espacio de Kernel (src/driver/): La lógica de callbacks, gestión de estructuras PCI y comunicación con sysfs se compila exclusivamente mediante Kbuild contra los encabezados del kernel. No existe ninguna dependencia con bibliotecas de espacio de usuario.

  • Espacio de Usuario (include/user/, src/core/user/): Las librerías auxiliares (sysfs_utils, hwbus_error) para las herramientas de diagnóstico y pruebas POSIX se compilan contra glibc de forma totalmente aislada al módulo principal.