You are on page 1of 6

ASIGNATURA: Organizacin de archivos

PARCIAL:

SECCION: 603

NOMBRE DEL ESTUDIANTE: Norma Alejandra Arguijo Martnez

TRABAJO No: Tarea 2

FECHA DE ENTREGA: 25/07/2014

Como se desarrollan los drivers en C++


Esta sera una breve explicacin o introduccin sobre lo que hay que conocer para
desarrollar un driver:
1. Lo primero seria conocer las herramientas a utilizar
Para programar drivers no se usa el compilador del Dev ni del MVC++ ni de
ningn otro, se utiliza el DDK (Driver Development Kit), aunque se pueden
configurar tanto el MVC++ como el Dev para usar el compilador del DDK.
2. Lo segundo seria Conocer los conceptos de Modo usuario y Modo
Kernel
Que ser Modo Usuario (UMDF)?
R/En el modo de usuario, el cdigo que se ejecuta no tiene posibilidad de
acceder directamente al hardware o la memoria de referencia. Cdigo que
se ejecuta en modo de usuario debe delegar en las API del sistema para
acceder al hardware o la memoria. Debido a la proteccin que ofrece este
tipo de aislamiento, los cambios que produce pueden ser recuperables. La
mayor parte del cdigo que se ejecuta en su computadora se ejecuta en
modo de usuario.
Que ser Modo Kernel (KMDF)?
R/ En el modo Kernel, el cdigo que se ejecuta tiene acceso completo y sin
restricciones al hardware subyacente. Puede ejecutar cualquier instruccin
de la CPU y la referencia a cualquier direccin de memoria. Modo de ncleo
es generalmente reservado para las funciones de bajo nivel, de mayor
confianza del sistema operativo. Los accidentes en el modo kernel son
catastrficos; que detendrn todo el PC.
Cabe mencionar que hay que cambiar la mentalidad de "Compilar y probar" que
todos solemos adquirir mientras aprendemos a programar en modo usuario.
En el mundo de los drivers la situacin cambia y lo hace en forma drstica. No
compilar y probar el cdigo de un driver al menos que se entienda a ciencia cierta
qu es lo que realiza, y ms an si antes de compilarlo se va a modificar
secciones del cdigo.
Tambin es importante conocer el Libusb: es un conjunto de modo de usuario
para el control de las rutinas de transferencia de datos hacia y desde la USB los
dispositivos de los sistemas Unix sin la necesidad de que en modo de ncleo
conductores

En este esquema se muestra que en el modo de usuario es donde residen las


aplicaciones y el modo de kernel es donde residen los mdulos o drivers.

Modo de Usuario
(Aplicaciones)

Funciones tabla 1

Modo de Kernel
(Modulos o drivers)

Funciones tabla 2

Hardware

Ejemplo de cmo construir un driver


Para hacer este ejemplo se empezara creando un driver usando la librera Libusb.

En esta parte estamos declarando las variables de tipo struct


struct usb_bus *bus;
struct usb_device *dev;
struct usb_bus *busses;
En esta parte lo que hace que va recorriendo todos los buses buscando el
dispositivo que habamos definido anteriormente
for (bus = busses; bus; bus = bus->next)
{
for (dev = bus->devices; dev; dev = dev->next)
{
if ((dev->descriptor.idVendor == vendor) &&
(dev->descriptor.idProduct == product))
{
return dev;
}
}
}
return NULL;
}

Ahora el mtodo main

Esta parte de aqu lo que hace es que declaramos las estructuras del
dispositivo y lo buscamos usando la funcin anteriormente declarada:
int main()
{
struct usb_device *dev;
struct usb_dev_handle *udev;
dev = find_device(VENDOR, PRODUCT);
En esta parte es donde abrimos el dispositivo y deshabilitamos driver si es
que estaba funcionando antes:
udev = usb_open(dev);

usb_detach_kernel_driver_np(udev,dev->config->interface>altsetting->bInterfaceNumber);

En esta lnea de cdigo reservamos la interfaz para nuestra aplicacin:


reserva = usb_claim_interface(udev, 0);
En esta parte del cdigo es donde vamos a leer las interrupciones del ratn:
while (data[0] != 3)
{
data[0] = data[1] = data[2] = data[3] = 0; // (0 0 0 0)
// Leemos 4 bytes del dispositivo usando interrupt_read
intr = usb_interrupt_read(udev, 0x81, data, 4, 0);
for (i = 0; i < 4 && intr > 0; i++)
{
printf("%d ", data[i]);
}
// Reseteamos dispositivo para evitar que se sigan enviando
printf("\n");usb_clear_halt(udev, 0x81);

Salida del programa

You might also like