31
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 IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

Embed Size (px)

Citation preview

Page 1: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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

Page 2: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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

Page 3: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

MCIC IPN 3

OBJETIVO GENERAL

Programar un microcontrolador de 8 bits a través del puerto paralelo a partir de un archivo hexadecimal.

Page 4: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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.

Page 5: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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.

Page 6: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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.

Page 7: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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”.

Page 8: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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.

Page 9: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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.

Page 10: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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.

Page 11: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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.

Page 12: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

MCIC IPN 12

DIAGRAMA A BLOQUES DEL SISTEMA

FIG. 1 DIAGRAMA A BLOQUES, DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX

Page 13: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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.

Page 14: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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.

Page 15: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

MCIC IPN 15

DISEÑO DEL HARDWAREComunicación serial

FIG 4. Diagrama de conexión por puerto paralelo.

Page 16: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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

Page 17: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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.

Page 18: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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

Page 19: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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

Page 20: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

MCIC IPN 20

BLOQUES INTERNOS

FIG 6. Programación serial

Programacion SPI

Page 21: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

MCIC IPN 21

BLOQUES INTERNOSMemoria

FIG 7. Programación de memoria Flash ATmega8535

Page 22: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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");}

Page 23: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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; }

Page 24: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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; }}

Page 25: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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; }

Page 26: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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

Page 27: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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

Page 28: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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.

Page 29: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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.

Page 30: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

MCIC IPN 30

RECOMENDACIONES

Hay que evaluar continuamente.

Comparación de propuestas y experiencias propias para encaminarse hacia el cumplimiento de los objetivos.

Page 31: MCIC IPN1 DEVICE DRIVER PARA MICROCONTROLADOR EN LINUX POR: MARIA GUADALUPE DOMINGUEZ URBAN PROGRAMACION DE SISTEMAS 05/NOV/07 INSTITUTO POLITÉCNICO NACIONAL

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