Upload
renato-almeida
View
102
Download
0
Embed Size (px)
Citation preview
MCIC IPN 1
DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX
POR: MARIA GUADALUPE DOMINGUEZ URBAN
PROGRAMACION DE SISTEMAS
05/NOV/07
INSTITUTO POLITÉCNICO NACIONAL
CENTRO DE INVESTIGACIÓN EN COMPUTACIÓN
MCIC IPN 2
05/NOV/07
ÍNDICE DE PRESENTACIÓN
• Objetivos– Objetivos Generales
– Objetivos Específicos
• Planteamiento del Problema• Justificación• Introducción a Device Drivers• Diagrama a bloques del sistema• Diseño Del Software
• Diseño Del Hardware• Etapas del Proyecto y
Calendarización• Diagramas internos • Partes importantes de código• Pruebas y resultados obtenidos• Trabajos futuros• Recomendaciones• Referencias Bibliográficas
MCIC IPN 3
OBJETIVO GENERAL
Programar un microcontrolador de 8 bits a través del puerto paralelo a partir de un archivo hexadecimal.
MCIC IPN 4
OBJETIVOS ESPECÍFICOS
Realizar un Device Driver para establecer comunicación mediante puerto paralelo.
Realizar un programa que utilice el Device Driver para enviar bits de información mediante puerto paralelo.
Realizar un programa codificado en C para programar un microcontrolador de 8 bits utilizando el Device Driver realizado.
MCIC IPN 5
PLANTEAMIENTO DEL PROBLEMA
Desarrollar controladores de dispositivos para Linux implica tener conocimiento de programación en C y programación del Microprocesador. Escribir controladores de dispositivos para Linux ante la necesidad de acceder a un dispositivo en específico y la velocidad con que surgen otros nuevos, con lo que los anteriores se vuelven obsoletos.
MCIC IPN 6
JUSTIFICACIÓN
Un Device Driver actúa como un traductor entre un dispositivo y las aplicaciones o los sistemas operativos que los usan. El código de alto nivel puede ser escrito independientemente del dispositivo especifico que controlará. Cada versión de un dispositivo tal como una impresora, requiere sus propios comandos especializados. El Driver acepta declaraciones de alto nivel y los convierte a comandos de bajo nivel requeridos por el dispositivo.
MCIC IPN 7
RESUMEN DE LA INVESTIGACIÓN DOCUMENTAL
¿Qué es un device driver?
Device driver o software driver es un programa que permite a los programas de alto nivel, interactuar con un dispositivo de hardware de computadora. Un driver es flexible si ofrece capacidad de acceder fácilmente a un dispositivo sin agregar limitaciones.
“Escribir código para acceder al hardware pero no limitarlo a un propósito específico ya que los requerimientos de un usuario no son los mismos que para otro”.
MCIC IPN 8
RESUMEN DE LA INVESTIGACIÓN DOCUMENTAL
Clases de dispositivos y módulos
1.- Dispositivo de carácter: se puede ingresar como una cadena de bytes. Implementa al menos las llamadas al sistema open, close, read y write.
2.- Dispositivos de bloque: pueden albergar un sistema de archivos. Almacenan cantidades masivas de datos y que sólo pueden realizar operaciones de entrada/salida en las que se transfieren uno o más bloques de datos.
MCIC IPN 9
RESUMEN DE LA INVESTIGACIÓN DOCUMENTAL
Clases de dispositivos y módulos
3.- Dispositivos de red o network interfaces, donde la entrada/salida se realiza por dispositivos especializados de comunicaciones. El objetivo de un driver de red es la gestión del envío y recepción de paquetes de datos.
MCIC IPN 10
RESUMEN DE LA INVESTIGACIÓN DOCUMENTAL
Tipos de Microcontroladores
Existe una gran diversidad de microcontroladores. Se clasifican entre microcontroladores de 4, 8, 16 ó 32 bits. Aunque las prestaciones de los microcontroladores de 16 y 32 bits son superiores a los de 4 y 8 bits, los microcontroladores de 8 bits dominan el mercado y los de 4 bits se resisten a desaparecer.
MCIC IPN 11
RESUMEN DE LA INVESTIGACIÓN DOCUMENTAL
Arquitectura básica
Actualmente tanto la industria de los computadores comerciales como la de los microcontroladores están decantándose hacia la filosofía RISC.
En estos procesadores el repertorio de instrucciones máquina es muy reducido y las instrucciones son simples y, generalmente, se ejecutan en un ciclo. La sencillez y rapidez de las instrucciones permiten optimizar el hardware y el software del procesador.
MCIC IPN 12
DIAGRAMA A BLOQUES DEL SISTEMA
FIG. 1 DIAGRAMA A BLOQUES, DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX
MCIC IPN 13
DISEÑO DEL SOFTWARE• Una aplicación de usuario no tiene
permiso para acceder libremente a los dispositivos de entrada/salida, sino que debe hacerlo siempre a través de los drivers.
• En Linux los drivers son módulos software que pueden cargarse y descargarse dinámicamente del kernel.
• El módulo debe tener al menos dos operaciones:1. init module: para instalar el módulo2. cleanup module: para desinstalarlo FIG. 2 ESPACIO DE USUARIO Y ESPACIO DEL KERNEL.
MCIC IPN 14
DISEÑO DEL SOFTWARE
• Una aplicación puede hacer llamadas a funciones que no se han definido: la etapa de conexión resuelve referencias externas usando las librerías de funciones apropiadas.
• Un módulo, por el contrario, es conectado únicamente al kernel, y las únicas funciones que puede llamar son las aquellas expedidas por el kernel; no hay librerías para hacer la llamada a estas funciones.
MCIC IPN 15
DISEÑO DEL HARDWAREComunicación serial
FIG 4. Diagrama de conexión por puerto paralelo.
MCIC IPN 16
DISEÑO DEL HARDWARE
• La memoria del microprocesador puede ser programadas usando el bus SPI cuando el RESET se encuentra a tierra. La interfaz serial consiste en los pines SCK, MOSI (entrada), y MISO (salida). Después de que el RESET es puesto en bajo, es necesario habilitar la instrucción de programación, antes de cualquier operación de para programar o borrar.
FIG 5. Programación serial
MCIC IPN 17
ALCANCE DEL PROYECTO
Obtener mediante la programación en C un archivo hexadecimal que será enviado a través del puerto paralelo para programar un microcontrolador de 8 bits.
MCIC IPN 18
ETAPAS DEL PROYECTO Y CALENDARIZACIÓN
Actividad/Mes Agosto Septiembre Octubre Noviembre Diciembre
Semana 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
Consulta documental
Análisis
Diseño
Implementacion/Control
TAB. 1 ETAPAS Y CALENDARIZACIÓN DEL PROYECTO
MCIC IPN 19
BLOQUES INTERNOS
TAB. 2 EVENTOS DEL DEVICE DRIVER Y FUNCIONES EQUIVALENTES ENTRE EL ESPACIO DE USUARIO Y EL ESPAIO DEL KERNEL.
Device Driver
MCIC IPN 20
BLOQUES INTERNOS
FIG 6. Programación serial
Programacion SPI
MCIC IPN 21
BLOQUES INTERNOSMemoria
FIG 7. Programación de memoria Flash ATmega8535
MCIC IPN 22
PARTES IMPORTANTES DEL CÓDIGO
Inicializando el móduloint parlelport_init(void) { int result; /* registrando el dispositivo*/ result = register_chrdev(parlelport_major, "parlelport", &parlelport_fops); if (result < 0) { printk( "<1>parlelport: cannot obtain major number %d\n", parlelport_major); return result; }
Removiendo el módulovoid parlelport_exit(void) {unregister_chrdev(parlelport_major, "parlelport"); printk("<1>Removing parlelport module\n");}
MCIC IPN 23
PARTES IMPORTANTES DEL CÓDIGO
Abriendo el dispositivo como archivoint parlelport_open(struct inode *inode, struct file *filp) { /* Exitoso*/ return 0;}
Cerrando el dispositivo como archivoint parlelport_release(struct inode *inode, struct file *filp) {/* Exitoso*/ return 0; }
MCIC IPN 24
PARTES IMPORTANTES DEL CÓDIGO
Leyendo el dispositivo
ssize_t parlelport_read(struct file *filp, char *buf, size_t count, loff_t *f_pos) { /* Buffer para leer el dispositivo*/ char parlelport_buffer; /* Transfiriendo datos al espacio de usuario*/ copy_to_user(buf,&parlelport_buffer,1); /* Cambiando la posicion de lectura*/ if (*f_pos == 0) { *f_pos+=1; return 1; } else { return 0; }}
MCIC IPN 25
PARTES IMPORTANTES DEL CÓDIGO
Escribiendo al dispositivo
ssize_t parlelport_write( struct file *filp, char *buf, size_t count, loff_t *f_pos) {char *tmp; /* Buffer escribiendo al dispositivo*/ char parlelport_buffer; tmp=buf+count-1; copy_from_user(&parlelport_buffer,tmp,1); return 1; }
MCIC IPN 26
PRUEBAS Y RESULTADOS OBTENIDOS<hello.c> #include <linux/init.h>#include <linux/module.h>#include <linux/kernel.h>MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void) { printk("<1> Hello world!\n"); return 0;}static void hello_exit(void) { printk("<1> Bye, cruel world\n");}module_init(hello_init);module_exit(hello_exit);
<makefile>obj-m := nothing.o hello.o
MCIC IPN 27
PRUEBAS Y RESULTADOS OBTENIDOS
Desde la liberación de la versión del kernel 2.6.x, la compilación de los módulos se ha convertido en algo más complicada. En primer lugar, es necesario que usted tenga un completo, código fuente del árbol del kernel. Luego, hay que generar un Makefile.
A diferencia con las versiones anteriores del kernel, ahora también es necesario para compilar y cargar el módulo utilizando el mismo núcleo que vamos a utilizar. Para compilarlo, puede escribir:
$ make -C /usr/src/kernel-source-2.6.8 M=pwd modules
MCIC IPN 28
CONCLUSIONES
Habiendo estudiado el presente trabajo junto con las referencias marcadas se debe estar capacitado para construir device drivers propios y completos para hardware simple, o un device driver mínimo para hardware complejo. Entender algunos de estos conceptos simples acerca de el kernel Linux permitirá, en una forma fácil y rápida, llegar a desarrollar Device Drivers.
Esto permitirá estar a un paso de ser un verdadero desarrollador del kernel de Linux.
MCIC IPN 29
TRABAJOS FUTUROS
Seguir trabajando sobre comunicación de dispositivos externos mediante software.
Realizar Drivers para tarjetas PCI, USB.
Realizar un programa para utilizar dispositivos conectados a microcontroladores para propósito específico.
MCIC IPN 30
RECOMENDACIONES
Hay que evaluar continuamente.
Comparación de propuestas y experiencias propias para encaminarse hacia el cumplimiento de los objetivos.
MCIC IPN 31
REFERENCIAS BIBLIOGRÁFICAS
Claus Kühnel, AVR RISC Microcontroller Handbook, Newnes, 1998.
Dhananjay V. Gadre, Programming the parallel port: interfacing the PC for data acquisition and process control, R&D Books Lawrence, 1998.
Jonathan Corbet, Alessandro Rubini, Linux Device drivers, 20003
Asdrúbal López Chau, Microcontroladores AVR: configuración total de periféricos, CIGOME, 2006.
Páginas Web Consultadas
www.atmel.com
http://en.wikibooks.org/wiki/Embedded_Systems/Atmel_AVR
http://www.lancos.com/prog.html
http://www.bsd.cl/wiki/index.php?title=Sistemas_Embebidos_FreeBSD