¿Qué es un driver?
Un driver, o controlador de dispositivo o simplemente controlador, es un tipo especial de programa de software que controla un dispositivo de hardware específico conectado a una computadora. Los drivers son esenciales para que una computadora funcione correctamente.
Los drivers proporcionan una interfaz de software para el hardware conectado que permite al sistema operativo (SO) y a otras aplicaciones acceder a las funcionalidades de ese hardware. Hay drivers para teclados, ratones e impresoras, por ejemplo.
Estos programas son compactos, pero permiten a una computadora interactuar con el hardware y trabajar con redes, almacenamiento y gráficos.
Los drivers dependen del hardware y son específicos del sistema operativo. Se comunican con el hardware de la computadora a través de un bus informático o un subsistema de comunicaciones que está conectado al hardware.
Los términos controlador de hardware y controlador de software también pueden utilizarse indistintamente como controlador de dispositivo. Sin embargo, controlador de hardware y software se utilizan para enfatizar el tipo de conexión.
¿Cómo funcionan los drivers?
Los drivers suelen ejecutarse con un alto nivel de privilegios dentro del entorno de ejecución del sistema operativo (SO). Algunos drivers pueden estar vinculados directamente al núcleo del sistema operativo, que es la parte central del sistema operativo que gestiona los recursos del sistema y el hardware. Estos drivers permiten una comunicación y un control más eficaces de los dispositivos de hardware.
Una parte de un sistema operativo, como Windows, Linux o macOS, permanece residente en memoria. Esto significa que una parte del sistema operativo permanece cargada en la RAM de la computadora mientras el sistema está en funcionamiento y se encarga de la ejecución del resto del código, incluidos los drivers. Los drivers transmiten las solicitudes de acceso y acciones de los dispositivos desde el sistema operativo y sus aplicaciones activas a sus respectivos dispositivos de hardware. También envían salidas o mensajes de estado desde los dispositivos de hardware al sistema operativo y, por lo tanto, a las aplicaciones.
La mayoría de los programas de software no necesitan saber cómo trabajar directamente con el hardware debido al trabajo que realizan los drivers. En su lugar, el programa y el driver sólo necesitan saber cómo interactuar entre sí.
La mayoría de las veces, los drivers se instalan automáticamente y no requieren atención adicional. Sin embargo, algunos controladores requieren una actualización ocasional.
Finalidad de los drivers
Los drivers son necesarios para permitir que una computadora interactúe con dispositivos específicos. Definen los mensajes y mecanismos mediante los cuales la computadora (el sistema operativo y las aplicaciones) puede acceder al dispositivo o realizar solicitudes para que el dispositivo las cumpla. También manejan las respuestas y los mensajes del dispositivo para su entrega a la computadora.
Los drivers actúan esencialmente como un traductor para los dispositivos de hardware y el sistema operativo y las aplicaciones conectadas a él.
Tipos de drivers
Invariablemente, los dispositivos de hardware pertenecen a una clase específica, como Bluetooth o las redes inalámbricas 802.11xx. La creación de cualquier driver específico comienza trabajando dentro del framework de su clase. Dentro de esa clase, un tipo concreto de dispositivo, como el audio, los teclados o los ratones Bluetooth, también entra dentro de un framework de driver relacionado.
Por último, para un dispositivo concreto, dentro de sus frameworks de clase y tipo, el software del driver interactúa con ese dispositivo utilizando su conjunto de comandos nativo y sus capacidades de gestión de datos, tal y como las define y publica su fabricante. Además, los drivers de dispositivos pueden acceder a dispositivos físicos (hardware real) o virtuales (emulaciones de hardware en un programa de software). Los primeros se denominan drivers físicos y los segundos, drivers virtuales.
Existen varios tipos posibles de drivers de dispositivos, entre los que se incluyen los siguientes:
- BIOS. Estos drivers se encargan de arrancar la computadora, realizar las pruebas de inicio y proporcionar los drivers para el hardware básico. Los drivers de dispositivos de la BIOS se encuentran en la memoria de sólo lectura.
- Drivers de bloque. Estos drivers ofrecen un acceso estructurado al hardware. Utilizan búferes del sistema de archivos para reducir las operaciones de E/S.
- Drivers de caracteres. Estos drivers ofrecen un acceso no estructurado al hardware correspondiente. Los datos se transfieren hacia y desde los dispositivos sin utilizar direcciones de dispositivo específicas. También proporcionan interfaces para comandos de control de E/S, asignación de memoria y sondeo de dispositivos.
- Drivers de dispositivos del Kernel. Estos drivers se cargan con el sistema operativo para el hardware principal, como los procesadores. Permiten una comunicación y un control más eficaces de los dispositivos de hardware. Funcionan por capas: los controladores de nivel superior filtran los datos antes de pasarlos a los de nivel inferior.
- Drivers de placa base. Estos drivers permiten las operaciones básicas de la computadora y la conectividad de periféricos en el sistema operativo. Son específicos de los modelos de chipset y pueden necesitar drivers adicionales para funcionar plenamente.
- Drivers de código abierto. Estos drivers están disponibles de forma gratuita bajo una licencia de código abierto. Suelen ser transparentes, ya que el código fuente está abierto a cualquiera, lo que permite comprobar si hay algún código malicioso.
- Drivers de fabricantes de equipos originales. Los drivers OEM son creados por los fabricantes de equipos originales. Son drivers propietarios y se instalan por separado para permitir la funcionalidad de hardware adicional.
- Drivers de dispositivos en modo-usuario. Estos drivers se ejecutan en modo de usuario y gestionan los dispositivos externos a los que pueden conectarse los usuarios. En Windows, sirven de interfaz entre las aplicaciones y los drivers en modo-kernel.
- Drivers de dispositivos virtuales. Controlan las máquinas virtuales. Los drivers de dispositivos virtuales emulan el hardware del dispositivo host.
Ejemplos de drivers de dispositivos
Si un administrador ejecuta el comando driverquery en Microsoft Windows dentro de PowerShell o en la línea de comandos, se obtiene una lista de todos los drivers de dispositivo instalados en el equipo host. En Linux y macOS, si se ejecuta el comando lsmod en la línea de comandos, también se muestran los módulos de drivers. No es inusual que una laptop o computadora de escritorio típico muestre cientos de drivers.
Al examinar este resultado, se obtiene información útil sobre los drivers, como el nombre del módulo, el tipo de driver y el nombre para mostrar que se utiliza para identificar un driver. A continuación, se incluye una breve muestra de Windows 10.
Module Name Display Name Driver Type Link Date
============ ====================== ============= ====================
1394ohci 1394 OHCI Compliant Ho Kernel
3ware 3ware Kernel 5/18/2015 5:28:03 PM
ACPI Microsoft ACPI Driver Kernel
AcpiDev ACPI Devices driver Kernel
Hay muchos tipos diferentes de dispositivos que también pueden tener sus propios drivers respectivos. Algunos ejemplos de estos drivers más específicos son los siguientes:
- Drivers de Bluetooth.
- Drivers para ratones.
- Drivers de cámaras digitales.
- Drivers de tarjetas gráficas.
- Drivers de teclado.
- Drivers de placa base.
- Drivers de tarjetas de red.
- Drivers de chipset de PC.
- Drivers de impresoras.
- Drivers de tarjetas de sonido.
- Drivers de controlador de almacenamiento.
- Drivers de dispositivos USB.
- Drivers de tarjetas de vídeo.
Software para drivers
En los inicios de la programación, los drivers solían escribirse en lenguaje ensamblador, un lenguaje de bajo nivel que puede acceder a las instrucciones del hardware y la CPU de forma inmediata y directa. Hoy en día, la mayoría de los programadores que escriben drivers trabajan con el lenguaje de programación C o C++, porque ofrece un excelente acceso a instrucciones de bajo nivel junto con estructuras de datos y programas más complejos.
Las pruebas de los drivers deben incorporar tanto cuestiones de seguridad como de funcionamiento. Dado que este tipo de software se ejecuta con altos niveles de privilegio, podría poner en peligro el sistema o provocar vulnerabilidades en el ámbito de la seguridad, o fallos absolutos por bloqueo o congelación y problemas de rendimiento en el ámbito operativo.