320 likes | 482 Views
INSTITUTO POLITÉCNICO NACIONAL. DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX. CENTRO DE INVESTIGACIÓN EN COMPUTACIÓN. POR: MARIA GUADALUPE DOMINGUEZ URBAN. PROGRAMACION DE SISTEMAS. 05/NOV/07. Objetivos Objetivos Generales Objetivos Específicos Planteamiento del Problema
E N D
INSTITUTO POLITÉCNICO NACIONAL DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX CENTRO DE INVESTIGACIÓN EN COMPUTACIÓN POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 MCIC IPN
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 ÍNDICE DE PRESENTACIÓN 05/NOV/07 MCIC IPN
OBJETIVO GENERAL Programar un microcontrolador de 8 bits a través del puerto paralelo a partir de un archivo hexadecimal. MCIC IPN
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
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
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
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
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
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
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
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
DIAGRAMA A BLOQUES DEL SISTEMA FIG. 1 DIAGRAMA A BLOQUES, DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX MCIC IPN
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ódulo 2. cleanup module: para desinstalarlo FIG. 2 ESPACIO DE USUARIO Y ESPACIO DEL KERNEL. MCIC IPN
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
FIG 4. Diagrama de conexión por puerto paralelo. DISEÑO DEL HARDWARE Comunicación serial MCIC IPN
FIG 5. Programación serial 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. MCIC IPN
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
ETAPAS DEL PROYECTO Y CALENDARIZACIÓN TAB. 1 ETAPAS Y CALENDARIZACIÓN DEL PROYECTO MCIC IPN
BLOQUES INTERNOS Device Driver TAB. 2 EVENTOS DEL DEVICE DRIVER Y FUNCIONES EQUIVALENTES ENTRE EL ESPACIO DE USUARIO Y EL ESPAIO DEL KERNEL. MCIC IPN
FIG 6. Programación serial BLOQUES INTERNOS Programacion SPI MCIC IPN
FIG 7. Programación de memoria Flash ATmega8535 BLOQUES INTERNOS Memoria MCIC IPN
PARTES IMPORTANTES DEL CÓDIGO Inicializando el módulo int 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ódulo void parlelport_exit(void) { unregister_chrdev(parlelport_major, "parlelport"); printk("<1>Removing parlelport module\n"); } MCIC IPN
PARTES IMPORTANTES DEL CÓDIGO Abriendo el dispositivo como archivo int parlelport_open(struct inode *inode, struct file *filp) { /* Exitoso*/ return 0; } Cerrando el dispositivo como archivo int parlelport_release(struct inode *inode, struct file *filp) { /* Exitoso*/ return 0; } MCIC IPN
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
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
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
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
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
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
RECOMENDACIONES Hay que evaluar continuamente. Comparación de propuestas y experiencias propias para encaminarse hacia el cumplimiento de los objetivos. MCIC IPN
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 MCIC IPN