Vous êtes sur la page 1sur 228

Universidad de Costa Rica Facultad de Ingeniera Escuela de Ingeniera Elctrica

IE 0502 Proyecto Elctrico

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

Por: Roberto Cardona Soto Agosto del 2004

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

Gua de Laboratorio de Sistemas Incrustados


Por: Roberto Cardona Soto

Sometido a la Escuela de Ingeniera Elctrica de la Facultad de Ingeniera de la Universidad de Costa Rica como requisito parcial para optar por el grado de: BACHILLER EN INGENIERA ELCTRICA Aprobado por el Tribunal:

___________________ Ing. Jorge Romero Chacn, Ph.D. Profesor Gua

___________________ Ing. Francisco Rojas Fonseca, M.Sc. Profesor Lector

___________________ Lic. Federico Ruiz Ugalde Profesor Lector

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

DEDICATORIA

A mi mam, a mi pap y a mi hermano.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

DERECHOS DE PROPIEDAD INTELECTUAL


Apache es una marca registrada de Apache Software Foundation. Ethernet es una marca registrada de Xerox Corporation. Geode es una marca registrada de National Semiconductor Corporation. SuperH es una marca registrada de of Hitachi, Ltd. Intel es una marca registrada de Intel Corporation. Linux es una marca registrada de Linus Torvalds. Microsoft es una marca registrada de Microsoft Corporation. NFS es una marca registrada de Sun Microsystems, Inc. POSIX es una marca registrada de Institute of Electric and Electronic Engineers, Inc. SanDisk y CompactFlash son marcadas registradas de SanDisk Corporation. UNIX es una marca registrada de The Open Group. USB es una marca registrada de Compaq Computer Corporation y NEC Corporation.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

RECONOCIMIENTOS

Al profesor, don Jorge Romero le agradezco por su positiva actitud y permanente voluntad de ayuda, y por la paciencia con todos los problemas que tuve durante el desarrollo de este proyecto. A Alexis Maldonado le agradezco sus aportes y recomendaciones durante la primera parte del proyecto. A Federico Ruiz tambin le agradezco su ayuda, y sus consejos, as como el haber atendido mis consultas en muchas ocasiones a altas horas de la noche, por largos perodos de tiempo. A mi gran amigo Marco Villalta le agradezco su solidaridad, as como sus aportes y dedicacin, sobre todo en lo que respecta a electrnica analgica. A Francisco Rojas le agradezco por haberme ayudado como lector de este proyecto. Al director de la Escuela, Ing. Ismael Mazn, mi reconocimiento por haber extendido la fecha para la presentacin de los proyectos de graduacin durante el primer semestre de 2004.

As mismo a Felipe y Alejandro, mis socios en HQC, les agradezco por la cooperacin y entendimiento durante los meses que he estado al margen de las operaciones de la empresa.

A mis padres, por haberme dado todo el apoyo y mucha ayuda para hacer realidad este trabajo. A mi hermano Alejandro, quien, a pesar de estar lejos, le agradezco sus palabras de aliento para que lograra terminar a tiempo. Finalmente, a mi novia Devon, por haberme

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

dado apoyo y ganas de seguir, en momentos difciles, as como por haber entendido el poco tiempo que le dediqu durante el tiempo que estuve dedicado a esta tarea.

Sin ustedes no hubiera podido lograr hacer realidad este proyecto en tan poco tiempo.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

NDICE GENERAL

DERECHOS DE PROPIEDAD INTELECTUAL ......................................4 NDICE DE FIGURAS ...............................................................................11 NDICE DE TABLAS.................................................................................12 NOMENCLATURA....................................................................................13 RESUMEN ..................................................................................................15 CAPTULO 1: Introduccin.......................................................................16
1.1 Objetivos .......................................................................................................... 16 1.1.1 Objetivo General ....................................................................................... 16 1.1.2 Objetivos Especficos ................................................................................ 16 1.2 Metodologa...................................................................................................... 17 1.3 Justificacin...................................................................................................... 21

CAPTULO 2: Introduccin a los Sistemas Incrustados ..........................22


2.1 Qu es un sistema incrustado?................................................................................... 22 2.2 Pasos para la elaboracin de un sistema incrustado .................................................... 23

CAPITULO 3: PRIMERA PRACTICA, Introduccin al hardware e instalacin de GNU Linux...........................................................................25


3.1 Objetivo General ........................................................................................................ 25 3.2 Objetivos Especficos ................................................................................................. 25 3.3 Duracin..................................................................................................................... 25 3.4 Investigacin Previa ................................................................................................... 25 3.5 Marco Terico ............................................................................................................ 26 3.5.1 Dispositivo almacenamiento y sistema de archivos ......................................... 26 3.5.2 Bootloader ....................................................................................................... 27 3.5.3 Kernel .............................................................................................................. 30 3.5.4 Sistema de archivos raz (root filesystem)......................................................... 33

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

3.5.5 Inicializacin del sistema (init)......................................................................... 37 3.6 Preguntas.................................................................................................................... 38 3.7 Gua de procedimientos simplificada .......................................................................... 40 3.7.1 Paso 1: Exploracin e identificacin de componentes en SBC .......................... 40 3.7.2 Paso 2: Configuracin sistema husped ............................................................ 43 3.7.3 Paso 3: Creacin de sistema raz de archivos .................................................... 45 3.7.4 Paso 4: Creacin de scripts de inicializacin .................................................... 47 3.7.5 Paso 5: Creacin de dispositivo de almacenamiento en sistema raz de archivos ................................................................................................................................. 48 3.7.6 Paso 6: Configuracin y compilacin kernel..................................................... 49 3.7.7 Paso 7: Arranque inicial ................................................................................... 50 3.7.8 Paso 8: Creacin de sistema raz de archivos en memoria secundaria de SBC .. 52 3.7.9 Paso 9: Bootloader........................................................................................... 53 3.7.10 Paso 10: Arranque final.................................................................................. 54 3.8 Referencias Bibliogrficas .......................................................................................... 55 3.9 Solucin Propuesta ..................................................................................................... 55 3.9.1 Respuestas a Preguntas .................................................................................... 55 3.9.2 Procedimientos ................................................................................................ 58

CAPITULO 4: SEGUNDA PRACTICA, Interaccin con el mundo exterior mediante puertos de Entrada y Salida .........................................77
4.1 Objetivo General ........................................................................................................ 77 4.2 Objetivos Especficos ................................................................................................. 77 4.3 Duracin..................................................................................................................... 78 4.4 Investigacin Previa ................................................................................................... 78 4.5 Marco Terico ............................................................................................................ 79 4.5.1 Manejo de Recursos en GNU Linux................................................................. 79 4.5.2 Manejo de Interrupciones en GNU Linux......................................................... 80 4.5.3 El protocolo serial de comunicaciones EIA/RS-232 ......................................... 89 4.6 Preguntas.................................................................................................................... 91 4.7 Gua de procedimientos simplificada .......................................................................... 92 4.7.1 Paso 1: Utilizacin del BIOS de SBC para pruebas E/S.................................... 92 4.7.2 Paso 2: Pruebas de E/S con pantalla LCD y teclado.......................................... 93 4.7.3 Paso 3: Pruebas de E/S con puertos GPIO y LED............................................. 95 4.8 Referencias Bibliogrficas .......................................................................................... 96 4.9 Solucin Propuesta ..................................................................................................... 97 4.9.1 Respuestas a Preguntas .................................................................................... 97 4.9.2 Procedimiento .................................................................................................. 99

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

CAPITULO 5: TERCERA PRACTICA, Redes TCP/IP ........................ 122


5.1 Objetivo General ...................................................................................................... 122 5.2 Objetivos Especficos ............................................................................................... 122 5.3 Duracin................................................................................................................... 122 5.4 Investigacin Previa ................................................................................................. 122 5.5 Marco Terico .......................................................................................................... 123 5.5.1 Introduccin a modelos por capas en sistemas de comunicacin..................... 123 5.5.2 Implementacin de modelo en capas en redes TCP/IP .................................... 125 5.5.3 Introduccin a protocolos de capa dos y capa tres utilizados en las redes TCP/IP ............................................................................................................................... 129 5.5.4 Direccionamiento en redes IP........................................................................ 137 5.5.5 Introduccin a enrutamiento en redes IP......................................................... 139 5.6 Preguntas.................................................................................................................. 143 5.7 Gua de procedimientos simplificada ........................................................................ 144 5.7.1 Paso 1: Configuracin de parmetros de acceso a la red ................................. 144 5.7.2 Paso 2: Funcionamiento de SBC como enrutador ........................................... 145 5.7.3 Paso 3: Escriba un programa utilizando sockets ............................................. 146 5.8 Referencias Bibliogrficas ........................................................................................ 147 5.9 Solucin Propuesta ................................................................................................... 148 5.9.1 Respuestas a Preguntas .................................................................................. 148 5.9.2 Procedimiento ................................................................................................ 154

CAPTULO 6: PROPUESTA DE PRACTICA FINAL, Procesamiento digital de seales y sistemas en tiempo real ............................................. 164
6.1 Objetivo General ...................................................................................................... 164 6.2 Objetivos Especficos ............................................................................................... 164 6.3 Duracin................................................................................................................... 165 6.4 Investigacin Previa ................................................................................................. 165 6.5 Marco Terico .......................................................................................................... 166 6.5.1 Sistemas en tiempo real.................................................................................. 166 6.5.2 Conversin de seales de audio analgicas a formato digital .......................... 167 6.6 Gua de procedimientos simplificada ........................................................................ 169 6.6.1 Paso 1: Aplicacin de parche RTAI................................................................ 169 6.6.2 Paso 2: Digitalizacin de seal analgica de audio ......................................... 170 6.6.3 Paso 3: Programas de prueba para lectura de audio......................................... 170 6.6.4 Paso 4: Conversin D/A................................................................................. 171 6.6.5 Paso 5: Procesamiento digital de seales en tiempo real ................................. 172 6.7 Referencias Bibliogrficas ........................................................................................ 172

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

10

CAPTULO 8: Recomendaciones............................................................. 173 CAPTULO 9: Conclusiones .................................................................... 175 BIBLIOGRAFA....................................................................................... 176 APNDICES ............................................................................................. 184
A Introduccin Sistemas Operativos ............................................................................ 184 Relacin de hardware con sistema operativo ........................................................... 184 Conceptos bsicos de sistemas operativos............................................................... 187 B- Archivos de configuracin......................................................................................... 222

ANEXOS.................................................................................................... 223
A- Hojas fabricante ........................................................................................................ 223 B- Configuracin cable UTP en modo crossover ............................................................ 224 C- Conexiones de pines para puerto JTAG en tarjeta net4801......................................... 224 D- Fotos de la solucin de las prcticas .......................................................................... 225 E- Mensaje de booteo de GNU Linux en net4801 ........................................................... 227

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

11

NDICE DE FIGURAS

Figura 3.1: Mapa de SBC con coordenadas................................................................... 42 Figura 4.1: Pasos para el manejo de interrupciones en kernel de GNU Linux. ............... 82 Figura 4.2: Diagrama de conexiones entre LCD y SBC............................................... 100 Figura 5.1: Diagrama encabezado de paquete IP. ........................................................ 130 Figura 5.1: Diagrama encabezado de paquete TCP. .................................................... 134 Figura 5.3: Diagrama encabezado de paquete TCP. .................................................... 136 Figura 6.1: Pasos para conversin de una seal analgica a digital.............................. 167 Figura B.1: Detalle de conexiones de cable UTP en modo crossover .......................... 224 Figura D.1: SBC conectada funcionando .................................................................... 225 Figura D.2: SBC conectada a LCD y teclado .............................................................. 225 Figura D.3: Equipo de trabajo..................................................................................... 226

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

12

NDICE DE TABLAS

Tabla 3.1: Archivos especiales en /dev ......................................................................... 47 Tabla 5.1: Capas de modelo OSI................................................................................. 125 Tabla 5.2: Capas de modelo OSI................................................................................. 125 Tabla 5.1: Ejemplo de tabla de rutas IP....................................................................... 139 Tabla A.1: Capas de software E/S............................................................................... 215 Tabla C.1: Conexiones JTAG de tarjeta net4801......................................................... 224

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

13

NOMENCLATURA
PCI Peripheral Component Interconnect. Es un estndar para la conexin de dispositivos de alta velocidad al bus de la computadora.

USB

Universal Serial Bus. Es un estndar para interfaz de dispositivos entrada/salida con las computadoras modernas.

RAM

Random Access Memory o memoria de acceso aleatorio. Es la denominada memoria secundaria segn en el contexto de la teora de estructuras de computadoras.

BPS

Bits por segundo. Cuantifica la velocidad de una transmisin de datos.

Kernel

Ncleo del sistema operativo, es responsable de administracin de recursos as como el proceso de mediacin entre el usuario y el hardware.

Device driver

Es el programa que corre en el kernel y est encargado de manejar la comunicacin entre la computadora y algn dispositivo externo.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

14

SBC

Single board computer o computadora de tarjeta nica. Es el clsico circuito impreso de un sistema incrustado el cual se caracteriza por ser muy pequeo en comparacin con otras computadoras

LCD

Liquid cristal Display o pantalla de cristal lquido.

Polling

Proceso de solicitar estatus a un dispositivo constantemente.

Booteo

Inicializacin de una computadora, viene del verbo to boot del ingls.

Shell

Lnea de comandos en los sistemas operativos de la familia UNIX.

Root

Administrador en sistemas operativos de la familia UNIX.

Sniffer

Programa para decodificar los paquetes que viajan en una red.

Script

Pequeo programa interpretado en tiempo de ejecucin.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

15

RESUMEN
El presente documento consiste en un informe del trabajo realizado para la elaboracin de una gua para el curso Laboratorio de Sistemas Incrustados que desea impartir la Escuela de Ingeniera Elctrica como parte de su nueva concentracin a nivel de bachillerato en redes y computadoras.

Los procedimientos de esta gua giran alrededor de la utilizacin de una tarjeta SBC (single board computer) con un microprocesador basado en la arquitectura Intel x86 y el sistema operativo GNU Linux. La intencin principal del curso es que el estudiante se familiarice con los dispositivos y conceptos utilizados en sistemas incrustados as como con su implementacin. Este curso es de gran importancia, ya que representa la posibilidad de poner en prctica y relacionar muchos de los conceptos aprendidos en cursos anteriores, tales como Estructuras de Computadoras Digitales, Introduccin a la Computacin, Principios de Informtica y Circuitos Digitales, as como la posibilidad de descubrir la estrecha relacin que existe entre la ingeniera elctrica y la informtica.

El contenido de las prcticas contempla, entre otros, los siguientes procedimientos: programacin a bajo nivel en lenguaje C y ensamblador x86, manipulacin de puertos EIA/RS-232, acceso a redes TCP/IP, interaccin con pantallas de cristal lquido y sistemas en tiempo real.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

16

CAPTULO 1: Introduccin
1.1 Objetivos
1.1.1 Objetivo General El presente trabajo tiene como objetivo principal desarrollar una gua para un curso denominado Laboratorio de Sistemas Incrustados que, por iniciativa del Dr. Jorge Romero, se desea iniciar en la Escuela de Ingeniera Elctrica en un futuro.

1.1.2 Objetivos Especficos - Utilizar el sistema operativo GNU Linux para el sistema incrustado, y explicar, profundamente, de la mejor manera, su funcionamiento. - Introducir tericamente conceptos bsicos de los sistemas operativos. - Elaborar cuatro prcticas con el siguiente contenido: -Instalacin del sistema operativo -Interfaz con el mundo exterior mediante puertos de entrada y salida -Interaccin con redes TCP/IP -Procesamiento digital de audio en tiempo real

-Elaborar un informe con una posible solucin para cada prctica.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

17

1.2

Metodologa

Como primer paso, se evaluaron los requerimientos del curso para la Escuela de Ingeniera Elctrica, de forma que se adapte al plan de estudios de la carrera, as como al eventual plan de estudios de la concentracin en redes y computadoras.

Luego se procedi a buscar una tarjeta de sistema incrustado, y los componentes que se adecuaran a los requerimientos. Este proceso fue bastante tedioso, ya que en realidad hay pocas tarjetas en el mercado que renan una serie de requisitos que se buscaban para el curso. El requisito que complic ms la escogencia fue el hecho que la tarjeta no tuviera un puerto de video, lo que se estipul para darle un carcter ms realista al hardware, con el que se va a trabajar en el curso. Se decidi que la tarjeta modelo net4801 de Soekris Engineering era la ms adecuada, por lo que se escogi.

El siguiente paso fue. la bsqueda del material. Para ello se recurri a algunas bibliotecas en el exterior, como por ejemplo la biblioteca de ingeniera y ciencias de la computacin en la Universidad Estatal de Ohio, y la biblioteca de la Universidad de Konstanz en Alemania. Tambin se hicieron bsquedas exhaustivas en algunas tiendas en la lnea de libros de temas afines al proyecto, tal el caso de Amazon.

Para la elaboracin de la gua se buscaron cursos similares en otras universidades; por ejemplo en la Universidad de Pennsylvania y en la Escuela Tcnica Federal de Zrich,

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

18

Suiza (ETHZ). Adicionalmente se consigui la gua del curso de sistemas incrustados que se imparti en la Escuela de Ciencias de la Computacin e Informtica de la Universidad de Costa Rica.

Finalmente, se procedi a la elaboracin de la gua del laboratorio as como la solucin de las prcticas. A lo largo de la elaboracin de este documento se supuso que el curso va a tener un sitio web adonde los estudiantes pueden descargar los parches y programas necesarios para el desarrollo de los experimentos.

Adicional a la elaboracin de la gua, se realiz una introduccin a los sistemas operativos ya que, por ahora, no existe ningn curso en el plan de estudios que le ensee a los estudiantes el funcionamiento de los mismos. Es de suma importancia que los estudiantes, antes de empezar con las prcticas, lean la introduccin la cual se encuentra en el apndice de este documento ya que hay muchos conceptos de los sistemas operativos que se supone son de conocimiento del estudiante en el desarrollo de la gua.

En cuanto a las herramientas que se utilizaron para el desarrollo del proyecto, se cont con una tarjeta modelo net4801 de Soekris Engineering, la que dispone de un microprocesador basado en la arquitectura x86 de National Semiconductor modelo Geode SC1100 de 266 MHz, 128 megabytes de memoria RAM, y 512 kilobytes de memoria flash para el BIOS. Adicionalmente, la tarjeta tiene un puerto para utilizar una memoria flash tipo Compact Flash para almacenamiento, tres adaptadores Ethernet de 100 megabits por segundo, un

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

19

puerto USB versin 1.0, una ranura PCI limitada a 3.3 voltios, una ranura MiniPCI, dos puertos seriales RS232, doce puertos de entrada y salida de uso general (GPIO), y cuatro diodos LED. Esta tarjeta es alimentada por una fuente conmutada de mximo 16 voltios DC.

Adems se cont con lo siguiente:

-Una estacin de trabajo con la distribucin de GNU Linux Debian Woody, que sirvi como sistema husped. Esta computadora tiene un procesador Intel Pentium III de 900 MHz, 384 megabytes de memoria RAM, un disco duro de 30 gigabytes, dos adaptadores de red Ethernet y un puerto USB.

-Una pantalla LCD Matrix Orbital modelo LK204-25 de 4 lneas de 20 caracteres con interfaz RS-232 y I2C.

-Teclado de veinte teclas para conectar a controlador de la LCD.

-Cable serial en configuracin null modem para acceder el puerto de consola de la SBC.

-Cable UTP en configuracin crossover para conectar sistema husped con SBC.

-Lector de tarjetas CompactFlash marca SanDisk con interfaz USB.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

20

-Memoria flash tipo CompactFlash de 32 MB marca SanDisk.

En cuanto al sistema operativo del sistema incrustado se puede decir que la gua del curso se desarroll alrededor del sistema operativo GNU Linux, habida cuenta que es software open source, lo cual hace posible que su cdigo fuente sea accesible. Esto, para el caso de un curso acadmico, es de gran importancia ya que hace posible que los estudiantes puedan entender cmo funciona el sistema incrustado, de pies a cabeza.

Se opt por utilizar la versin del kernel 2.6 ya que sta, a pesar de ser relativamente nueva, incorpora las ltimas tecnologas. No siempre es adecuado utilizar el software ms nuevo para proyectos de la vida real; sin embargo, en este caso se considera necesario aprender a utilizar el ltimo kernel ya que la versin 2.4 pronto ser obsoleta para el desarrollo de sistemas empotrados.

No se utiliz ninguna distribucin de GNU Linux, sino que se arm el sistema operativo desde su base: el kernel. Existen algunas distribuciones de GNU Linux para sistemas empotrados tal como el Blue Cat Linux, o el PeeWee Linux las cuales hubieran ahorrado mucho tiempo y esfuerzo; sin embargo, esto no ayuda a cumplir uno de los objetivos de este trabajo: entender de forma profunda el funcionamiento y la estructura del sistema operativo del sistema incrustado.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

21

1.3

Justificacin

Una conversacin con el profesor Dr. Jorge Romero en febrero del ao en curso dio orgen a la idea de realizar este proyecto. Segn me explic don Jorge, la escuela planea poner a disposicin de los estudiantes un program de estudios de bachillerato en Ingeniera Elctrica con concentracin en computadoras y redes, y un curso en el campo de sistemas empotrados es sumamente importante para el programa de tal concentracin.

Mi experiencia con el sistema operativo GNU Linux a lo largo de varios aos, as como los trabajos realizados como desarrollador de software fueron los factores ms importantes en la decisin de hacer este proyecto mi trabajo de graduacin. Adems, siempre me interes trabajar en un proyecto, en el que se combinara el software con el hardware.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

22

CAPTULO 2: Introduccin a los Sistemas Incrustados

2.1 Qu es un sistema incrustado?


Un sistema incrustado es una computadora reducida, con un nmero limitado de componentes, y diseada para una aplicacin especfica. A diferencia de las computadoras porttiles o de escritorio ms populares, los sistemas incrustados tienen una capacidad limitada, la cual se define por los requerimientos de la aplicacin.

Un ejemplo tpico de un sistema incrustado es un telfono celular. Este es el caso de una computadora bastante compleja, cuyo diseo est enfocado a maximizar el rendimiento de la transmisin y recepcin de voz, por medio de un canal inalmbrico. Tpicamente, los sistemas empotrados cuentan con una cantidad de memoria reducida, as como un microprocesador con la capacidad estrictamente necesaria para llevar a cabo las tareas asociadas a la aplicacin. Prcticamente todos los sistemas incrustados se implementan en un solo circuito impreso, por lo que tambin se les conoce en ingls como single board computer o SBC.

Uno de los retos principales que tienen los diseadores de sistemas incrustados es enfrentarse con el gran nmero de componentes heterogneos que presentan sus aplicaciones. Por ejemplo, un sistema incrustado que controla la mezcla de gasolina de un

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

23

automvil tiene que interactuar con seales externas analgicas, piezas mecnicas externas, sensores y todo tipo de transductores.

Los sistemas incrustados se pueden implementar con unidades de procesamiento desde microcontroladores sencillos, de 8 bits hasta microprocesadores modernos de 64 bits. Tambin existe la posibilidad de implementar un sistema incrustado en otro tipo de unidades de procesamiento, tal como es el caso de los procesadores de seales digitales (DSP por sus siglas en ingls) o los circuitos integrados para aplicacin especfica (ASIC por sus siglas en ingls) que se implementan tpicamente con dispositivos tipo FPGA (Field Programmable Gate Array) o CPLD (Complex Programmable Logic Devices). En la mayora de los sistemas que implementan un microprocesador, se utiliza un sistema operativo avanzado para que realice las labores de control y organizacin de las tareas.

2.2 Pasos para la elaboracin de un sistema incrustado


A continuacin se enumera una serie de pasos que se deben seguir a la hora de disear un sistema incrustado: 1. Modelado 2. Simulacin 3. Descripcin 4. Sntesis 5. Implementacin

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

24

Debido al carcter prctico de los cursos tipo laboratorio, solamente se consider el paso de la implementacin para la elaboracin de esta gua. En esta etapa es indispensable contar con los requerimientos del sistema que se va a desarrollar, as como un detallado conocimiento del problema que el sistema incrustado va a resolver. Adicionalmente, se debe contar con la SBC as como con una computadora husped. En el caso que la plataforma de la SBC sea diferente a la del sistema husped, es muy importante contar con herramientas para compilar y armar los programas para la arquitectura de la SBC, las cuales se conocen como toolchain, as como utilidades para transferir los programas y datos al sistema incrustado. Para depurar los programas es muy til contar con un depurador remoto que le permita al ingeniero determinar el estado del hardware en ciertas etapas de la ejecucin del sistema operativo, as como los programas que van a ser ejecutados en la SBC.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

25

CAPITULO 3: PRIMERA PRACTICA, Introduccin al hardware e instalacin de GNU Linux


3.1 Objetivo General
Configurar una instalacin mnima de GNU Linux en la tarjeta del sistema incrustado.

3.2 Objetivos Especficos


Explorar e identificar los componentes de la tarjeta y todos sus puertos E/S. Instalar una versin mnima de GNU Linux en la tarjeta y examinar el proceso de booteo.

3.3 Duracin

La duracin recomendada para esta prctica es de cuatro sesiones de cuatro horas.

3.4 Investigacin Previa


La estructura del kernel de GNU Linux versin 2.6 de forma general.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

26

La arquitectura general de los procesadores de arquitectura IA-32 (Intel x86 de 32

bits) y su procedimiento de inicializacin

Los diferentes tipos de sistemas archivos disponibles para GNU Linux y qu

ventajas ofrecen unos sobre otros.

3.5 Marco Terico


3.5.1 Dispositivo almacenamiento y sistema de archivos

Como se mencion en la introduccin terica, el dispositivo de memoria secundaria que se utilizar en este laboratorio ser una memoria flash en formato de tarjeta Compact Flash conectada directamente al dispositivo controlador IDE de la SBC del sistema incrustado.

Esta memoria se debe preparar para la instalacin del sistema operativo mediante la creacin de una particin que sirva como inicio para el sistema y la eleccin de un sistema de archivos adecuado. Debido a las caractersticas de los sistemas incrustados, donde no se tiene control sobre el encendido y apagado, se recomienda usar un sistema tipo journaling.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

27

3.5.2 Bootloader

Cuando la computadora se enciende y el procesador termina sus rutinas internas de inicializacin, ste busca un programa en la posicin FFFFFFF0 de memoria fsica la cual corresponde al ROM del BIOS. Despus que el BIOS termina sus funciones, ste busca un pequeo programa en el MBR (Master Boot Record por sus siglas en ingls) en el disco duro designado para el inicio, determina cual particin es la designada para booteo y ejecuta el programa que se encuentra en el boot sector de esta particin. Este programa puede ser un bootloader tal como LILO o SYSLINUX o tambin puede ser un programa que cargue directamente el sistema operativo. La ventaja principal de utilizar un bootloader es que se pueden tener varios kernels en la computadora y se puede escoger cual se quiere utilizar cuando se inicia la computadora.

Luego que se escoge un kernel para el inicio, el bootloader tiene como tarea preparar el hardware y cargar el sistema operativo. Debido a esto prcticamente todo el cdigo del bootloader est escrito en lenguaje ensamblador. Cuando el bootloader termina, ste pasa el control al kernel el cual a su vez realiza algunas tareas dependientes de arquitectura y luego llama a la funcin start_kernel(), independiente de plataforma por lo tanto escrita en C, la cual es responsable por actividades de alto nivel tales como inicializacin del sistema operativo (el proceso conocido como init), cargar manejadores, montar los sistemas de archivos y otras.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

28

En el caso de la arquitectura x86 los bootloaders de tipo open source ms importantes son LILO, GRUB y SYSLINUX. La eleccin de cul usar est ntimamente relacionada a los requerimientos del sistema incrustado y las preferencias del diseador.

Para la configuracin inicial de un sistema incrustado en el cual la memoria secundaria no puede ser extrada para configurarla, existe una forma alternativa de cargar un sistema operativo a travs de la red local para luego configurar la memoria de la SBC. Esto se realiza utilizando el protocolo de Intel conocido como PXE el cual es parte de un estndar conocido como WfM (Wired for Management por sus siglas en ingls) el cual hace posible que una computadora realice todo el proceso de arranque sin necesidad de tener un disco duro local obteniendo el software necesario para iniciar de un servidor remoto.

Esta alternativa requiere de cuatro componentes en el sistema husped: el bootloader PXELINUX, un servidor NFS, un servidor TFTP y un servidor DHCP. A continuacin se explican estos componentes de forma concisa:

La implementacin para GNU Linux del protocolo PXE es una derivacin del bootloader SYSLINUX conocida como PXELINUX. Su sintaxis de configuracin es idntica al SYSLINUX y no tiene gran complejidad.

DHCP (Dynamic Host Configuration Protocol por sus siglas en ingls) es un protocolo que permite la configuracin de los parmetros de red, tales como direccin IP, mscara de

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

29

subred, puerta de enlace y otros, de una computadora de forma dinmica y automtica. Esto es algo de gran utilidad til a la hora de configurar grandes redes en las cuales sera muy difcil administrar cambios en los parmetros de la red en muchas computadoras simultneamente. Los componentes de un sistema DHCP son un cliente (el sistema incrustado en este caso) y un servidor (el sistema husped en este caso), el cliente solicita los parmetros de la red apenas entra a la misma y el servidor identifica esta solicitud y evala si debe o no asignarle parmetros para accesar la red.

TFTP (Trivial File Transfer Protocol por sus siglas en ingls) es un protocolo similar al conocido FTP, el cual tiene como caracterstica principal que no requiere autenticacin, adems que corre sobre el protocolo UDP. En el caso del esquema del trabajo con sistemas incrustados, el husped deber correr un servidor TFTP y el BIOS de la SBC deber disponer de un cliente TFTP para poder bajar los archivos necesarios para el arranque del husped.

NFS (Network File System por sus siglas en ingls) es un sistema de archivos que se extiende en a lo largo de una red y hace posible que se monten particiones o volmenes de sistemas remotos en una computadora. En el caso del esquema de trabajo de sistemas empotrados el husped deber ser el servidor NFS de forma tal que la SBC pueda montar, inicialmente, su sistema de archivos raz para luego configurar el propio en su memoria secundaria.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

30

El orden en que funcionan estos componentes es el siguiente: primero la SBC inicia y busca un servidor DHCP para acceder la red, el husped le asigna, mediante su servidor DHCP, los parmetros de acceso a la red, la SBC configura estos parmetros y accesa el servidor TFTP para descargar el bootloader SYSLINUX el cual inicializa el hardware, descarga el kernel a quien le otorga el control. Finalmente, el kernel monta el sistema raz de archivos y termina la inicializacin del sistema. A partir de este momento, el ingeniero puede realizar la parte final de la instalacin del sistema operativo en la SBC del sistema incrustado.

3.5.3 Kernel

El kernel es el ncleo del sistema operativo y sus funciones ms importantes son el ser intermediario entre los programas y el hardware y tambin la supervisin de todas las tareas que se llevan a cabo. Una tarea tpica de la supervisin es el manejo del secuenciador o scheduler de procesos el cual es responsable por decidir qu se corre cuando. El manejo de interrupciones de dispositivos externos es una tarea de la funcin de intermediario entre los programas del espacio de usuario y el hardware.

El kernel de GNU Linux tiene las siguientes caractersticas importantes:

Monoltico: Esto significa que el kernel contiene una gran cantidad de cdigo para el manejo de diferentes componentes del sistema lo que lo hace especialmente pequeo. El otro tipo de kernel es el microkernel el cual se caracteriza por ser altamente modular

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

31

dejando solo lo absolutamente necesario en el kernel y todo lo dems se considera mdulos. Por ejemplo, el sistema operativo MINIX del experto en sistemas operativos Andrew Tanenbaum, implementa un microkernel y se caracteriza por ser sumamente pequeo. Esto se debe a que el manejo de memoria y del sistema de archivos estn implementados como procesos de usuario y no del kernel.

Rpido y pequeo: A pesar de ser monoltico, el kernel de GNU Linux es sumamente rpido y pequeo en comparacin a otros sistemas operativos de la familia UNIX. Por ejemplo el kernel de GNU Linux puede caber en un solo disco floppy, algo poco comn en los otros sistemas operativos UNIX.

Capacidad de ser interrumpido: A partir de la versin menor 6 (2.6), el kernel de GNU Linux tiene la capacidad de ser interrumpido por otro proceso de ms prioridad siempre y cuando el kernel est en un momento seguro para ser interrumpido. Un momento seguro es cuando el kernel no tiene cerrado algn recurso para su uso exclusivo, por ejemplo algn mutex o semforo. Esto es de gran utilidad para los sistemas en tiempo real ya que ayuda a mantener la latencia de interrupciones y excepciones bastante baja.

Algunas consideraciones que se deben tener a la hora del desarrollo del kernel de GNU Linux son: no se puede usar la librera libc, el estndar del lenguaje C es GNU y no el comn ANSI, no hay proteccin de memoria y la pila disponible pequea. Todo esto hace

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

32

que el desarrollo sea muy limitado y obliga a tener cuidados extremos a la hora de hacerle cambios al kernel.

La configuracin y compilacin del kernel de GNU Linux 2.6 consta bsicamente de cuatro comandos: - make menuconfig para configurar las opciones que se desea tenga el kernel. - make bzImage para compilar la imagen. - make modules y make modules_install para configurar y compilar los mdulos que pueden ser cargados dinmicamente.

Existen otros comandos y parmetros ms especializados los cuales sirven para personalizar el proceso de compilacin, sobre esto se puede leer ms en las referencias bibliogrficas.

Las opciones que se desea tenga el kernel, ya sea incorporadas o como mdulos, dependen nicamente de los requerimientos del sistema que se est desarrollando. Es importante mencionar que entre ms pequeo sea el kernel, ms rpidas van a ser las operaciones del mismo y ms memoria va a estar libre por lo tanto el rendimiento del sistema va a ser mayor. En el caso de los sistemas incrustados se tiene una razn ms para hacer el kernel pequeo: el espacio de almacenamiento es sumamente limitado. Por estas razones es que el diseador debe ser sumamente estricto en cuanto a cuales opciones incorpora en el kernel para evitar limitaciones de rendimiento en el funcionamiento del sistema.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

33

Es importante mencionar que cuando se utiliza el comando make bzImage se le est diciendo al compilador que compile un kernel y lo comprima. El bootloader es el que ser responsable de descomprimirlo a la hora del inicio. Si no se utiliza un bootloader no se puede tener un kernel comprimido por lo que se reduce el tamao del kernel que se puede utilizar de 2.5 megabytes a un megabyte.

3.5.4 Sistema de archivos raz (root filesystem)

El sistema raz de archivos en GNU Linux, el cual se representa mediante el carcter /, es uno de los componentes bsicos de este sistema operativo ya que en l se encuentran los archivos ms importantes. A la hora de cargar el kernel, uno de los parmetros importantes que se le pasa al mismo es la ubicacin de este sistema mediante el comando root=/dev/hda1/ por ejemplo.

La organizacin tan caracterstica del sistema raz de archivos tiene mucho tiempo de existir y tiene todo una serie de razonamientos los cuales estn fuera del objetivo de este documento. Lo que es importante saber es que para lograr que el sistema operativo GNU Linux arranque de forma exitosa, debe existir un sistema de archivos raz.

La estructura bsica de un sistema de archivos raz es la siguiente:

IE-0502 /

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

34

/bin /dev /etc /lib /proc /sbin /tmp /usr

/modules

/bin /lib /sbin /lib /lock /log /run

/var

/tmp

Adicionalmente, se crea el directorio /mnt para tener donde montar particiones de dispositivos de almacenamiento locales o remotas para realizar algn procedimiento de instalacin o mantenimiento.

En el directorio /boot, se encuentra el kernel o ncleo del sistema operativo as como algunos archivos importantes para el bootloader. Por otro lado, el directorio /dev contiene una representacin de los dispositivos del sistema mediante un archivo especial. El directorio /etc contiene los archivos de configuracin para los diferentes programas que debe ejecutar la computadora.

El directorio /tmp se utiliza para almacenar archivos y datos transitorios los cuales se deben borrar con cada inicializacin nueva del sistema. Las libreras utilizadas por los programas

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

35

que corren en la computadora se encuentran en los directorios /lib, /usr/lib y /var/lib; sobre este tema se profundizar ms adelante. En /lib/modules se encuentran los mdulos

previamente compilados que puede cargar el kernel dinmicamente.

Los directorios /bin, /sbin, /usr/bin y /usr/sbin contienen los ejecutables de los programas que puede correr la computadora. Se ubicacin en uno u otro directorio obedece al tipo de programa en cuestin. Para el caso de un sistema incrustado es de poco inters mantener un orden muy estricto en cunto donde se ubican los diferentes archivos ejecutables.

El directorio /var contiene archivos de tamao variable que hacen referencia a los diferentes servicios y procesos que corren en el sistema. En /var/log se encuentran las bitcoras de los procesos del sistema incluyendo la del kernel la cual es manejada por el programa syslogd. El directorio /proc es un directorio vaco en el cual se monta el sistema de archivos virtual del kernel.

Existe una cantidad prcticamente ilimitada de programas que se pueden correr en una computadora con el sistema operativo GNU Linux pero, para un sistema incrustado, se busca que los programas disponibles sean estrictamente los necesarios para la aplicacin especfica. Se debe hacer una evaluacin de los requerimientos del sistema para decidir cules son los programas y las libreras que se deben instalar. Como mnimo, se recomienda instalar lo siguiente:

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

36

Libreras: glibc, ncurses

Ejecutables: Algn shell, alguna implementacin simple del programa init, ping, mount

Paquetes: GNU textutils, GNU fileutils, GNU shellutils, util-GNU Linux, netbase, net-tools , modutils

Con el objeto de determinar qu librera ocupa cada ejecutable se puede utilizar el programa ldd el cual pertenece al paquete de glibc.

Existen diferentes formas de resolver el problema de las libreras, paquetes y ejecutables. Una sera compilar cada uno de estos componentes e instalarlos en el sistema incrustado pero esto es poco eficiente para un sistema incrustado ya que los paquetes completos tienen una gran cantidad de opciones que no son necesarias para un sistema incrustado y hacen uso de mucho espacio de almacenamiento, un recurso muy escaso en ambientes de sistemas incrustados. Otra posibilidad es buscar paquetes especializados para sistemas empotrados que proporcionen la funcionalidad bsica de los componentes sugeridos anteriormente tales como Embutils y Busybox para el caso de los ejecutables y paquetes y Diet Libc y uClibc para las libreras. Estos paquetes tienen la gran ventaja que concentran nicamente las funciones necesarias para un sistema incrustado. Embutils y Busybox encapsulan prcticamente todos los ejecutables y paquetes mencionados anteriormente en un solo paquete. En el caso de las libreras, se reduce el tamao en gran manera si se utilizan alguna

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

37

de las alternativas mencionadas pero se tienen que compilar todos los programas con estas nuevas libreras lo cual tiene una dificultad adicional. Para tomar la decisin de utilizar una de estas libreras ms compactas o utilizar la estndar se debe analizar el espacio de almacenamiento con el que se cuenta y evaluar qu tanto se va a ahorrar en espacio si se utilizan las mismas.

Los archivos que representan los dispositivos del sistema en /dev se crean con la utilidad mknod la cual es parte de fileutils y dependen de tres parmetros: el nmero mayor de identificacin en el kernel, el nmero menor de identificacin en el kernel y especificar si se trata de un dispositivo de tipo bloque o de tipo caracter. Es muy importante que los permisos en cada uno de estos archivos especiales sean los adecuados. Los archivos especiales ms importantes son console, null, mem, random, stderr, stdout, stdin, tty, tty0, tty1 y zero. Para el caso de un sistema incrustado con la consola en un puerto serial es muy importante crear el archivo especial para el puerto serial adecuado, ya sea ttyS0 ttyS1.

3.5.5 Inicializacin del sistema (init)

Dentro de los parmetros de inicializacin que se le pueden pasar al kernel est uno llamado init. Este es el programa que se va a correr luego que el kernel ha terminado de ejecutar todos sus procedimientos. Si no se especifica un parmetro init, el kernel busca un archivo llamado init en algunos directorios estndar en el sistema de archivos raz tales como /bin, /sbin y otros.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

38

En el caso de sistemas multiusuario o estaciones de trabajo, el proceso de inicializacin que le corresponde al programa init es bastante complejo y se divide en niveles de ejecucin o runlevels. Esto con el fin de organizar el orden en que se inicializan los diferentes procesos y servicios. En el caso de un sistema incrustado el sistema init no debe ser muy complejo ya que no hay muchos procesos ni servicios que deban ser atendidos. Tpicamente cuando se instala GNU Linux en un servidor o una estacin de trabajo, no se trabaja con el init ya que esto lo hacen los scripts que trae la distribucin que se est utilizando.

Una posibilidad para el init es implementar el conocido System V Init, pero ste sera totalmente subutilizado en un sistema incrustado ya que los niveles de ejecucin no tienen gran relevancia. En el caso del sistema incrustado, el ingeniero debe tener control absoluto sobre la inicializacin del sistema por lo que es preferible escribir su propio script de inicializacin.

Por defecto, cualquier implementacin de init que se utilice va a leer la configuracin de inicializacin del archivo /etc/inittab.

3.6 Preguntas
1. Suponga que a usted se le asigna la tarea de incorporarle una serie de opciones al

kernel de GNU Linux y cuando reinicia el sistema con su nuevo kernel ste se congela.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

39

Cmo podra usted determinar en qu parte del proceso de inicializacin est el problema si no se despliegan errores suficientemente descriptivos en el proceso de arranque?

2.

En qu consiste la preparacin del hardware que debe realizar el bootloader y el

kernel antes de llamar a la funcin start_kernel?

3.

Si la SBC del sistema incrustado tuviera un procesador de la familia Hitachi SuperH

y su sistema husped tiene un procesador de arquitectura x86, qu diferencias habra en la compilacin del kernel para el sistema incrustado?

4.

Suponga que el tamao de su sistema raz de archivos, incluyendo el kernel

comprimido, es de 8 megabytes. Si la aplicacin de su sistema incrustado no requiere almacenamiento persistente y el hardware contara con 32 megabytes de RAM y con nicamente 4 megabytes de memoria flash para almacenamiento, qu sistema de archivos podra utilizar para poder arrancar el sistema operativo en la SBC? Especifique los pasos a seguir para realizar dicha configuracin

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

40

3.7 Gua de procedimientos simplificada


3.7.1 Paso 1: Exploracin e identificacin de componentes en SBC

- Con la ayuda de las hojas del fabricante de los diferentes componentes identifquelos en la tarjeta del sistema incrustado:

A. Externos -Puertos ethernet -Ranura PCI -Ranura MiniPCI -LEDs -Puerto IDE -Puertos seriales -Puerto USB -Socket para tarjeta Compact Flash -Puertos GPIO -Botn reset -Puerto para fuente de poder

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

41

B. Internos:

-Etapas de potencia -Microprocesador -Controlador Ethernet (MAC y PHY) -Controlador IDE -Controlador puertos seriales -Dispositivo Watchdog -Controlador puertos GPIO -Memoria RAM -Memoria Flash para BIOS -Batera -Reloj

- Especifique claramente el fabricante y el modelo de los chips en la SBC que corresponden a cada uno de estos componentes.

- Indique las coordenadas aproximadas de la ubicacin de cada componente segn el siguiente mapa:

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

42

Figura 3.1: Mapa de SBC con coordenadas

Nota: Los pasos a continuacin presentan una de las muchas posibilidades para instalar el sistema operativo GNU Linux sobre la red mencionado en la nota terica. Una forma alternativa de realizar la instalacin de GNU Linux en la SBC, es utilizando el lector de tarjetas Compact Flash y escribir ah directamente la informacin de inicializacin; pero esto tiene algunas desventajas relacionadas al modo de traduccin de sectores de memoria secundaria (LBA y CHS por ejemplo) de las diferentes computadoras.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

43

3.7.2 Paso 2: Configuracin sistema husped

- Instale alguna distribucin de GNU Linux, preferiblemente Debian Woody o ms reciente en su estacin de trabajo la cual tenga dos puertos de red Ethernet, al menos un puerto USB disponible y al menos 500 megabytes de espacio en disco duro. Si nunca ha trabajado con la versin 2.6 del kernel, se recomienda que lo compile y lo instale en la estacin de trabajo. Es importante que configure soporte para lo siguiente en el kernel: puertos seriales, adaptador de red, puertos USB, lector de tarjetas Compact Flash USB y sistema de archivos NFS. En cuanto a programas es importante que tenga lo siguiente: el compilador GCC y todas las libreras de desarrollo asociadas, todos los paquetes GNU utils, el servidor inetd y un editor de texto de su preferencia.

- Instale los paquetes NFS-USER-SERVER, TFTPD y DHCPD3. Si est utilizando Debian puede hacer uso de la utilidad apt-get para descargarlos e instalarlos.

- Descargue la versin 1.67 o mayor del bootloader SYSLINUX y extraiga el archivo necesario para utilizar PXELINUX.

- Instale algn programa terminal tal como minicom para comunicarse con la SBC por medio de su consola ubicada en el puerto serial. Este programa debe soportar la velocidad de 19200 bps para comunicacin.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

44

- Debe crear al menos tres directorios: uno para el sistema raz de archivos de la SBC, otro para la raz del servidor TFTP y otro para compilar los diferentes programas que se van a utilizar en el sistema incrustado.

-Configure el servidor NFS de tal forma que la tarjeta del sistema incrustado pueda montar el directorio raz de la SBC que usted cre en el paso anterior a travs de la red local. Esto se realiza utilizando el archivo /etc/exports.

-Configure el servidor DHCP dhcpd3 de tal forma que se le asigne una direccin IP fija al adaptador Ethernet de la tarjeta del sistema incrustado que se va a utilizar para conectarse con el sistema husped. Para esta configuracin requiere obtener la direccin MAC del adaptador de la SBC, eso lo puede lograr conectando un cable UTP en configuracin crossover* entre el puerto de la tarjeta de red que se va a utilizar en el sistema y la estacin de trabajo, luego inicia la SBC, presiona CTRL y P, digita boot f0 y ah obtiene la direccin del adaptador de red Ethernet que est utilizando. Es muy importante que utilice siempre el mismo adaptador a lo largo de la prctica. El archivo de configuracin del programa dhcpd3 se ubica en /etc/dhcpd3/dhcpd.conf.

-Edite el archivo de configuracin de inet.d de tal forma que el servidor tftp est disponible para abrir conexiones en la estacin de trabajo y que la raz del mismo sea la que usted cre anteriormente.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

45

-Cree un archivo de configuracin para el PXELINUX con la menor cantidad de opciones posible, slo necesita dos o tres lneas en este archivo. - De acuerdo a la documentacin de PXELINUX, coloque sus archivos en la raz del servidor TFTP. Ajuste los permisos de estos archivos de manera que se puedan leer desde la SBC.

*El orden de los alambres en el cable UTP para una configuracin crossover se encuentra en el apndice.

3.7.3 Paso 3: Creacin de sistema raz de archivos

- En esta etapa debe crear el sistema raz de archivos en el directorio que se cre anteriormente tomando en cuenta todo lo mencionado en la nota terica.

-Para los paquetes y ejecutables que se recomendaron anteriormente se sugiere utilizar el paquete conocido como busybox el cual encapsula estos y ms programas necesarios para un sistema incrustado. La gran ventaja de utilizar busybox es que es un solo paquete que se debe compilar y su configuracin es relativamente fcil. Se debe tener especial cuidado a la hora de configurar este programa y escoger nicamente los programas que se van a utilizar en la SBC.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

46

-Para las utilidades de login que tiene el paquete util-GNU Linux se recomienda utilizar el paquete tinylogin de busybox. Se debe prestar mucho cuidado a la documentacin de tinylogin, especialmente en la parte que respecta a autenticacin de usuarios en la SBC. Estas son nicamente recomendaciones, usted puede escoger lo que usted considere ms apropiado, siempre y cuando se mantenga dentro de lo estipulado por los requerimientos del proyecto y las limitaciones de la SBC.

-Para las libreras se recomienda evaluar qu tanto espacio se ahorrara con las libreras reducidas para sistemas incrustados. Otra alternativa es copiar la librera glibc del sistema husped en el sistema raz de la SBC as como algunas otras libreras que se necesiten.

-Es importante que se limpien todos los binarios de smbolos para depuracin, esto reduce en gran magnitud el tamao de los mismos. Ms informacin sobre este procedimiento se puede encontrar en la documentacin del paquete binutils.

-Los archivos especiales bsicos que se deben crear en /dev se muestran a continuacin con los respectivos permisos y nmeros mayor y menor:

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

47

Tabla 3.1: Archivos especiales en /dev Nombre Mem Null Zero Random tty0 Tty1 ttyS0 Tty console Nmero mayor 1 1 1 1 5 4 4 5 5 Nmero menor 1 3 5 8 0 1 64 0 1 Bits de Descripcin permisos Representa el acceso a la memoria fsica 600 Representa el dispositivo null 666 Representa una fuente de ceros 666 Representa el generador de nmeros 644 600 600 600 666 600
aleatorios no determinstico Representa la consola virtual actual Representa el primer puerto serial Representa el dispositivo TTY actual Representa la consola del sistema Representa la primera consola virtual

-Adems se debe colocar el archivo fstab en /etc para que la SBC monte los sistemas de archivos apropiadamente. Con este archivo se debe poder montar el sistema raz de archivos por medio de NFS as como el sistema proc en /proc.

- El objetivo principal debe ser siempre el utilizar la menor cantidad de espacio posible en el almacenamiento por lo que se debe investigar qu tcnicas se pueden utilizar para lograr este objetivo.

3.7.4 Paso 4: Creacin de scripts de inicializacin

- Este paso no tiene mayor complicacin ya que un sistema incrustado tpico no es multiusuario y, tpicamente, no requiere niveles de ejecucin como los que tiene el clsico System V Init.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

48

- Se recomienda utilizar el busybox como init, un archivo de configuracin en /etc/inittab con algunas pocas entradas y un script, llamado /etc/init.d/rcS por la convencin impuesta por el System V Init, sencillo que haga slo lo necesario. De esta forma se garantizar que el sistema arrancar en el menor tiempo posible y usted tendr control absoluto de los procesos de inicio y de shutdown.

- Algunos detalles que se deben tomar en consideracin para el inittab: lo primero que se ejecuta debe ser el script /etc/init.d/rcS para que inicialice el sistema, luego se debe especificar que se abra una sesin de login en el puerto serial de donde se va manejar la SBC y que ste se reinicie si es terminado, luego que si el proceso /sbin/init es terminado que se vuelva a iniciar y finalmente una lnea que desmonte los sistemas de archivos cuando la computadora se va a apagar.

- En el script rcS deben ir bsicamente comandos relativos al montaje de sistemas de archivos y configuraciones de red necesarias para la inicializacin exitosa de la computadora.

3.7.5 Paso 5: Creacin de dispositivo de almacenamiento en sistema raz de archivos

- Al igual que se crearon los archivos especiales para los dispositivos bsicos de la computadora se deben crear los archivos especiales para los dispositivos de almacenamiento. En el caso de la tarjeta SBC que se est utilizando slo va a haber un

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

49

dispositivo de memoria secundaria por lo que se puede usar el primero disponible y el interfaz es tipo IDE por lo tanto el archivo que representa el dispositivo se va a llamar hda. Por ejemplo, si fuera el primer dispositivo de interfaz tipo SCSI el archivo sera sda1. Tambin hay que crear los archivos para las particiones del mismo.

3.7.6 Paso 6: Configuracin y compilacin kernel

- Las opciones para incorporar en el kernel deben ser nicamente las necesarias y deben ser las adecuadas de acuerdo al hardware que posee la SBC. Debido a que la distribucin estndar del kernel 2.6.x no tiene como opcin el procesador de la SBC que se est utilizando se le debe aplicar un parche disponible en el sitio web de este curso. Este parche adems arregla un problema que se tiene con el escaneo del bus PCI correctamente por parte del kernel para esta SBC.

- Una vez aplicado el parche se procede a configurar el kernel. Es importante que se seleccione el procesador MediaGX/Geode, soporte para puertos seriales, soporte para la tarjeta de red de la SBC as como para el controlador de puertos GPIO y para el controlador IDE. Tambin se debe configurar soporte para el timer watchdog, para el comando sysctl y soporte para los sistemas de archivos que usted considere necesario. Finalmente, el kernel debe ser configurado como interrumpible.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

50

- Se recomienda tener especial cuidado con el soporte de puertos seriales ya que la consola se encuentra en este dispositivo y hay muchas opciones adonde es fcil equivocarse y causar que no se pueda utilizar el puerto serial como consola. Adicionalmente, el soporte de NFS no debe ser nicamente general sino que el kernel tenga la capacidad de cargar el sistema raz de archivos sobre NFS.

- Con los comandos mencionados en la nota terica, se puede configurar y compilar el kernel. La imagen del kernel, el archivo System.map y los archivos de los mdulos deben ser copiados a los directorios respectivos del sistema raz de archivos.

3.7.7 Paso 7: Arranque inicial

- Este es el paso final de la puesta en marcha de la SBC con el sistema operativo GNU Linux. Para eso se debe asegurar que la configuracin de los servicios necesarios en el sistema husped est correctamente configurada.

- Lo primero es preparar las conexiones entre la SBC y la estacin de trabajo lo cual es simplemente conectar, usando un cable null modem, un puerto serial de la estacin de trabajo a un puerto serial en la SBC y luego conectando, utilizando un cable UTP en configuracin crossover, un puerto de red en el sistema incrustado con el sistema husped. Con esto listo se puede iniciar el programa terminal en el sistema husped y arrancar la SBC. Inmediatamente se va a observar el chequeo inicial de la SBC en el programa

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

51

terminal, despus de esto se debe presionar CTRL y P para obtener el prompt del BIOS de la SBC, ah se debe ejecutar el comando boot f0 para tratar de arrancar mediante PXE.

- Si hay algn error este va a ser presentado por el sistema PXE o el kernel durante el inicio. Para verificar que todo proceda en orden, se recomienda abrir en el sistema husped el archivo adonde syslogd guarda la bitcora general del sistema con la utilidad tail para observar, en tiempo real, lo que est sucediendo con los servidores TFTP, NFS y DHCP y poder diagnosticar fcilmente si se presenta un problema. En la distribucin Debian ese archivo es /var/log/syslog y en otras distribuciones es /var/log/messages.

- Si todo procede en orden, lo primero que se debe observar cuando el kernel termina de cargar es el texto del sistema de autenticacin donde se puede escribir el nombre de usuario y clave para acceder el shell.

- Una vez con el shell es recomendable revisar la bitcora de inicio que se ubica en /var/log/dmesg para verificar que los componentes de la SBC han sido detectados y configurados correctamente, revisar el sistema de archivos con el programa mount y ejecutar algunos de los comandos escogidos por el busybox.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

52

3.7.8 Paso 8: Creacin de sistema raz de archivos en memoria secundaria de SBC

- Ahora que ya se tiene acceso directo a la memoria flash donde se va a almacenar el sistema raz de archivos se puede crear la o las particiones que se van a utilizar en la memoria secundaria. Esto se hace con la utilidad fdisk y con alguna utilidad para crear un sistema de archivos tal como mkfs o mke2fs, dependiendo de la eleccin de sistema de archivos que se haya hecho anteriormente.

- Algunas consideraciones que se deben tomar en cuenta: se debe dejar espacio en la memoria secundaria para una pequea particin por si se quiere cargar un kernel alterno ms adelante y se debe marcar la particin principal como bootable tal que el sistema operativo que va a residir en la misma pueda iniciar.

- Finalmente, para verificar lo hecho anteriormente, se debe montar la nueva particin en /mnt con el comando mount y verificar con el comando df.

- El sistema de archivos montado en /mnt ser el sistema raz de archivos en la SBC, por lo tanto se deben copiar los contenidos del sistema de archivos remoto a /mnt. Se recomienda hacer esto con mucho cuidado ya que los contenidos de /proc o de /mnt no se deben copiar al nuevo sistema de archivos.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

53

3.7.9 Paso 9: Bootloader

- El ltimo paso en la configuracin del sistema operativo de la SBC es la escritura del MBR (Master Boot Record por sus siglas en ingls). Esto se logra mediante la instalacin de un programa conocido como bootloader que se mencion en la nota terica. La seleccin del bootloader queda a discrecin del diseador. El ejecutable y las libreras del bootloader no deben estar necesariamente instalados en la memoria secundaria de la SBC, ste se puede correr directamente del sistema de archivos montado en /.

- A continuacin se van a presentar algunas consideraciones importantes que se deben tomar en cuenta a la hora de instalar y configurar el bootloader.

Primero, se le debe especificar al bootloader donde es que se encuentra la imagen del kernel. Para esto se le debe especificar el dispositivo y la particin donde se encuentra el sistema raz de archivos, el directorio donde se encuentra la imagen del kernel y el nombre del archivo de la imagen del kernel.

Segundo, se le debe hacer saber al kernel, en forma de parmetros, que la consola no est en un puerto de video VGA sino en un puerto serial. El parmetro tpicamente es de la forma console=<puerto serial>,<velocidad><paridad><bits por caracter>. Es importante que el bootloader sepa tambin que la consola esta en un puerto serial, por lo

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

54

tanto se debera configurar el mismo de forma que esto quede claro, por lo tanto se le debe especificar esta informacin con otro comando.

Por ltimo, el bootloader debe saber en cul dispositivo se encuentra el sector de inicio o boot sector para as poder grabar en l. Un detalle sumamente importante es que para poder ejecutar el bootloader para que grabe la informacin el sector de inicio se le debe especificar que el sistema raz de archivos no es el que est montado sino /mnt. La posibilidad de hacer esto depende del bootloader, las posibilidades utilizando el comando chroot o especificndole al bootloader que la raz es /mnt.

- Recuerde que antes de reiniciar el sistema debe editar el archivo /etc/fstab para que el kernel monte el sistema raz de archivo de la memoria flash local y no del NFS remoto.

3.7.10 Paso 10: Arranque final

- En este paso se procede a reiniciar la SBC y comprobar que el bootloader hizo su trabajo correctamente. Si el kernel carga adecuadamente entonces todo est en orden. Es conveniente realizar el mismo chequeo que se hizo en el paso 7 para comprobar que no hay ningn problema. -Fije la hora del sistema utilizando el comando date y fije el nombre del sistema o hostname utilizando el comando hostname. Es importante que coloque el comando que define el hostname en el script de inicializacin /etc/init.d/rcS.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

55

- Con esto se termina la configuracin bsica del sistema operativo GNU Linux en el sistema incrustado.

3.8 Referencias Bibliogrficas


Para esta prctica puede utilizar los siguientes libros que se encuentran en la bibliografa de este documento: 1, 4, 5, 6, 8, 9, 14, 30, 38, 40, 41.

3.9 Solucin Propuesta

3.9.1 Respuestas a Preguntas

1. Se debe recordar que no se puede utilizar ANSI C dentro del cdigo del kernel, por lo que hay que recurrir a las funciones permitidas dentro del contexto de GNU C. Para depurar el kernel se pueden insertar llamadas a la funcin printk(), para imprimir mensajes de prueba en las diferentes secciones principales del kernel. De esta forma, cuando la ejecucin del kernel se congela, se sabr aproximadamente en qu seccin de la inicializacin se encuentra observando el ltimo texto de prueba impreso por printk(). Afinando ms la ubicacin de los printk() de prueba se puede lograr acercarse al error. El archivo que lleva el control de las llamadas a las funciones ms generales que se ejecutan, se llama main.c, y se encuentra en el directorio $KERNEL_ROOT/init.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

56

2. La preparacin del hardware es una tarea dependiente de la plataforma, en la cual se cambia el modo del procesador de real a protegido, y a la vez se realizan tareas relacionadas con la memoria, y se fijan algunos registros. Para el caso de un esquema con memoria plana, el bootloader debe preparar el GDT (Global Descriptor Table) mediante la creacin de varias estructuras que lo definen, y luego cargar la informacin relevante al GDT en el registro GDTR. Cuando se tiene todo esto listo se debe poner el registro CR0 en alto.

Adems se debe preparar la memoria, para que los programas en C puedan ejecutarse y para esto se deben realizar los siguientes pasos:

-Llenar de ceros el espacio de memoria conocido como bss que es donde residen las variables estticas; por se motivo, las variables estticas que no tengan un valor inicial definido tendrn el valor cero por defecto.

-Configurar el heap para el uso de memoria dinmica. El heap es tpicamente una lista enlazada de bloques de memoria, y debera contener inicialmente un gran bloque vaco que representa todo el espacio para el heap.

Adems se deben configurar los timers del sistema, as como el sistema de atencin a interrupciones que est compuesto por el IDT (Interrupt Descriptor Table) y los

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

57

controladores de interrupciones que son tpicamente dos microcontroladores PIC 8259. La IDT puede tener hasta 256 elementos y cada uno es conocido como descriptor, y apunta a la direccin de una rutina de servicio de interrupcin (ISR).

3. Lo que se debe hacer es el procedimiento llamado cross compiling y esto significa compilar todos los binarios para la SBC, incluyendo el kernel, en la misma computadora husped, pero con un grupo de herramientas para otra plataforma. Estas herramientas se componen del compilador gcc, las libreras glibc y el paquete binutils. La bandera que se utiliza para indicarle a los programas compiladores la arquitectura, se llama target. Por ejemplo, para compilar un programa para la arquitectura SuperH, se ejecuta el comando configure TARGET=sh. Luego, se debe preparar todo el grupo de herramientas para cross compiling en otro directorio y usarlo para compilar los programas para otra plataforma.

4. La solucin para este problema es crear una particin de dos megabytes en la memoria flash y un dispositivo llamado RAM disk de 16 megabytes. Esto hace posible que se monte un sistema de archivos en memoria para todos los archivos que nunca van a ser modificados y un pequeo sistema de archivos en la memoria flash para los que s requieren modificacin.

Un sistema de archivos montado en un RAM disk opera exactamente igual que si estuviera montado en un dispositivo de almacenamiento local o remoto. El RAM disk es visto como

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

58

un dispositivo de bloque por el kernel, su tamao est limitado por la cantidad de memoria RAM que est disponible y la gran desventaja que tienen es que cuando la computadora se reinicia, se pierden los datos que se alteraron en el RAM disk. Prcticamente cualquier tipo de particin puede ser montada en un RAM disk, siempre y cuando el tamao de la misma sea igual o menor al tamao del RAM disk. El RAM disk se puede comprimir para ahorrar espacio de almacenamiento en el dispositivo en el que se va a almacenar.

Los comandos necesarios para llevar esto a cabo son los comunes y corrientes, mount y umount para montar y desmontar el sistema de archivos, mke2fs para crear el sistema de archivos, y gzip para comprimirlo.

3.9.2 Procedimientos

3.9.2.1 Paso 1 Externos: -Puertos Ethernet: 10 y 11 -Ranura PCI: A y B -Ranura MiniPCI: Entre I y H y 5 y 9 -LEDs: 1 -Puerto IDE: Entre D y G en 1 -Puertos seriales: Uno 10-11 y I-H, Dos K 4-5

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

59

-Puerto USB: K-G y 10 -Socket para tarjeta Compact Flash: H-J, 1-4 -Puertos GPIO: K y 6-8 -Botn reset: B10 -Puerto para fuente de poder: J10

Internos:

Etapas de potencia: un controlador LM2642 para dos fuentes conmutadas en configuracin stepdown. (J8) Microprocesador: National Semiconductor Geode SC1100 (D4) Controladores Ethernet: PHY es YCL336 (entre C y F y 8 y 9) y MAC VSM336AM (6 y 8 y C y H): Controlador IDE: incorporado en el SC1100 Dispositivo Watchdog: incorporado en el SC1100 Controlador puertos seriales: National PC87366 (G5) Controlador puertos GPIO: National PC87366 (G5) Memoria RAM: Cuatro chips de 32 megabytes 48LC16MI6A2 (Entre 2y C-G) Memoria Flash para BIOS: Chip marcado con calcomana blanca Soekris (G4) Bateria: Dispositivo plano con borde lila (9 y I-J) Reloj: CTS16CB3 (C5)

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

60

3.9.2.4 Paso 2

Se cre el directorio /home/rcs/crustaceos para el proyecto el cual ser denominado $PROJ_ROOT de ahora en adelante. Adems, se cre el directorio para el sistema raz de archivos en $PROJ_ROOT/rootfs y el directorio raz para el servidor TFTP en $PROJ_ROOT/tftproot.

Adems se crearon los directorios kernel, bootldr, sysapps y tmp en $PROJ_ROOT. El primero contiene todo lo relativo a los kernels que se van a compilar, el segundo todo lo relativo al bootloader, el tercero se va a utilizar para todas las aplicaciones y libreras que se van a correr en la SBC, y el cuarto para archivos temporales.

Se recomendaron los paquetes recomendados con los archivos de configuracin adjuntos. (inetd.conf, /etc/exports, dhcpd.conf). El archivo de configuracin dhcp.conf que se utiliz es el siguiente:

option domain-name "domain.com"; option domain-name-servers ns1.domain.com, ns2.domain.com; default-lease-time 600; max-lease-time 7200; log-facility local7; subnet 10.0.0.0 netmask 255.255.255.0 { } host sbc1 { hardware ethernet 00:00:24:c1:cc:4c; fixed-address 10.0.0.100; option subnet-mask 255.255.255.0; option broadcast-address 10.0.0.255; option routers 10.0.0.1; filename "pxelinux.0"; }

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

61

Lo importante en este archivo es lo relativo a la seccin host sbc1 en el cual se especifica la direccin MAC del adaptador de red de la SBC que se va a utilizar, los parmetros IP que se le debe asignar, y el archivo que debe descargar la SBC mediante FTP. Se tuvo especial cuidado con la configuracin del servidor DHCP, ya que la raz del servidor TFTP est fijada en un cierto directorio, por lo tanto, el archivo que se especifica en dhcpd.conf debe tomar en cuenta que su raz ser /tftpboot y no /.

La lnea que se le agreg al inetd.conf es la siguiente:

tftp

dgram udp wait

root

/usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /tftpboot

Aqu se especific lo siguiente: (a) el TFTP trabaja sobre el protocolo de red UDP con datagramas, (b) que se debe correr el servidor de TFTP como usuario root, (c) que el archivo del servidor FTP se encuentra en /usr/sbin/in.tftpd, (d) que la raz del servidor TFTP debe estar en $PROJ_ROOT/tftproot/ de acuerdo al parmetro -s y (e) que se debe esperar el socket de la conexin UDP del servidor TFTP.

La lnea que se le agreg a /etc/exports es la siguiente:

/home/rcs/crustaceos/rootfs 10.0.0.100(rw,no_root_squash)

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

62

Aqu se le indic al servidor NFS que se desea exportar el archivo raz de la SBC al sistema con la direccin IP 10.0.0.100 la cual es le fue asignada anteriormente en el archivo dhcpd.conf a la SBC mediante DHCP. Tambin se le indica al servidor, que puede ser montado en modo de lectura y escritura por el sistema remoto, y que las solicitudes del usuario remoto root las convierta a solicitudes del usuario annimo local.

El archivo de configuracin default para el PXELINUX es el siguiente:

SERIAL 0 19200 DEFAULT vmlinuz-2.6.6 console=ttyS0,19200n81 root=/dev/nfs nfsaddrs=10.0.0.100:10.0.0.1:10.0.0.1:255.255.255.0:soekris:eth0 nfsroot=10.0.0.1:/home/rcs/crustaceos/rootfs panic=10

Los comandos de lnea uno a la tres del texto mostrado arriba deben estar en una misma lnea en el archivo; aqu no se pueden mostrar as, por razones de espacio. La primera lnea, especifica que se est usando el primer puerto serial como consola, a una velocidad de 19200 bps, la segunda lnea especifica que se debe usar el archivo vmlinuz-2.6.6 como kernel, y una serie de parmetros que se le pasan al kernel. El primero indica que la consola est en el puerto serial, el segundo que se va a montar el sistema raz de archivos sobre NFS y el tercero indica la direccin IP que se le va a asignar a la SBC as como los dems parmetros de red y a cul interfaz se le van a asignar. El cuarto parmetro indica el lugar donde se encuentra el sistema raz de archivos, el quinto el tiempo en segundos que debe esperar el kernel antes de entrar en el modo panic si algo sucede. No hace falta especificarle al kernel la ubicacin de init ya que el busybox ubica el programa init en

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

63

/sbin/init, uno de los lugares que el kernel busca por defecto. La ltima lnea hace que se le adjunte a los parmetros que se le pasan al kernel una lnea con los parmetros IP que asign el servidor DHCP.

Los documentos $KERNEL_ROOT/Documentation/kernel-parameters.txt y nfsroot.txt contienen la informacin necesaria para entender correctamente los parmetros que se le estn pasando al kernel.

Los contenidos del directorio $PROJ_ROOT/tftproot son: un directorio llamado pxelinux.cfg, el archivo pxelinux.0 y el kernel que se va a compilar ms adelante con un nombre que vaya de acuerdo a lo que tiene el archivo de configuracin de PXELINUX (vmlinux-2.6.6 de acuerdo al archivo default que se mostr arriba).

Se recomienda utilizar el programa terminal minicom, y configurarlo con los parmetros especificados en la hoja del fabricante de la SBC para entrar a la consola de la tarjeta del sistema incrustado.

3.9.2.3 Paso 3

El directorio que contiene el sistema raz de archivos de la SBC se cre anteriormente en $PROJ_ROOT/rootfs; por lo tanto, todo lo que se realiz en este paso estar en ese directorio.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

64

Primero se crearon los directorios mencionados en la nota terica, todos con los bits de permisos fijados en 755.

Se crearon todos los archivos especiales en /dev con los permisos respectivos utilizando el comando mknod m <bits de permiso> <nmero mayor> <nmero menor>. La diferencia en tamao entre utilizar ucLibc y glibc estndar es aproximadamente 500 kilobytes, una diferencia no tan grande dadas las caractersticas de la SBC que se est utilizando. Debido a esto, se decidi copiar la glibc (el archivo se llama libc.so.6) del sistema husped al directorio /lib.

Se utiliz el comando strip del paquete binutils para eliminar los smbolos de depuracin de libreras y ejecutables que se van a utilizar. As se logra ahorrar espacio en memoria secundaria.

Se decidi utilizar el busybox debido a la simplicidad que ofrece, ya que se compilan todos los programas en un solo binario, y se crean links de todas las ubicaciones a ste. Se utiliz la versin 1.00rc9, pues la ltima que ha sido difundida cuando se redact este documento (1.00rc10) tiene algunos problemas de compilacin. La configuracin se invoc con el comando make PREFIX=$PROJ_DIR/rootfs menuconfig.

Se fue especialmente cuidadoso en los siguientes puntos:

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

65

Habilitar la capacidad de montar sistemas de archivos NFS.

Utilizar funciones internas de autenticacin para passwords y grupos.

Compilarlo estticamente para evitar tener que usar muchas libreras.

Si su sistema husped usa el formato shadow para la base de datos de usuarios locales es necesario que habilite esta opcin

Habilitar el programa init.

Se adjunta el archivo de configuracin de compilacin del busybox que se utiliz (.configbusybox).

Se compil el busybox utilizando la bandera PREFIX=$PROJ_DIR/rootfs. Si se decide modificar la configuracin luego de haberlo compilado la primera vez, es necesario ejecutar el comando make clean en la raz del busybox antes de empezar el proceso de compilacin de nuevo.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

66 comando make

Finalmente

se

procedi

instalar

el

busybox

con

el

PREFIX=$PROJ_DIR/rootfs install. Con esto qued instalado el ejecutable principal y todos los links al mismo.

Ahora se procedi a configurar y compilar el paquete tinylogin el cual es un solo binario que representa los programas bsicos de manejo de usuarios y autenticacin necesarios en la SBC.

Se us la versin 1.4 del tinylogin y se compil con la opcin PREFIX para que se instale en el sistema raz de archivos de la SBC y se sigue los mismos cuidados que con el busybox. Tambin se tuvo especial cuidado con la bandera USE_SYSTEM_PWD_GRP del archivo Makefile, la que debe estar fijada en falso para que el programa use sus libreras internas de autenticacin, y no las del sistema.

Desafortunadamente, el tinylogin no crea los archivos de autenticacin de grupos y usuarios (/etc/passwd, /etc/shadow, /etc/group) por lo que se edit los de la estacin husped y se copi al sistema raz de archivos de la SBC. Adems se cambi el shell de los usuarios de bash a ash, ya que busybox no tiene bash sino ash.

Para poder terminar la instalacin del tinylogin se tuvo que tener acceso a la cuenta root en la estacin de trabajo.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

67

A continuacin se muestra el archivo fstab inicial que se debe crear en el directorio /etc de la SBC que se utiliz:

10.0.0.1:/home/rcs/crustaceos/rootfs / proc /proc

nfs proc

nolock,intr,rw defaults

0 0

0 0

En la primera lnea se especifica la direccin del sistema de archivos que se va a montar por medio de NFS, dnde se debe montar, que tipo de sistema de archivos se usa y algunos parmetros. El parmetro nolock, que es sumamente importante a la hora de montar sistemas de archivos remotos sobre NFS, con el esquema de servidor NFS en espacio de usuario, el parmetro rw indica que se debe montar el sistema de archivos para lectura y escritura y el parmetro intr indica que se puede interrumpir el proceso de montaje del sistema de archivos NFS. La segunda lnea indica que se debe montar el sistema de archivos proc al igual que en cualquier otro sistema GNU Linux. Los ltimos dos parmetros de cada lnea indican si el sistema de archivos se debe respaldar, y en que orden se deben revisar los sistemas, pero esto no es de inters para esta prctica.

Se copi el editor de texto pico as como sus archivos de configuracin.

Temporalmente se copiaron al sistema de archivos raz las utilidades, sus libreras y los archivos de configuracin de los programas para la creacin del sistema de archivos en la

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

68

memoria

flash (fdisk, mke2fs y mkfs.ext3) y el bootloader (lilo). Es sumamente

importante que los archivos para crear la particin estn en /sbin, y para crear el sistema de archivos no se debe llamar a mke2fs directamente, sino mkfs.ext3. El comando es /sbin/mkfs.ext3 /dev/hda1. 3.9.2.4 Paso 4

Se utiliz el programa init que viene con el busybox, el cual es sumamente sencillo de utilizar. El siguiente es el archivo de configuracin para init:

::sysinit:/etc/init.d/rcS ::respawn:/sbin/getty 19200 ttyS0 ::restart:/sbin/init ::shutdown:/bin/umount -a r

La primera lnea especifica que en el inicio del sistema operativo se debe ejecutar el script rcS. La segunda indica que se debe ejecutar el comando getty, de tal forma que haya una sesin de login en el primer puerto serial a una velocidad de 19200 bps, y si este programa termina se debe iniciar de nuevo. La tercera indica que el proceso init debe ser reiniciado si es terminado; finalmente, la ltima indica lo que se debe hacer cuando se vaya a apagar la SBC, en este caso desmontar todos los sistemas de archivos.

El script rcS en /etc/init.d utilizado contiene lo siguiente:

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

69

#!/bin/sh mount -n -o remount,rw / mount /proc /sbin/ifconfig eth0 10.0.0.100 netmask 255.255.255.0

La primera lnea remonta el sistema raz de archivos, que el kernel monta en modo solo de lectura, en modo de lectura y escritura. El segundo monta el sistema de archivos /proc y la ultima lnea configura los parmetros IP en el primer adaptador de red de la tarjeta SBC.

3.9.2.5 Paso 5

En este paso se ejecutaron los siguientes comandos en el directorio /dev para la creacin de los archivos especiales que representan el dispositivo de memoria secundaria en la SBC:

mknod hda b 3 0 mknod hda1 b 3 1 mknod hda2 b 3 2 chmod 666 hda hda1 hda2

Al hacer esto ya se tiene una referencia valida en el sistema de archivos de la SBC, al primer dispositivo conectado al controlador IDE, que en este caso ser la memoria flash.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

70

3.2.8.6 Paso 6

Se descarg el archivo comprimido con el cdigo fuente del kernel 2.6.3 o mayor de www.kernel.org y se descomprimi en /usr/src. Para aplicar el parche, suponiendo que ste se encuentra en $PROJ_ROOT/kernel/soekris.patch.2.6.3 se ubic en el directorio /usr/src/linux-2.6.3 y se ejecut el comando patch p1 <

$PROJ_ROOT/kernel/soekris.patch.2.6.3. El parche viene incompleto, por lo que, despus de aplicarlo, se edit el archivo $KERNEL_ROOT/arch/i386/Kconfig de la siguiente manera: buscando la lnea config X86_L1_CACHE_SHIFT y abajo, al final de la lnea que empieza con default "5", agregndole a || MGEODE Adjunto se encuentra el archivo Kconfig editado.

Las opciones ms importantes que se deben soportar en el kernel relativas al hardware de la SBC son: watchdog del procesador SCx200, controlador IDE del procesador SCx200 y adaptador de red Ethernet PCI de 100 mbps National Semiconductor DP8381x .

Se tuvo especial cuidado en los siguientes puntos a la hora de compilar este kernel:

Para que la SBC pueda montar un sistema raz de archivos por medio de NFS debe

tener las siguientes cuatro opciones habilitadas: Device Drivers/Networking/Networking Options/TCP/IP Networking se debe seleccionar IP: Kernel level autoconfiguration y

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

71

todos sus hijos (BOOTP, DHCP Y RARP). Luego se debe ir a File Systems/Network File Systems y habilitar NFS File System Support y Root file system on NFS.

Las siguientes opciones para soporte de puertos seriales deben habilitarse: Device

drivers/Input devices/Serial port line discipline y Device drivers/Character Devices/Serial Drivers/8250/16550 and compatible serial support /Console on 8250/16550 and compatible serial port. De no realizarse, se puede tener problemas para ver los mensajes de inicio del kernel.

Se adjunta el archivo .config con las opciones que fueron seleccionadas para compilar el kernel que correr la SBC.

Para compilar el kernel se siguieron los pasos habituales, con excepcin de haberle especificado al comando make el parmetro INSTALL_MOD_PATH para que ubique los mdulos en un directorio que no sea el del sistema husped, para evitar dificultades y confusiones innecesarias.

Luego de compilar el kernel se copi la imagen que se encuentra en /usr/src/linux2.6.6/arch/i386/boot/bzImage a $PROJ_HOME/kernel, a $PROJ_HOME/rootfs/boot y a $PROJ_HOME/tftproot utilizando el nombre vmlinuz-2.6.6. El archivo System.map se copi, a los primeros dos directorios especificados anteriormente utilizando el nombre

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

72

System.map-2.6.6. Los mdulos ya estarn en el directorio $PROJ_HOME/kernels y se copiaron a $PROJ_HOME/rootfs/lib/modules.

3.9.2.7 Paso 7

En este paso se realizaron pruebas generales con los comandos mount, dmesg y otros, para verificar que todo lo que se configur funcione adecuadamente. El comando mount mostr el estatus de los sistemas de archivos de la siguiente manera:

/dev/root on/ type nfs (rw,v2,rsize=4096,wsize=4096,hard,udp,nolock,addr=10.0.0.1) proc on /proc type proc (rw,nodiratime)

3.9.2.8 Paso 8

Se escogi utilizar el sistema de archivos EXT3, ya que es un sistema de archivos tipo journaling, y est basado en EXT2, el sistema de archivos clsico de GNU Linux que se caracteriza por su estabilidad. La gran ventaja de los sistemas de archivos tipo journaling es que, debido a la forma en que se escriben los datos al disco, el sistema de archivos siempre es consistente. Esto es una gran ventaja para los sistemas incrustados donde, en muchas aplicaciones, no se tiene control sobre el encendido y apagado del mismo.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

73

Antes de crear el sistema de archivos se requiere hacer una particin en el dispositivo de memoria secundaria. La particin est representada por /dev/hda1. Utilizando el comando fdisk /dev/hda se cre la particin y se fij la bandera de boot en la misma.

Luego fue necesario copiar temporalmente, el ejecutable mke2fs del sistema husped al sistema raz de archivos. Una vez que se tuvo disponible en la SBC, con el comando mke2fs j /dev/hda1 se cre el sistema de archivos tipo EXT3 en la primera particin del dispositivo /dev/hda. Utilizando el comando mount /dev/hda1 /mnt se mont la particin en /mnt. Finalmente, se copi todo lo que se haba preparado anteriormente en $PROJ_ROOT/rootfs a /mnt.

3.9.2.9 Paso 9

Aqu se escogi el bootloader LILO, por ser uno de los ms poderosos, y a la vez fcil de usar para GNU Linux y la plataforma x86.

Como LILO ya est instalado en el sistema husped, se copiaron temporalmente los archivos binarios /sbin/lilo, /sbin/lilo.real, /boot/map y /boot/boot.b al sistema raz de archivos de la SBC, y se crea el siguiente archivo de configuracin en /mnt/etc llamado lilo.conf:

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

74

lba32 boot=/dev/hda root=/dev/hda1 install=/boot/boot.b map=/boot/map delay=20 vga=normal serial=0,19200n8 append="video=vga16:off console=ttyS0,19200n81" default=GNU Linux image=/boot/vmlinuz label=GNU Linux read-only

La primera lnea especifica que se debe usar el modo lba32 para traducir los sectores del dispositivo de memoria secundaria. La segunda y tercera especifican el dispositivo adonde reside el MBR (Master Boot Record), y la particin donde se va a iniciar. Las lneas install y map son opciones para la forma en que se presenta el bootloader. La lnea delay indica cuantas dcimas de segundo debe esperarse el bootloader antes de cargar el kernel, y la lnea serial le indica al bootloader que la consola est en el puerto serial. Los parmetros que se le pasan al kernel estn en la lnea append, y la lnea image especifica la ubicacin del kernel. Esta imagen, siendo la nica en esta configuracin, se identifica mediante el label.

Despus de tener esto listo se ejecuta el comando lilo r /mnt C /etc/lilo.conf , el primer parmetro le indica a LILO la raz en donde tiene iniciar, o sea /mnt, esto para que no se

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

75

confunda con la imagen del kernel del sistema remoto. El segundo parmetro le indica donde tomar el archivo de configuracin utilizando como raz lo que se especific en -r. Una forma alternativa de hacer esto es con el comando chroot.

Antes de reiniciar para probar que todo est bien, se actualiz el archivo /mnt/etc/fstab, para montar la particin raz de archivos de la memoria flash local, y no del servidor NFS remoto. El nuevo /mnt/etc/fstab es as:

/dev/hda1 proc

/ /proc

ext3 proc

defaults defaults

0 0

0 0

En este archivo se especifica que se debe montar la particin /dev/hda1, tipo ext3, con las opciones por defecto en /.

Paso 10

Solo queda comprobar que todo lo que se realiz tuvo un resultado satisfactorio; para ello se utilizaron pruebas similares a las del paso 9. Es importante borrar los comandos de lilo y de creacin de sistemas de archivos para ahorrar espacio. El tamao del sistema raz de archivos final no excedi los 6 megabytes; esto se verific ejecutando el comando df k.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

76

Para fijar la fecha se utiliz el comando date -s "07/30/2004 22:48:00" para fijar la fecha del 7 de Julio de 2004 a las diez con cuarenta y ocho minutos de la noche. El hostname se fij con el comando hostname sbc1 para fijar el nombre sbc1 a la computadora.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

77

CAPITULO 4: SEGUNDA PRACTICA, Interaccin con el mundo exterior mediante puertos de Entrada y Salida

4.1 Objetivo General


Lograr interaccin entre la SBC y el mundo exterior mediante diferentes mtodos y dispositivos.

4.2 Objetivos Especficos


Entender el manejo de los dispositivos de E/S a bajo nivel en el kernel del sistema

operativo GNU Linux, en especial el sistema de manejo de interrupciones. Utilizar la lnea de comandos del BIOS de la SBC para hacer pruebas de E/S con los

diferentes puertos de la misma. Realizar pruebas de E/S utilizando una pantalla de cristal lquido (LCD) y un

teclado conectado al controlador de la pantalla. Realizar pruebas de encendido y apagado de los diodos emisores de luz (LED) que

estn incorporados en la tarjeta del sistema incrustado. Aprender a utilizar los puertos de E/S de propsito general (GPIO) de la SBC.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

78

4.3 Duracin
La duracin recomendada para esta prctica es de 3 sesiones de cuatro horas.

4.4 Investigacin Previa


La organizacin de la memoria de los dispositivos E/S en una computadora de

arquitectura x86.

La forma en que maneja el kernel 2.6 de GNU Linux los dispositivos E/S.

Funcionamiento de los comandos d, e, i y o del BIOS de la SBC.

Cmo se deben accesar los puertos GPIO del controlador E/S de la SBC as como

las limitaciones elctricas de los mismos.

El protocolo para escritura a la pantalla y lectura del teclado de la pantalla LCD, as

como debe ser la alimentacin elctrica de la misma y que precauciones debe tener a la hora de realizar las conexiones.

Manejo de libreras estticas y dinmicas en el lenguaje C, especficamente con el

compilador GNU GCC.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

79

Herramientas para depurar programas en GNU Linux/UNIX tales como GNU

Debugger (gdb) y strace.

4.5 Marco Terico

4.5.1 Manejo de Recursos en GNU Linux

Como se estudi anteriormente, en los sistemas operativos de la familia UNIX todos los recursos del sistema que son accesibles para los usuarios estn representados en el sistema de archivos principal.

Para poder manipular estos archivos o recursos se utilizan, principalmente, las funciones open(), write(), read() y close() las cuales son llamadas al sistema y pertenecen a la librera estndar glibc. Estas realizan operaciones sobre un file descriptor o descriptor de archivo el cual es un pequeo nmero entero que representa un archivo abierto.

Las llamadas al sistema hacen una solicitud al kernel, el cual funciona como mediador entre el usuario y el driver del hardware. En la medida de lo posible es importante utilizar llamada al sistema de alto nivel para evitar cambios de contexto seguidos, lo cual produce

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

80

penalidades de rendimiento altas. Por ejemplo, en el manejo de archivos regulares se recomienda utilizar fopen() en lugar de open().

4.5.2 Manejo de Interrupciones en GNU Linux

Como se sabe de la teora de sistemas operativos, las interrupciones se utilizan para hacer accesos asincrnicos a dispositivos externos a una computadora. Las interrupciones se componen de dos partes importantes: la parte superior conocida como manejador de interrupcin y la parte inferior o bottom half. La primera se encarga de ejecutar el cdigo ms importante de como se debe manejar una interrupcin el cual se compone principalmente del aviso al dispositivo externo que se est manejando la interrupcin adecuada. La segunda se encarga de ejecutar lo dems un pequeo tiempo despus cuando el sistema operativo encuentre que es un buen momento.

(Las excepciones son interrupciones sincrnicas producidas por el microprocesador para notificar al sistema operativo sobre condiciones especiales, tal como errores en el programa en ejecucin, falta de pgina, etc.)

4.5.2.1 Manejadores de Interrupciones o ISR (Interrupt Service Routine)

El cdigo de manejo de interrupcin se ejecuta en contexto de interrupcin, y debe ser parte del driver/manejador del dispositivo. Cada ISR debe ser registrada con el kernel mediante

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

81

la funcin request_irq(). As mismo, hay una funcin llamada free_irq() que retira un ISR de las interrupciones disponibles.

A la hora de escribir rutinas de manejo de interrupciones, se debe procurar dejar la gran parte del trabajo a la mitad inferior. Algunos dispositivos permiten que su nmero IRQ se comparta con otros dispositivos que tambin lo permitan. Los dispositivos ISA son una excepcin ya que no permiten que se comparta su IRQ con otro dispositivo.

Contexto de interrupcin

Cuando el kernel se encuentra en contexto de interrupcin, no existe ningn proceso que lo respalde, por lo tanto el cdigo que se ejecute durante el contexto de interrupcin no puede dormir. El tiempo que dure la ejecucin en contexto de interrupcin debe ser mnima, ya que hay un proceso que fue interrumpido y est esperando.

Vale la pena mencionar que la pila que utiliza el manejador de interrupcin es la pila del kernel del proceso que fue interrumpido. Esto es una razn ms para ser sumamente cuidadoso con el cdigo de los manejadores de interrupcin.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

82

4.5.2.2 Implementacin de manejadores de interrupcin

Los manejadores de interrupcin son dependientes de la arquitectura, ya que muchas de las tareas se realizan a bajo nivel.

Figura 4.1: Pasos para el manejo de interrupciones en kernel de GNU Linux. Tomado de [4], pgina 74. Los pasos bsicos que debe seguir un manejador de interrupcin son los siguientes:

1. 2. 3. 4.

Guardar el valor de IRQ Guardar registros Llamar a funcin do_irq() Ejecutar cdigo de manejo de interrupcin en C y dependiente de arquitectura.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

83

5.

Deshabilitar la lnea de interrupcin (masking)

(arch/i386/kernel/irq.c y entry.S)

El directorio /proc contiene el sistema de archivos virtual procfs el cual simula algunas funciones del kernel como lectura y escritura de archivos. Un ejemplo importante de este sistema es el archivo /proc/interrupts, el cual contiene las interrupciones que estn registradas.

A continuacin un ejemplo del contenido de este archivo:


CPU0 0: 1: 2: 5: 10: 14: 7566222 593 0 5243009 0 6718780 XT-PIC XT-PIC XT-PIC XT-PIC XT-PIC XT-PIC timer keyboard cascade eth0 usb-uhci ide0

La primera columna es la lnea de interrupcin o nmero de IRQ, las lneas que no salen no tienen manejador instalado. La segunda columna indica el nmero de veces que ha sido interrumpido el procesador en esa lnea, la tercera indica el tipo de controlador de

interrupciones en cuestin y la ltima detalla el dispositivo que se est controlando. La

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

84

funcin del kernel que proporciona la informacin de este archivo se llama show_interrupts().

4.5.2.3 Control de interrupciones

Las funciones para habilitar y deshabilitar las interrupciones son local_irq_enable() y local_irq_disable() respectivamente. Las funciones ms generales sti() y cli() para el manejo de interrupciones fueron eliminadas a partir del kernel 2.5. Tambin existen funciones para deshabilitar y habilitar una lnea IRQ exclusivamente: disable_irq() y enable_irq(). Las funciones in_interrupt() y in_irq() permiten saber si el kernel est en contexto de interrupcin y si este est ejecutando un manejador de interrupcin. Finalmente, el macro irqs_disabled() permite saber si las interrupciones estn habilitadas o deshabilitadas.

4.5.2.4 Introduccin Mitades Inferiores (Bottom Halves)

Los manejadores de interrupciones tienen razones de peso por las cuales deben ser sumamente rpidas, algunas de ellas son:

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

85

Puede haber cdigo importante que deja de ser ejecutado debido a la interrupcin.

Puede haber otra interrupcin que debe ser atendida prcticamente al mismo

tiempo, y no lo es ya que las interrupciones estn deshabilitadas.

El hardware es muy sensitivo al tiempo.

Debido a estas limitantes, los manejadores de interrupciones solo deben hacer lo necesario. Las funciones principales de los manejadores de interrupciones son avisarle al hardware que se est manejando la interrupcin solicitada, y copiar los datos que se desean transferir. Por otro lado, las mitades inferiores tienen como funcin principal hacer el procesamiento de los datos un tiempo despus.

En la versin 2.6 del kernel de GNU Linux existen tres mecanismos para el manejo de mitades inferiores: softirq, tasklet y work queues (reciente).

4.5.2.5 Softirq

Este mecanismo es raramente utilizado pero constituye la base del ms usado (tasklet). El principio fundamental de los softirqs es que estos son asignados en tiempo de ejecucin,

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

86

por lo tanto no pueden ser manejados dinmicamente en ejecucin como es el caso del tasklet.

En el cdigo del kernel 2.6 hay 32 softirqs definidos de los cuales slo seis se utilizan en la actualidad. Los softirqs corren en contexto de interrupcin, y no pueden ser interrumpidos por otro softirq.

Para poder ejecutar un softirq este debe ser marcado o levantado por un manejador de interrupcin mediante la funcin raise_softirq().

Luego de que la interrupcin termina, el kernel escoge el momento ms apropiado y ejecuta el softirq mediante la funcin do_softirq(). El hilo ksoftirqd del kernel es responsable de verificar que no hayan softirqs pendientes por ejecutar, y de llamar a do_softirq() si es necesario.

Los softirq estn reservados para ser utilizados como mecanismos para el manejo de mitades inferiores de ms alta prioridad en el sistema. Slo existen dos sistemas que tienen acceso directo a los softirq: el de interfaz con discos duros SCSI, y el de interfaz con redes. Los tasklets y los timers estn construidos encima del softirq.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

87

La razn por la cual es necesario para algunos pocos sistemas tener acceso directo a los softirq es por la precisin de tiempo, y la eficiencia de los sistemas de sincronizacin de acceso a recursos.

Los softirq tienen un valor nmerico de prioridad entre 0 y 5, el valor ms bajo tiene prioridad de ejecucin. A continuacin una lista de las prioridades con su descripcin:

0 1 2 3 4 5

Tasklets de alta prioridad Timer Transmisin de paquetes de red Recepcin de paquetes de red SCSI Tasklets

Cada softirq debe tener un manejador el cual corre con las interrupciones habilitadas pero con los softirq deshabilitados. Todo manejador de mitad inferior debe ser registrado en el tiempo de ejecucin mediante la funcin open_softirq().

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

88

4.5.2.6 Tasklet

Estos son mecanismos similares a los softirq pero que tienen un interfaz ms sencillo y requerimientos de sincronizacin de acceso a recursos mucho menos exigentes que los primeros. Estos corren en contexto de interrupcin y pueden tener dos estados: RUNNING o STATE_SCHED. Para poner un tasklet en ejecucin se debe utilizar la funcin tasklet_schedule() y tasklet_hi_schedule() para tasklets de alta prioridad.

El hilo del kernel llamado ksoftirqd es un programa que ayuda al kernel cuando hay una gran cantidad de softirqs levantados al mismo tiempo, por ejemplo durante tiempos de gran cantidad de acceso a la red. Debido a que los softirqs se pueden levantar a s mismos, stos pueden generar una gran cantidad de softirqs adicionales. Existe un softirq por procesador en la computadora.

4.5.2.7 Work Queue

Este mecanismo se caracteriza porque corre en un hilo de kernel, en otras palabras en contexto de proceso. Esto significa que tiene todas las ventajas de los programas que se ejecutan en contexto de proceso, especialmente la capacidad de dormirse y dejar a otro proceso ms importante entrar en ejecucin. Esta capacidad es la diferencia ms importante con los tasklets.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

89

En general, para escoger el mecanismo de mitad inferior adecuado para una tarea especfica se considera en qu contexto puede correr el cdigo, ya sea de interrupcin o de proceso.

A la hora de accesar informacin que est siendo utilizada por algn sistema de mitad inferior se debe deshabilitar el sistema de mitades inferiores para evitar corrupcin en la informacin.

4.5.2.8 Task Queue

Este era un mtodo que se usaba en los kernels 2.4 y anteriores, a partir de las versin 2.6 , debido a la implementacin de los Work Queues, se dej fuera.

4.5.3 El protocolo serial de comunicaciones EIA/RS-232

Cuando una computadora recibe o enva informacin bit a bit, se dice que la comunicacin es en forma serial. El protocolo ms conocido para la transmisin de datos es el EIA232 el cual se conoce tradicionalmente como RS-232.

El ncleo del protocolo es la sealizacin elctrica que hace posible la comunicacin y sta esta basada en un nivel de voltaje para un uno y otro para un cero. A continuacin las seales ms importantes que componen este estndar:

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

90

GND. Tierra. Esto funciona como nivel de referencia para determinar la polaridad

de las seales. RXD. Datos recibidos. Seal que se encarga de recibir los datos. TXD. Datos enviados. Esta seal se encarga de enviar los datos. DCD. Deteccin de portadora de datos. Esta seal es siempre fijada por el otro lado

de la conexin e indica que est en lnea. DTR. Terminal de datos lista. A travs de esta seal el otro lado de la conexin

indica si ya est listo para iniciar la transmisin. CTS. Listo para enviar. Esta seal le indica lo mismo que DTR al otro lado de la

conexin. RTS. Solicitud para transmitir. Por medio de esta seal se le indica al otro lado que

hay ms datos que se deben transmitir.

Si se desear establecer comunicacin entre dos computadoras se deben invertir las lneas RXD y TXD de un lado con el fin de que la transmisin y recepcin sea coordinada.

Uno de los parmetros ms importantes que define la forma en que se lleva a cabo la comunicacin es la velocidad, la cual define cuantos caracteres puede haber por segundo; en el caso de las comunicaciones digitales los caracteres son uno o cero. Este parmetro se mide en baudios o bits por segundo (bps).

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

91

Existen dos tipos de comunicacin serial: sincrnico y asincrnico. El primero se caracteriza por la constante transmisin de datos y la utilizacin de un reloj comn entre ambas partes para sincronizar la comunicacin. Por otro lado, la transmisin asincrnica permite la transmisin de datos en cualquier momento ya que se utiliza un bit que indica el inicio de la transmisin.

Detalles de como se realiza el manejo de los puertos seriales en GNU Linux en el lenguaje C se pueden obtener en el documento Serial Programming HOWTO al cual se hace referencia en la bibliografa.

4.6 Preguntas
1. En un sistema incrustado con memoria limitada se recomienda utilizar libreras

dinmicas compartidas en los programas, porque utiliza menos espacio en la memoria secundaria que si se compilara con libreras estticas, pero tambien ahorran memoria RAM en tiempo de ejecucin. Explique por qu.

2.

Cul es la gran ventaja que tienen los dispositivos PCI sobre los ISA en trminos

de ahorro de recursos del sistema?

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

92

3.

Suponga que usted debe escribir un driver para un dispositivo E/S el cual no tiene

memoria mapeada dentro del espacio del sistema. Especifique que mtodo debe usar, y cuales son las funciones principales que tiene el estndar GNU C para lograr la comunicacin con estos dispositivos.

4.

Explique las diferencias de las interrupciones convencionales con las excepciones y

las interrupciones por software.

4.7 Gua de procedimientos simplificada


4.7.1 Paso 1: Utilizacin del BIOS de SBC para pruebas E/S

- De acuerdo al estndar PCI, explique las columnas Slot, Vend, Base1, Base2 e Int de la tabla que muestra el BIOS cuando se inicia la computadora.

- Utilice el comando db para encontrar alguna posicin de memoria vaca en el segmento 0000.

- Ahora, utilizando el comando eb, escriba algn valor a esa direccin que encontr anteriormente y compruebe que la escritura se llev acabo con el comando db.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

93

- Utilizando el comando od, haga escritura del nmero hexadecimal 10 al puerto E/S con direccin 6102 y comente qu cambio visible se da en la SBC. Compruebe, mediante el comando id, que el valor que usted escribi al puerto se mantiene ah.

Detalle en su reporte todos los comandos utilizados.

4.7.2 Paso 2: Pruebas de E/S con pantalla LCD y teclado

- Realice la conexin de alimentacin elctrica con el LCD y verifique que el logotipo de Matrix Orbital aparece en la pantalla apenas la enciende. Tenga mucho cuidado con las conexiones de alimentacin del LCD ya que si se le aplica un voltaje reverso o equivocado es muy probable que la destruya.

- De acuerdo a lo estudiado en la investigacin previa, realice la conexin entre el segundo puerto serial de la SBC y el puerto de la pantalla LCD utilizando un cable plano con un conector DB9 masculino en un lado y un conector femenino para diez pines. Haga las mediciones de voltaje necesarias entre los pines del conector DB9 para garantizar que los pines del mismo representan las seales correctas.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

94

- En el reporte de esta prctica incluya diagramas detallados de los circuitos y conexiones realizadas.

- Con el objeto de verificar que lo que usted realiz en los pasos anteriores, haga pruebas con la utilidad echo y el operador > del shell para escribirle algn texto a la pantalla LCD.

- Escriba una librera dinmica en el lenguaje C para escribir a la pantalla LCD y leer del teclado. Explique de forma general el propsito de las funciones open, write y close as como la variable file descriptor.

- Escriba un programa, utilizando la librera previamente desarrollada, que escriba sus iniciales en la pantalla. Adems, hgale los ajustes necesarios a la librera para que, con pocas lneas de cdigo desde un programa, pueda desplazar su nombre indefinidamente hacia a lo largo de la primera lnea de la pantalla.

- Escriba un programa, utilizando la librera previamente desarrollada, que lea del teclado y lo despliegue en la consola de la SBC.

- Adapte el programa y, si es necesario, la librera escrita anteriormente para que, utilizando el teclado, mueva sus iniciales hacia la izquierda o derecha en la primera lnea de la pantalla LCD con las teclas + y -. Adems, el programa debe escribir el carcter ledo del

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

95

teclado y desplegarlo en la consola de la SBC. Utilice el mtodo de polling para comunicarse con el teclado del LCD.

4.7.3 Paso 3: Pruebas de E/S con puertos GPIO y LED

De acuerdo a lo estudiado en la primera prctica, los puertos GPIO de la SBC se encuentran en el conector JP5 segn la especificacin de la hoja del fabricante. Estos puertos estn controlados internamente por el controlador E/S de National Semiconductor PC87366, el cual tiene muchas otras funciones dentro de la SBC. As mismo, el LED de error de la SBC es controlado por uno de los puertos GPIO del PC87366. Es importante mencionar que el procesador SC1100, segn su hoja de fabricante, tambin tiene puertos GPIO pero estos no son los que utiliza el circuito de la tarjeta. En el sitio web de este curso se encuentra un parche para el kernel 2.4.25 para incluir soporte en el kernel para manejar estos puertos GPIO, incluyendo el del LED.

- Debido a que se est utilizando el kernel 2.6 y el parche es para una versin anterior, se le deben hacer los ajustes necesarios al parche para incorporarle esta funcionalidad al kernel 2.6 que se est utilizando. Los cambios necesarios son principalmente ajustes menores en el cdigo del driver, y ajustes en la manera en que se incorpora el soporte dentro del kernel.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

96

- Una vez realizadas las modificaciones adecuadas al kernel, ste debe ser compilado nuevamente e instalado en la SBC. Al reiniciar el sistema se debe ver un mensaje parecido a 4801gpio: Geode GPIO base 0x6100 con el cual queda claro que el kernel ha reconocido los puertos GPIO.

- Realice pruebas de lectura y escritura a los puertos GPIO utilizando simples comandos de entrada y salida con los archivos respectivos en /proc. Para comprobar que su programa funciona utilice una punta lgica.

- Escriba un programa en el lenguaje C que tenga las siguientes funciones:

- Encienda y apague el LED de error - Ponga en alto o en bajo un puerto especfico GPIO.

El programa debe realizar estas funciones separadamente de acuerdo con un parmetro que se le especifique en la lnea de comandos. Antes y despus de cada cambio el programa debe determinar el estatus del LED y del GPIO e imprimirlo a la consola.

4.8 Referencias Bibliogrficas


Para esta prctica puede utilizar los siguientes libros que se encuentran en la bibliografa de este documento: 1, 4, 5, 6, 7 8, 9, 11, 13, 14, 23, 24, 27, 29, 36, 40, 41, 42.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

97

4.9 Solucin Propuesta


4.9.1 Respuestas a Preguntas

1.

La gran ventaja de las libreras dinmicas, es que todos los procesos que las utilizan,

accesan su texto cdigo en una misma posicin de la memoria, lo que determina un ahorro significativo de memoria, el cual es de gran importancia para los sistemas empotrados, dados los escasos recursos. Lo nico que no se comparte entre procesos es la parte de datos de la librera, pero esto es normalmente muy pequeo. En cambio, los programas que utilizan libreras estticas, copian las funciones que necesitan al texto del programa, haciendo ineficiente la utilizacin de los recursos. La ventaja de las libreras estticas es una instalacin ms sencilla, ya que no hay que instalar libreras en el sistema donde va a correr el programa.

2.

La ventaja que ofrece el estndar PCI sobre el ISA es que puede compartir lneas de

IRQ con otros dispositivos. Por ejemplo, en la tarjeta SBC, que se utiliza en este laboratorio, la lnea IRQ nmero 10 es utilizada por los tres adaptadores de red Ethernet. Si los adaptadores fuesen ISA habra que tener lneas separadas para cada uno de ellos.

3.

Para comunicarse con dispositivos que no tienen memoria mapeada en el sistema, se

deben acceder mediante una direccin de puerto E/S. La arquitectura x86 tiene un espacio de direccionamiento para puertos E/S desde 0000h hasta FFFFh los cuales habilitan la

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

98

posibilidad de comunicarse con

los dispositivos conectados a estos puertos.

4.

Las excepciones son un tipo de interrupcin que realiza el procesador con el fin de

notificar al sistema operativo que se ha producido algn error; por ejemplo cuando no hay memoria disponible para realizar cierta operacin. Una diferencia importante con las interrupciones convencionales es que stas no se utilizan para hacer transferencia de informacin entre el procesador y el sistema operativo. Adems stas se llevan a cabo de forma sincrnica ya que ocurren en coordinacin con el reloj del procesador; en cambio las interrupciones convencionales se pueden llevar a cabo en cualquier momento independientemente del procesador.

Las interrupciones por software son similares a las interrupciones por hardware, con excepcin que en stas no se realiza ningn tipo de comunicacin E/S; todo sucede internamente en la computadora. Cuando algn programa ejecuta una interrupcin por software, se busca la ISR asociada al ndice de la interrupcin, y se corre. Al igual que sucede con las interrupciones convencionales, la posibilidad de atender ms interrupciones, es deshabilitada hasta que la ISR las vuelva a habilitar.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

99

4.9.2 Procedimiento

4.9.2.1 Paso 1

-El parmetro Slot indica la posicin en la que el dispositivo est conectado. Esta posicin se divide en tres campos importantes: el bus (ocho bits), dispositivo (cinco bits) y funcin (tres bits).

Vend es un parmetro que identifica a la compaa que fabric el dispositivo y cada fabricante tiene uno.

Int es el nmero de lnea de interrupcin que utiliza el dispositivo.

Base1 y Base2 son los dos espacios de memoria que tiene asignado el dispositivo. Existe la posibilidad que el dispositivo tenga hasta cinco espacios de memoria asignados, sin embargo esto no es lo usual.

-Utilizando el comando db se localiz la posicin de memoria del segmento 0000 con offset ABAB la cual est vaca cuando se inicializa el sistema. Este es el resultado del comando que muestra que no hay nada almacenado:

0000:ABAB

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

................

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

100

-Mediante el comando eb 0000:ABAB FF se puso un byte con todos sus bits fijados en uno en esta posicin. Con el comando db se comprob esto y se obtuvo:

0000:ABAB

FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

*...............

-Segn la hoja del fabricante del controlador PC87366 y pruebas realizadas, la direccin 6102 del puerto E/S de la SBC es la correspondiente al registro que controla el estado del puerto GPIO que maneja la luz del LED de error; por lo tanto al escribirle el nmero hexadecimal 10 se encendi.

4.9.2.2 Paso 2

El diagrama de conexiones del puerto serial de la SBC con el LCD se muestra a continuacin:

Figura 4.2: Diagrama de conexiones entre LCD y SBC

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

101

- Una vez todo conectado, y habiendo verificado que la pantalla est encendida, se ejecut el siguiente comando echo prueba > /dev/ttyS1 con el fin de comprobar que la pantalla LCD est conectada correctamente. La palabra prueba sali en la pantalla.

- El cdigo de la librera para la escritura al LCD, y la lectura del teclado muestra a continuacin:

/*

liblcd.c

Librera para escribir a pantalla LCD Matrix Orbital LK-204-25 y leer de su teclado Laboratorio de Sistemas Incrustados, EIE, UCR

Por Roberto Cardona Soto Julio 2004

*/

#include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <termios.h> #include <fcntl.h>

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

102

#include <string.h> #include <errno.h>

#define BAUDRATE B19200

speed_t velocidad = B19200; char disp[256] = "/dev/ttyS1"; struct termios portset; //estructuras para almacenar configuracin del puerto struct termios portset_save; int fd; //file descriptor para acceso del puerto serial unsigned char prefix = 254; char buf[255]; //buffer para lectura int res; //variable para lectura unsigned char c1 = 0; //variables para guardar comandos para LCD unsigned char c2 = 0; unsigned char c3 = 0; int i; //contador

//Funcion para inicializar LCD void init() { fd = open(disp, O_RDWR | O_NOCTTY ); //abrir puerto para escribir y leer if (fd == -1) { //excepcin, mostrar error fprintf(stderr, "Device open: Failed\n"); return; } tcgetattr(fd, &portset_save); //obtener configuracin actual y guardarla bzero(&portset,sizeof(portset)); //llenar de ceros nueva configuracin //fijar velocidad, 8n1, conexin local y posibilidad de leer caracteres portset.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

103

portset.c_iflag = IGNPAR; //ignorar bytes con errores de paridad portset.c_oflag &= ~OPOST ; //borrar configuracin para output portset.c_lflag = 0; //borrar configuracion para terminal local portset.c_cc[VTIME] = 0; //fijar tiempo entre caracteres a 0 portset.c_cc[VMIN] = 2; //fijar lectura de 2 caracteres (keydown y keyup) tcflush(fd, TCIFLUSH); //borrar todos los datos que estn en el puerto serial tcsetattr(fd,TCSANOW,&portset); //aplicar configuracin nueva inmediatamente }

//Funcin para terminar comunicacin con LCD void finit() { //fijar parmetros anteriores en puerto serial usleep(250000); pendientes*/ tcsetattr(fd, TCSANOW, &portset_save); close(fd); } //cerrar file descriptor /*Esperar 0.25 segundos para determinar si hay escrituras

char traducirCh(char c) { //Traduce de carcter interpretado por controlador LCD a carcter real if (c=='t') return '1'; else if (c=='e') return '2'; else if (c=='j') return '3'; else if (c=='o') return 'A'; else if (c=='s') return '4'; else if (c=='d') return '5'; else if (c=='i') return '6'; else if (c=='n') return 'B';

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

104

else if (c=='r') return '7'; else if (c=='c') return '8'; else if (c=='h') return '9'; else if (c=='m') return 'C'; else if (c=='q') return '+'; else if (c=='b') return '0'; else if (c=='g') return '-'; else if (c='l') return 'D';

return '*'; //no se reconoci carcter

//Funcion para escribirle al LCD int escribir(char *str) { init(); write(fd, str, strlen(str)); finit(); }

//Funcin para leer del teclado del LCD, solo debe ser utilizada internamente

static char leer() { for(i = 0; i < 10; i++) buf[i] = '\0'; //llenar de ceros el buffer res = read(fd,buf,255); //devuelve luego que leer dos caracteres return buf[1]; //tomar carcter de key up }

//funcin genrica

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

105

void funcinGenrica(char ch) { init(); c1 = ch; write(fd, &prefix, 1); write(fd, &c1, 1); finit(); }

//funciones para controlar LCD //Se implementan de acuerdo a los comandos que se encuentran en el manual LCD //El carcter prefix es el que le dice al LCD que la prxima instruccin es de //control/configuracin

void setPos (int col, int row) { //Fija posicin en (fila,columna) init(); write(fd, &prefix, 1); c1 = 71; c2 = (char)col; c3 = (char)row; write(fd, &c1, 1); write(fd, &c2, 1); write(fd, &c3, 1); finit(); }

void sendHome () { //Coloca cursor en posicin (0,0) funcionGenerica(72); }

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

106

void blinkingOn() { //Habilita parpadeo de cursor funcionGenerica(83); }

void blinkingOff() { funcionGenerica(84); }

//Deshabilita parpadeo de cursor

void cursorLeft() { funcionGenerica(76); }

//Mueve el cursor a la izquierda una posicin

void cursorRight() { //Mueve el cursor a la derecha una posicin funcionGenerica(77); }

void clearDisplay() { funcionGenerica(88); }

//Limpia toda la pantalla

void setAutoscroll() { //Habilita el scrolling automatico funcionGenerica(81); }

void setAutowrap() { //Habilita el wrapping automatico funcionGenerica (67); }

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

107

//funciones para el manejo del teclado

void setAutoTxOff() { funcionGenerica(79); }

void setAutoRepeat() { //Fija modo de key up/key down para comunicacin con teclado init(); c1 = 126; c2 = 1; write(fd, &prefix, 1); write(fd, &c1, 1); write(fd, &c2, 1); finit(); }

void clearKeyBuffer() { //Limpia buffer de teclado en controlador de LCD funcionGenerica(69); }

char pollKeypad() { //Hace polling al teclado init(); c1 = 38; write(fd, &prefix, 1); write(fd, &c1, 1); c2=leer(); c3=traducirCh(c2); finit();

IE-0502
return(c3); }

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

108

void setDebounce(int n) { //Fija el tiempo de los rebotes del teclado init(); c1 = 126; c2 = 85; c3 = n; write(fd, &prefix, 1); write(fd, &c1, 1); write(fd, &c2, 1); write(fd, &c3, 1); finit(); }

/* FIN */

Se debe prestar especial atencin a los siguientes puntos:

En el modo de polling que se especific en la gua de la prctica, que se deba

utilizar el sistema husped (la SBC en este caso), debe estar solicitndole al controlador del LCD que le enve los caracteres que ha ledo del teclado. Cuando se presiona una tecla, se almacena la letra mayscula correspondiente al cdigo ASCII, y cuando se levanta, se enva la letra minscula. Debido a algunos problemas observados con los rebotes,se determin que es ms seguro leer el carcter minsculo para evitar malas interpretaciones.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

109

Por esta razn se fij el VMIN en dos, para que la funcin read() se devuelva despus de leer dos caracteres, y el segundo es el que se utiliza para todos las operaciones.

Una prctica recomendada en aplicaciones que utilicen puertos seriales es el

mantener la configuracin del puerto serial original una vez que el programa haya terminado. En este programa se guard en la estructura port_save.

Los caracteres que resultan de presionar las teclas no son las que tiene el teclado

impreso, por lo que se tuvo que hacer una traduccin, para esto est la funcin traducirCh().

La configuracin de comunicacin serial utilizada es no cannica, ya que se

necesita tener acceso a los caracteres a bajo nivel sin ningn tipo de procesamiento. La gran parte de la configuracin serial se realiz de acuerdo a lo estipulado en el HOWTO de programacin serial el cual se menciona en la bibliografa. Adems, se fij el modo OPOST de la salida del puerto serial para poder manipular los caracteres a bajo nivel, y se coloc un pequeo retardo en la aplicacin de los parmetros originales, ya que se observ que si se aplicaban inmediatamente los ltimos datos transmitidos, se corrompan.

Con el fin de convertir este cdigo en librera se compil con los siguientes comandos:
gcc -c -fPIC liblcd.c gcc -shared -fPIC -o liblcd.so liblcd.o

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

110

El primer comando le indica al compilador que no haga enlazamiento o linking, y que el cdigo que se est compilando es independiente de posicin; por lo tanto en el archivo objeto no deben ir dependencias a posiciones de memoria ya que, como la librera es dinmica, puede ser utilizado por diferentes programas en diferentes posiciones de memoria.

El segundo comando le indica al compilador mediante la bandera shared que el archivo objeto ser una librera compartida, lo cual es siempre el caso de las libreras dinmicas.

Se coloc esta librera dinmica en /lib o /usr/lib, que es donde el sistema busca por defecto a la hora de ejecutar el programa.

A continuacin se muestra el programa de escritura a la LCD:

/*

testlcd.c

Programa de prueba para escribir iniciales en pantalla y desplazarlas hacia la derecha indefinidamente.

Requiere liblcd.so

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

111

Por Roberto Cardona Soto Julio 2004 Laboratorio Sistemas Incrustados, EIE, UCR

*/

#include <stdio.h> #include <stdlib.h>

main() {

int i = 0; //contador inicializado en 0 int retardo = 200000; //retardo en microsegundos antes de mover texto char *iniciales = "RCS"; //iniciales de nombre clearDisplay(); //limpiar pantalla blinkingOn(); //habilitar cursor sendHome(); //posicionar cursor en posicin (0,0) setAutoscroll(); //habilitar scrolling setAutowrap(); //habilitar wrapping

while(1) { //bucle infinito

clearDisplay(); //limpiar pantalla para borrar lo que se setPos(i%17,1); //Garantiza que posicin se mantiene en una misma linea printf("%d\n",i%18); //imprime posicin de cursor en STDOUT

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

112

escribir(iniciales); //escribe nombre i++; //aumenta contador para mover texto a la siguiente posicin usleep(retardo); //Fija frecuencia de refrescamiento

Como la librera liblcd reside en el mismo directorio, este programa se compil con el siguiente comando:

gcc

-o testlcd testlcd.c -L. llcd

El parmetro L. le indica al compilador que debe usar el directorio en donde se ejecuta como ruta para encontrar libreras y el parmetro l le indica que debe usar la librera liblcd.

El segundo programa se muestra a continuacin:

/*

testlcd2.c

Programa para desplegar iniciales en LCD

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

113

y moverlas con las teclas + y - del teclado.

Requiere liblcd.so

por Roberto Cardona Soto Julio 2004 Laboratorio Sistemas Incrustados, EIE, UCR */

#include <stdio.h>

main() { char *iniciales = "RCS"; int pos = 1; char k; clearDisplay(); setAutoTxOff(); clearKeyBuffer(); setAutoRepeat(); setDebounce(16);//fijar //prueba y error blinkingOn(); sendHome(); escribir(iniciales); valor de rebote teclado, determinado por

while(1) { //bucle infinito

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

114

k = pollKeypad(); if (k == '+') { pos++; } //aumenta posicin else if(k == '-') { pos--; } //disminuye posicin clearDisplay(); setPos(pos,1); //Garantiza que posicin se mantiene dentro de una linea escribir(iniciales); printf("Car:%c y pos:%d\n",k,pos); //imprime posicin y carcter leido usleep(20000); //fijar frecuencia de polling }

Este programa se compil igual que el primero.

4.9.2.3 Paso 3

-Se adjunta parche modificado y dems archivos que se deben cambiar.

-Las pruebas que se realizaron para comprobar que los puertos GPIO y el LED de error funcionen adecuadamente son:

echo 1 > /proc/drivers/soekris_error_led echo 111111111111 > /proc/drivers/soekris_gpio

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

115

Con esto se encendi el LED de error y se pudo medir un uno lgico en todos los puertos GPIO.

-El programa se muestra a continuacin:

/*

testgpio.c

Programa de prueba que determina y modifica estatus de LED de error y puertos GPIO

Llamar de la siguiente forma:

Para encender LED error: testgpio -Lon Para apagar LED error: testgpio -Loff Para poner en alto un puerto GPIO: testgpio -Gon<numero>, por ejemplo testgpio -Gon9 Para poner en bajo un puerto GPIO: testgpio -Goff<numero>, por ejemplo testgpio -Goff7

Despus de cada cambio se imprime el nuevo estatus.

Si no se le especifica un parmetro correcto el programa solo imprime el estatus del LED de error y de los puertos GPIO.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

116

Por Roberto Cardona Soto Julio 2004 Laboratorio Sistemas Incrustados, EIE, UCR

*/

#include <stdio.h> const char *filename1 = "/proc/driver/soekris_gpio"; //ubicacion de

archivos de GPIO y LED de error const char *filename2 = "/proc/driver/soekris_error_led"; char gpio_s[12]; //arreglo que guarda estatus de cada puerto GPIO, son 12 puertos char led_s; //variable que guarda estatus de luz led char ch; //carcter para uso mltiple char *msg_gpio; //mensaje estatus GPIO char *msg_led; //mensaje estatus LED int i; //contador char numeroPuerto[2]; //variable que almacena nmero de puerto que se debe escribir FILE *file1, *file2; //punteros a archivos

void init() { //funcin que abre archivos importantes

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

117

file1 = fopen(filename1, "a+"); //abrir primer archivo if (file1 == NULL) { printf("Error al abrir archivo %s!\n",filename1); exit (8); }

file2 = fopen(filename2, "a+");

if (file2 == NULL) { //abrir segundo archivo printf("Error al abrir archivo %s!\n",filename2); exit (8); }

void getGPIO() { //Estatus GPIOs rewind(file1); for(i=11;i>-1;i--) { ch = fgetc(file1); gpio_s[i] = ch; if (ch == EOF) { printf("Final inesperado de %s!\n",filename1); break; } }

for(i=11;i>-1;i--) { msg_gpio = (gpio_s[i] == '0') ? "apagado" : "encendido";

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS printf("El Puerto GPIO numero %d

118
esta

%s(%c)\n",i,msg_gpio,gpio_s[i]); }

}//cierra getGPIO()

void getLED() { //Estatus LED rewind(file2); led_s = fgetc(file2); msg_led = (led_s == '0') ? "apagado" : "encendido";

printf("El LED de error esta %s (%c)\n",msg_led,led_s); } //cierra getLED()

void setGPIO(int puerto, char valor) { //Fija puerto GPIO rewind(file1);//poner offset al inicio de archivo gpio_s[puerto] = valor; //fijar nuevo valor for(i=11;i>-1;i--) { fputc(gpio_s[i],file1); } printf("Se puso el puerto GPIO numero %d en %c\n",puerto,valor); } //cierra setGPIO()

void setLED (char valor) { //Fija LED error

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

119

rewind(file2);//poner offset al inicio de archivo led_s = valor; fputc(led_s,file2); printf("Se puso el LED de error en %c\n",valor); } //cierra setLED()

void finit() { //funcin que cierra archivos fclose(file1); fclose(file2); } //cierra finit

int main(int argc, char *argv[]) { init(); getGPIO(); //al inicio del programa siempre se imprime estatus de LED //de error y puertos GPIO getLED();

for (i = 1; i < argc; i++) { //procesar argumentos de programa if (strncmp(argv[i], "-Lon", 4) == 0) { //Encender LED setLED('1'); getLED(); continue; }

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

120

if (strncmp(argv[i], "-Loff", 5) == 0) { //Apagar LED setLED('0'); getLED(); continue; }

if (strncmp(argv[i], "-Gon",4) == 0) { if (argv[i][2] != '\0') //Encender un GPIO strncpy(numeroPuerto, &argv[i][4], 2); setGPIO(atoi(numeroPuerto),'1'); getGPIO(); continue; }

if (strncmp(argv[i], "-Goff", 5) == 0) { if (argv[i][2] != '\0') //Apagar un GPIO strncpy(numeroPuerto, &argv[i][5], 2); setGPIO(atoi(numeroPuerto),'0'); getGPIO(); continue; }

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

121

finit();

} //cierra main

Los programas GDB y strace fueron de gran utilidad para encontrar fallas y deficiencias en los programas enunciados anteriormente.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

122

CAPITULO 5: TERCERA PRACTICA, Redes TCP/IP


5.1 Objetivo General
Aprender a programar la comunicacin con redes TCP/IP en GNU Linux, utilizando estructuras de bajo nivel.

5.2 Objetivos Especficos


- Entender los conceptos bsicos del modelo OSI, y su implementacin en redes TCP/IP. - Configurar parmetros de acceso a una red TCP/IP sobre Ethernet. - Utilizar estructuras de bajo nivel de GNU Linux para manipulacin de paquetes y parmetros de acceso a redes.

5.3 Duracin
La duracin recomendada para esta prctica es de dos sesiones de cuatro horas.

5.4 Investigacin Previa


Comandos de configuracin de acceso a red en GNU Linux: ifconfig, route y netstat Comandos de prueba de acceso a red: ping y traceroute.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

123

Estructuras de bajo nivel en GNU Linux para manejo de redes. Forma en que se documentan los estndares de Internet.

5.5 Marco Terico


Probablemente la mayora de los sistemas incrustados de hoy y, en especial, del futuro tienen como requerimiento bsico el implementar algn tipo de comunicacin con redes TCP/IP. Debido a esto y a la naturaleza de los sistemas operativos de la familia UNIX los cuales tienen el manejo de redes incorporado en el ncleo del sistema operativo, se va a hacer una introduccin detallada de las redes TCP/IP a continuacin.

5.5.1 Introduccin a modelos por capas en sistemas de comunicacin

Todo sistema de comunicacin de cierto nivel de complejidad implementa un modelo dividido por capas, para encapsular funcionalidad y permitir la operacin de diversos componentes del sistema en los diferentes niveles, sin necesidad de conocer la complejidad y forma en que funcionan las dems capas. Un ejemplo de la vida real de como funcionan las capas es el sistema de correo postal: una persona deposita una carta en un buzn; la carta es luego recogida por un cartero, quien la lleva al centro de distribucin ms cercano. Luego de pasarla por varios filtros, la carta es transportada a un centro de distribucin cercano al destinatario; posteriormente es depositada en el casillero del destinatario, y

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

124

finalmente es leda. Se puede apreciar que los diferentes componentes de este sistema no conocen cmo funcionan los dems y, a pesar de ello, el sistema funciona correctamente.

El sistema dividido en capas permite que haya desarrolladores expertos en cada una de las mismas, sin tener que conocer con detalle las dems capas. Por ejemplo, ingenieros expertos en modulacin digital y desarrolladores experimentados en software para correccin de errores de transmisin, pueden trabajar juntos sin necesidad de conocer cmo funciona en detalle la capa en la cual cada uno trabaja.. Lo nico que se debe conocer, es el interfaz con las capas adyacentes, ya que no va a haber interaccin directa con otras capas.

Otra gran ventaja de los sistemas divididos en capas, es que permite corregir y mejorar cada capa sin necesidad de modificar las dems. Esto es sumamente til ya que en el mundo de la tecnologa de sistemas de informacin, el avance es sumamente rpido y sera sumamente costoso e ineficiente tener que redisear todas las partes de un sistema de comunicacin, si alguna capa cambia.

Los sistemas divididos en capas deben ser utilizados con mucho cuidado, ya que se puede incurrir en problemas de rendimiento si el acoplamiento entre capas adyacentes no est diseado de forma eficiente.

Un clsico ejemplo de utilizacin de modelos en capas es el sistema de sealizacin 7 (SS7 por sus siglas en ingls), el cual es utilizado en la telefona moderna.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

125

5.5.2 Implementacin de modelo en capas en redes TCP/IP

La utilizacin de sistemas de capas no es la excepcin en las redes TCP/IP, pues se utiliza un esquema de capas basado en el modelo OSI (Open System Interconnection), de la Organizacin de Estndares Internacional (ISO).

El modelo OSI se define por tener siete capas las cuales se definen a continuacin: Tabla 5.1: Capas de modelo OSI Aplicacin Presentacin Sesin Transporte Acceso a red Enlace de datos Medio fsico En el caso de las redes TCP/IP ste se simplifica a lo siguiente: Tabla 5.2: Capas de modelo OSI Aplicacin Transporte Interfaz de red Enlace de datos

Cada una de estas capas se explica a continuacin.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

126

5.5.2.1 Capa de aplicacin

Esta capa contempla parte del nivel de sesin y las capas aplicacin y presentacin del modelo OSI. El software que utiliza el usuario final para comunicarse con otros sistemas en la red es el que interacta con esta capa. Un ejemplo de un protocolo que corresponde a esta categora es el HTTP (Hyper Text Transfer Protocol) que es utilizado hoy en da para la transmisin de pginas en Internet. Este protocolo define una serie de estndares que modelan la comunicacin entre el navegador de Internet (por ejemplo el Internet Explorer de Microsoft), y el software servidor de pginas que el usuario est accesando (por

ejemplo Apache de Apache Software Foundation). Debido a la forma en que funcionan los sistemas en capas, el protocolo HTTP no conoce como funcionan los protocolos inferiores en el modelo de capas de TCP/IP. Otros ejemplos de protocolos en la capa de aplicacin, son los utilizados para el correo electrnico: SMTP (Simple Mail Transfer Protocol), y POP3 (Post Office Protocol versin 3).

5.5.2.2 Capa de Transporte

La capa de transporte del modelo de capas de TCP/IP incluye la capa de transporte, y parte de la capa de sesin del modelo OSI. Los protocolos fundamentales en esta capa son UDP (User Datagram Protocol) y TCP (Transport Control Protocol). El primero define un tipo de

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

127

comunicacin que no es orientada a una sesin, por lo tanto, no existen etapas de negociacin para establecer una comunicacin entre dos sistemas, ni solicitud de transmisin y acuse de recibo. Por otro lado, el protocolo TCP s implementa esto; para poder iniciar una comunicacin con este protocolo, las computadoras de cada lado deben seguir una serie de pasos para establecer el canal de comunicacin y, adems, debe haber acuse de recibo de paquetes.

Se podra pensar que el protocolo UDP no tiene mucha utilidad si se puede utilizar el protocolo TCP, pero existen muchas aplicaciones en las que es preferible utilizar el primero. Por ejemplo, cuando el desarrollador de un programa desea implementar un protocolo de establecimiento de sesin que sea parte de su programa, es preferible utilizar el protocolo UDP. Otra razn para utilizar UDP es para reducir los datos requeridos para la transmisin, ya que el encabezado del paquete UDP es mucho ms pequeo que el de los paquetes TCP.

5.5.2.3 Capa de Acceso a Red

La capa de acceso a red cumple algunas funciones de las capas de acceso a red, enlace y medio fsico del modelo OSI. La base de esta capa es el protocolo IP (Internet Protocol), que es el encargado de transferir datos entre los nodos orgen y destino. En el caso de transmisin y recepcin de datos en una red IP de ms de una subred, es probable que los

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

128

paquetes atraviesen varias redes antes de llegar a su destino final. El protocolo IP hace esto posible ya que tiene una serie de parmetros que permiten la identificacin y enrutamiento adecuado de los paquetes para que lleguen a su destino final. En el caso de redes IEEE 802.3 o Ethernet, la capa de acceso a red hace posible que un paquete sea transmitido y ruteado ms alla de la red de donde el mismo se origin. Debido al modelo OSI, la capa en la que opera el protocolo IP tambin es conocida como la tres.

Adems del protocolo IP, la capa de acceso a red se compone de los protocolos IGMP (Internet Group Management Protocol) e ICMP (Internet Control Message Protocol). El primero tiene relacin con el manejo de protocolos multicast, y el segundo se utiliza para controlar el estatus de las comunicaciones IP. A pesar de ser parte de la misma capa, estos dos protocolos necesitan del protocolo IP para poder ser transmitidos en la red, por lo que los paquetes ICMP e IGRP siempre tendrn un encabezado IP.

5.5.2.4 Capa de Enlace de Datos

Esta capa cumple algunas funciones de las capas de acceso a red, enlace y medio fsico del modelo OSI. La funcin principal es hacer posible la comunicacin entre nodos IP. Esto es factible mediante la realizacin de dos tareas: la codificacin de los datagramas IP en tramas y viceversa, para ser transmitidas en el medio fsico, y el mapeo de la identificacin

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

129

en la capa de acceso a red (direccin IP), a la identificacin en la capa de enlace (direccin MAC en el caso de redes Ethernet) y viceversa. Por tal motivo, los protocolos de la capa de enlace de red deben estar diseados de forma integral con el medio fsico de transmisin. Debido al modelo OSI, la capa en la que opera Ethernet es la de enlace de datos, y se conoce como la dos.

En lo que respecta al nivel fsico, tambin conocido como capa uno en el modelo OSI, se puede decir que aqu se realiza el acondicionamiento y preparacin de la seal que se va a transmitir o recibir. Estos procesos pueden ser, por ejemplo, la denormalizacin y normalizacin de los niveles de voltaje, y la demodulacin y modulacin de la seal.

5.5.3 Introduccin a protocolos de capa dos y capa tres utilizados en las redes TCP/IP

5.5.3.1 IEEE 802.3/Ethernet

Este es un estndar que se conforma por dos protocolos importantes: LLC (Link Layer Control) y MAC (Media Access Control). El primero controla todo lo relacionado al enlace, y el segundo, el acceso al medio propiamente. Por lo tanto, el primero es independiente del medio, y el segundo no. El parmetro que identifica cada nodo en la capa de enlace del modelo OSI se conoce como direccin MAC.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

130

5.5.3.2 Protocolo IP

El protocolo IP es un protocolo que no est orientado a conexin, por lo que no tiene ninguna sealizacin para el envo o recepcin de paquetes. Por tal razn, no hay correccin de errores, retransmisin de datagramas, o garantas de orden de entrega. Para implementar estas funciones hay que recurrir a protocolos en capas superiores, como es el caso del TCP.

A continuacin se muestra la distribucin de los bits dentro del encabezado IP:


0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| IHL |Type of Service| Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification |Flags| Fragment Offset | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time to Live | Protocol | Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figura 5.1: Diagrama encabezado de paquete IP. Tomado de [52], pgina 10. Longitud del encabezado (4 bits): Indica la longitud del encabezado

Longitud total (16 bits): Indica la longitud total del datagrama IP en bytes.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

131

Identificacin: Se utiliza para la fragmentacin.

Banderas (3 bits): Se utiliza para la fragmentacin.

Offset fragmentacin (13 bits): Se utiliza para la fragmentacin.

Protocolo (8 bits): Indica el protocolo que se est utilizando entre las computadoras, de cada lado de la comunicacin. Puede ser TCP, UDP u otro.

TTL (Time to Live) (8 bits): Se utiliza para evitar lazos infinitos de paquetes en las redes.

Checksum encabezado (16 bits): Campo utilizado para verificar que no haya datos corruptos, contiene la suma la longitud del encabezado IP.

Direccin IP origen (32 bits): Indica la direccin de la computadora que envi el paquete.

Direccin IP destino (32 bits): Indica la direccin de la computadora a la que se est enviando el paquete.

Datos de usuario (longitud variable): Aqu van los datos que est enviando el usuario, incluyendo los encabezados de capas superiores como por ejemplo TCP o UDP.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

132

5.5.3.3 Fragmentacin en el protocolo IP

Debido a las caractersticas del medio y del hardware de las diferentes redes, cada una tiene un tamao mximo de transferencia (MTU por sus siglas en ingls). En el caso de los estndares Ethernet de 10 o 100 mbps de tasa de transmisin, el MTU es de 1500 bytes sin incluir el encabezado de capa dos. Cuando el datagrama que se desea enviar es mayor, este se debe fragmentar en paquetes de 1500 bytes o menos. Es importante mencionar que el primer paquete de un datagrama fragmentado es el nico que lleva el encabezado de la capa de transporte, los dems slo llevan el encabezado IP.

5.5.3.4 Protocolo TCP

TCP es un protocolo que se caracteriza por estar orientado a conexin, y por ser confiable. Se le considera confiable porque todo segmento de datos que va a ser transmitido debe ser previamente autorizado por el otro lado de la conexin. Por estar orientado a conexin, debe realizar un proceso de negociacin (handshake) de varios pasos, entre los dos puntos de la comunicacin, para poder entender la forma en que van a trabajar. Los pasos que se deben realizar se detallan a continuacin:

- Sistema origen: solicita sincronizacin de los nmeros de secuencia mediante un paquete SYN.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

133

- Sistema destino: acepta la conexin enviando un ACK, solicitando la sincronizacin de los nmeros de secuencia mediante un SYN. - Sistema origen: acepta la conexin, y enva ACK con la primera transmisin de datos. - Sistema destino: empieza a recibir los datos y tambin puede enviar datos.

El ACK es un acuse de recibo, un paquete TCP con la bandera ACK fijada en alto. El SYN es un paquete TCP con la bandera SYN en alto para solicitar sincronizacin.

Adicionalmente, TCP contiene un mecanismo de control de flujo, llamado mtodo de ventana. Para utilizarlo, se necesitan los campos ventana y nmero de acuse de recibo. Bsicamente este campo indica cuntos bytes puede mandar el punto orgen, sin necesidad que el destino enve un ACK.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

134

A continuacin se muestra la distribucin de los bits dentro del encabezado IP:


0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port | Destination Port | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Acknowledgment Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | |U|A|P|R|S|F| | | Offset| Reserved |R|C|S|S|Y|I| Window | | | |G|K|H|T|N|N| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | Urgent Pointer | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figura 5.1: Diagrama encabezado de paquete TCP. Tomado de [53], pgina 14.

Puerto orgen (16 bits): indica el puerto lgico del sistema que est enviando el paquete.

Puerto destino (16 bits): indica el puerto lgico del sistema que va a recibir el paquete.

Nmero de secuencia (32 bits): Se utiliza para sincronizar la recepcin, y el envo de paquetes.

Nmero de acuse de recibo (32 bits): Se utiliza para el mtodo de ventana de control de flujo TCP.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

135

Ventana (16 bits): Le indica a la computadora que recibe el paquete, el valor numrico de la ventana que est utilizando el emisor del paquete. Sirve para controlar el desplazamiento del valor de la ventana.

Checksum (16 bits): Campo utilizado para verificar que no haya datos corruptos.

Offset (4 bits): Indica en que posicin del paquete empiezan los datos.

Banderas (6 bits): Est compuesto de URG, ACK, PSH, RST, SYN, FIN. Los ms importantes son:

Datos de usuario (longitud variable): Aqu van incluidos los datos que est enviando el usuario.

Un ejemplo de un protocolo de capa cuatro que utilice TCP es el HTTP.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

136

5.5.3.5 Protocolo UDP


0 7 8 15 16 23 24 31 +--------+--------+--------+--------+ | Source | Destination | | Port | Port | +--------+--------+--------+--------+ | | | | Length | Checksum | +--------+--------+--------+--------+ | | | data octets | +------------------------------------

Figura 5.3: Diagrama encabezado de paquete TCP. Tomado de [54] pgina 1. Puerto origen (16 bits) y puerto destino (16 bits): igual que en TCP

Longitud (16 bits): Indica la longitud del paquete.

Checksum (16 bits): Campo utilizado para verificar que no hayan datos corruptos.

Datos de usuario (longitud variable): Aqu van los datos que est enviando el usuario.

Un ejemplo de un protocolo de capa cuatro que utilice UDP es SNMP (Simple Network Management Protocol), un protocolo para gestin de redes TCP/IP.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

137

5.5.3.6 Protocolo ARP

El protocolo ARP (Address Resolution Protocol) permite el mapeo de direcciones IP a direcciones MAC, y el protocolo RARP hace lo inverso. Pertenece a la capa tres.

5.5.4 Direccionamiento en redes IP

Como se vio anteriormente, la forma de identificar nodos en una red IP es mediante su direccin IP, la que debe ser nica. Esta direccin IP es una palabra compuesta por cuatro nmeros de ocho bits separados por un punto, por ejemplo 163.178.124.136. Cada direccin IP pertenece a una red la que a su vez tiene una direccin IP que la identifica. Debido a esto, cada nodo debe tener asignado una mscara de subred la cual define cuntos bits de la direccin IP pertenecen a la identificacin de los nodos, y cuantos a la red en la que se encuentra el nodo.

Se analiza el ejemplo del nodo con la direccin IP 10.0.7.55, que tiene una mscara de subred de 255.255.255.224. Como se puede apreciar, esta mscara tiene en su ltimo octeto cinco bits en cero; por lo tanto, este nodo se encuentra en la red identificada por la direccin IP 10.0.7.32. Se llega a este valor tomando los ocho bits de los primeros octetos, y nicamente los tres bits ms significativos, utilizando la convencin de x86, del ltimo octeto. La ltima direccin IP de una red se conoce como su direccin broadcast. La

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

138

mscara de subred 255.255.255.224 tiene cinco bits para identificacin de nodos, por lo tanto sta contiene 25 32 direcciones IP, de las cuales slo 30 son utilizables ya que las direcciones de broadcast y de red utilizan dos.

El proceso de dividir una red en varias redes pequeas se llama subneteo. Por ejemplo, la red 10.0.7.224 con una mscara de subred 255.255.255.224 tiene 30 direcciones IP utilizables, y se desea dividir en dos redes de 14 direcciones IP utilizables. Para ello se toma el bit ms significativo de los que identifican a los nodos de la red original, y se utiliza para identificacin de red.

255.255.255.22410 = 11111111.11111111.11111111.111000002

Si el bit marcado en negrita se utiliza para identificacin de red, se tienen dos subredes con cuatro bits para identificacin de nodos. En otras palabras, se tienen dos subredes de 16 direcciones IP de las cuales 14 son utilizables para nodos.

Segn el documento RFC 1918, las direcciones IP correspondientes a las siguientes redes, no son enrutables en Internet:

10.0.0.0 con mscara 255.0.0.0 172.16.0.0 con mscara 255.255.0.0 192.168.0.0 con mscara 255.255.255.0

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

139

5.5.5 Introduccin a enrutamiento en redes IP

5.5.5.1 Tablas de enrutamiento

Las redes TCP/IP se componen de dos tipos de nodos: enrutador y husped. El husped es tpicamente una computadora o un servidor, y el enrutador es una computadora con varios interfaces, en varias redes fsicas. El enrutador se encarga de transportar paquetes entre redes.

La tabla de enrutamiento es la estructura que le indica a cada nodo cmo debe enrutar sus paquetes, para llegar a un destino determinado. A continuacin se muestra una tabla de enrutamiento bsica para un nodo con la direccin IP 10.0.7.23, y una mscara de subred 255.255.255.224:

Tabla 5.1: Ejemplo de tabla de rutas IP Destino (red o husped) 10.0.6.0 10.0.7.0 0.0.0.0 Puerta de enlace 10.0.7.30 0.0.0.0 10.0.7.1 Mscara 255.255.0.0 255.255.255.224 0.0.0.0 Interfaz Eth0 Eth0 Eth0

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

140

La primera lnea indica que, para cualquier destino en la red 10.0.6.0 con mscara 255.255.0.0, se debe utilizar la puerta de enlace 10.0.7.30, la que es un nodo en la subred local.

La segunda lnea especifica que para los destinos en la red de rea local, no se debe usar puerta de enlace. Esto, por cuanto no hace falta realizar ningn tipo de enrutamiento, y la mayora de los sistemas operativos colocan una entrada en la tabla de rutas, que indica cuales paquetes destinados a la red local no deben ser direccionados a ningn enrutador.

La ltima lnea especifica el destino default, o por defecto, el cual se utiliza cuando no se encuentra ninguna entrada en la tabla que funcione para un destino determinado.

La columna interfaz existe para nodos con ms de una interfaz, por ejemplo los enrutadores que tienen siempre ms de un interfaz.

5.5.5.2 Procedimiento de enrutamiento

En el caso de dos redes Ethernet conectadas por medio de un enrutador, los pasos que se siguen para enviar un paquete de un nodo a otro son los siguientes:

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

141

-El nodo originario crea un paquete IP, con la direccin IP origen (su propia direccin) y la de destino.

-El nodo busca en su tabla de rutas a cul nodo debe enviarle el paquete para que este llegue a su destino.

-Buscando mediante el protocolo ARP, el nodo determina cul es la direccin MAC del nodo o enrutador al cual debe enviar el paquete.

-El nodo encapsula el paquete IP en un paquete Ethernet y lo enva al enrutador.

-El enrutador recibe el paquete, busca en su tabla de rutas y, como el nodo destino est en una red Ethernet adyacente, busca la direccin MAC del mismo.

-El enrutador coloca el paquete en el interfaz que corresponde.

-El nodo final recibe el paquete, le quita el encapsulado Ethernet, y obtiene paquete IP original.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

142

5.5.5.3 Protocolos de enrutamiento dinmico

Las rutas que se vieron anteriormente son estticas, lo que significa que el usuario administrador de cada nodo debe insertarlas manualmente. En redes con muchos huspedes y enrutadores esto puede significar una tarea poco prctica; se necesitan sistemas para hacer modificaciones a las tablas de rutas de todos los nodos de una red en poco tiempo. Para esto estn los protocolos de enrutamiento dinmico. Los ms importantes se enumeran a continuacin:

RIP (Routing Information Protocol) OSPF (Open Shortest Path First) IGRP (Internal Gateway Routing Protocol) BGP (Border Gateway Protocol)

Los primeros tres clasifican dentro de la categora de protocolos de enrutamiento interno y el ltimo puede ser interno o externo. Esta nomenclatura denota qu tipo de rutas debe manejar el protocolo. Cuando son internas, se limitan a la manipulacin de rutas dentro del sistema autnomo (AS por sus siglas en ingls), y cuando son externas se trata de rutas hacia otros sistemas autnomos.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

143

5.6 Preguntas
1. Recientemente se detect un problema en el cdigo del manejo de paquetes TCP, en

el kernel de GNU Linux 2.6.6, el que causa un ataque DoS (Denial of Service). El problema consiste en que el kernel se queda en un lazo infinito, y no sale del mismo hasta que la computadora sea reiniciada externamente. Este se da cuando la longitud del campo de opciones que se especifica en el paquete, es mayor que 12710. Suponga que usted, utilizando un sniffer de trfico en una red Ethernet, encuentra el siguiente paquete TCP:

4500 0030 1234 4000 ff06 e83f c0a8 0001 c0a8 0002 0400 1000 0000 0064 0000 0064 7000 0fa0 dc6a 0000 0204 05b4 0101 04fd

Determine si este paquete ocasionara problemas a una computadora con el sistema operativo GNU Linux. Adems, especifique el puerto origen y destino del paquete. Incluya los pasos realizados para decodificar el paquete y obtener la informacin de inters.

2.

Suponga que usted dispone de un servidor GNU Linux con dos interfaces Ethernet.

Una de ellas est conectada a la red local de su oficina, y la otra a su proveedor de Internet, que le ha asignado una direccin IP pblica. Que mtodo utilizara usted para poderle brindar acceso a Internet a todas las computadoras en su oficina? Especifique claramente

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

144

cmo funciona este mtodo, y el software que utilizara en el servidor para lograr dicho acceso.

3.

Subnetee la red 10.0.1.128 con mscara de subred 255.255.255.128, en cuatro

subredes: 2 de 30 direcciones IP usables, 4 de 14 y una de 62.

4.

Imagnese por un momento que usted es parte de la comisin de la IETF (Internet

Engineering Task Force), encargada de revisar propuestas para mejorar el protocolo TCP. En una de estas propuestas se sugiere eliminar el campo Checksum del encabezado del paquete TCP. Explique por qu no debera aceptar esta propuesta, y, de acuerdo a su conocimiento de comunicaciones digitales, explique por qu es necesario este campo.

5.7 Gua de procedimientos simplificada


5.7.1 Paso 1: Configuracin de parmetros de acceso a la red

-En la primera prctica se haba hecho una configuracin bsica del primer adaptador de red de la SBC utilizando el programa ifconfig. Ahora conecte la red local del laboratorio al interfaz de red nmero 2, y configure una direccin IP para la misma, de acuerdo a una direccin que le asigne el instructor del laboratorio.

-Utilizando el programa route, configure la ruta default de tal forma que esta concuerde con la direccin IP de la puerta de enlace de la red a la que est conectada la SBC.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

145

-Verifique la tabla de rutas usando el comando netstat. Debe tener cuidado con especificarle un parmetro a netstat, para que no trate de resolver los nombres asociados a las direcciones IP, ya que su SBC no tiene configuracin de DNS.

-Utilizando las herramientas ping y traceroute realice pruebas para verificar que su SBC est conectada a la red local adecuadamente, y que puede accesar nodos ms alla de la puerta de enlace. Explique el significado de los datos que muestra traceroute.

- Detalle los pasos necesarios para habilitar acceso por medio del protocolo telnet a la SBC. Busybox incluye el programa telnetd que sirve para este propsito. Es muy importante que habilite la autenticacin en el servidor de telnet para evitar problemas de seguridad.

5.7.2 Paso 2: Funcionamiento de SBC como enrutador

El objetivo de esta parte es configurar el sistema incrustado para que funcione como enrutador.

- Configure el parmetro ip.forward dentro del kernel para habilitar el redireccionamiento de paquetes IP entre las interfaces de la SBC.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

146

- Conecte el adaptador de red de otra estacin de trabajo (en adelante denominada estacin de trabajo B), por medio de un cable crossover, al puerto del tercer adaptador Ethernet de la SBC.

-Configure los interfaces de la estacin de trabajo B y de la SBC, de tal forma que estas estn en una red IP en la cual hayan nicamente dos direcciones IP utilizables. Este tipo de subred se conoce tambin como punto a punto.

- En la estacin de trabajo A, configure una ruta esttica apuntando al interfaz de la estacin de trabajo B, que conect a la SBC. Haga lo mismo en la estacin de trabajo B, de tal forma que haya una ruta apuntando a la estacin A a travs de la SBC. Especifique el comando utilizado.

-Utilizando las utilidades ping y traceroute verifique que la conectividad IP entre la estacin de trabajo A y la estacin de trabajo B funciona a travs de la SBC.

5.7.3 Paso 3: Escriba un programa utilizando sockets

-Configure un servidor HTTP en la estacin de trabajo A y coloque un archivo HTML de menos de 60 bytes en la raz del mismo.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

147

- Escriba un programa en el lenguaje C, que acepte como parmetros una direccin IP representando al servidor http, y una cadena de texto que represente el nombre de la pgina que se desea descargar. Utilizando sockets el programa deber, conectarse a la direccin IP en el puerto 80 de TCP, solicitar la pgina, y desplegarla en la consola, sin los encabezados del protocolo HTTP. Utilice el documento RFC 2616 como referencia pero limtese a utilizar la versin 1.0 del protocolo HTTP.

5.8 Referencias Bibliogrficas


Para esta prctica puede utilizar los siguientes libros que se encuentran en la bibliografa de este documento: 4, 7, 10, 13, 22, 31, 33, 34, 49, 50, 51, 52, 53, 54.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

148

5.9 Solucin Propuesta


5.9.1 Respuestas a Preguntas

1.

Se utiliz el siguiente programa en el lenguaje Perl para decodificar el paquete:

#!/usr/bin/perl use MIME::Base64; $paquete =

"4500003012344000ff06e83fc0a80001c0a8000204001000000000640000006470000fa0 dc6a0000020405b4010104fd"; $str = decode_base64($paquete); @arr = split //, $str; for($i=0;$i<scalar @arr;$i++) { $j = decBin($arr[$i]); $str2 .= $j; } @arr2 = split //,$str2; for($k=0;$k<scalar @arr2;$k++) { if ($k%16 == 0 ) { $l = 1+($k/16); print "\n$l\n"; } print $arr2[$k]; } sub decBin { return unpack("b8","$_[0]"); }

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

149

El software analizador de paquetes de redes se llama sniffer.

Este software siempre

presenta los paquetes codificados en base 64. Decodifica el paquete, luego pasa los caracteres ASCII a su representacin binaria, y finalmente despliega el paquete en bloques de 16 bits para su fcil lectura. A continuacin el resultado de este programa:

1 1100011110111001 2 0010110011001011 3 1011001000101111 4 1110101110110110 5 0001111111000111 6 1011001000101100 7 1011111010111111 8 0101110011011110 9 1011001111111011 10 1100111001100010 11 0011110111001011 12 1011001010101100 13

IE-0502
1100111001100010 14 0011110111001011 15 1011001001101100 16 1100101110110001 17 0010110011101011 18 1011001000101100 19 1100101110110010 20 0010110011001011 21 0111001000011101 22 1100101110110010 23 0010110011001011 24 0111001000011101 25 1111011110110010 26 0010110010001011 27 0110111100101101 28 1010111001110011 29 0101100111001011

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

150

IE-0502
30 1011001000101100 31 1100101110110110 32 0001110011001011 33 0110100100011111 34 1100101110111010 35 1010110011001011 36 1110000110111011

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

151

Interesa el campo de opciones que empieza a partir del bloque de 16 bits nmero 11 de acuerdo a la estructura del paquete TCP. De acuerdo al documento que define el estndar de TCP (RFC 793), la longitud del campo de las opciones est definido en su segundo octeto. Por lo tanto en esta posicin se encuentra el grupo de bits 11001011 el cual representa el nmero 211 en base 10. Debido a que este es mayor que 127, el paquete presenta la caracterstica de causar problemas en una computadora que tenga el kernel de GNU Linux 2.6.6.

Para obtener los puertos, se buscaron los primeros dos grupos de 16 bits. Se obtuvo lo siguiente:

Puerto origen: 11000111101110012 (5112910)

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

152

Puerto destino: 00101100110010112 (1146710)

2. Para poder conectar ms de un nodo a Internet utilizando nicamente un nodo, se utiliza el mtodo conocido como traduccin de direcciones de red o NAT (Network Address Translation) el cual est definido en el RFC 1631. El funcionamiento de NAT se basa en que se tiene un enrutador con dos interfaces, una interna y otra externa. La primera corresponde a una subred cuya direccin es parte de los bloques de direcciones designados como privados por el RFC 1918. La segunda corresponde a una subred con una direccin de Internet vlida. El enrutador debe estar configurado de tal forma, que traduzca los encabezados de los paquetes que recibe en su interfaz interna, los redireccione a travs de su interfaz externa, y mantenga una bitcora de los enlaces que existen entre nodos internos y externos. Cuando el enrutador recibe un paquete en su interfaz externo, busca en la bitcora el nodo interno al cual le corresponde el paquete, y se lo enva.

En GNU Linux se debe utilizar el paquete conocido como iptables, que est muy bien integrado con el kernel 2.6. Adems de hacer posible el NAT entre dos redes, el iptables ofrece la posibilidad de filtrar paquetes que entran o salen de diferentes interfaces.

3. La mscara 255.255.255.128 indica que hay siete bits disponibles para la identificacin de nodos internamente. En el caso ms sencillo, se podra dividir esta subred en dos subredes de 62 direcciones IP utilizables, ambas con mscara 255.255.255.224. Si se toma una de estas subredes, se pueden separar en dos redes con mscara 255.255.255.240 o 30

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

153

direcciones utilizables. Finalmente, se separa esta red en dos subredes, y se obtienen las dos redes de 14 direcciones IP utilizables, tal y como lo estipula el enunciado. A continuacin se muestran las direcciones de cada red:

Red A: 10.0.0.128/255.255.255.192, 62 direcciones IP utilizables Red B: 10.0.0.192/255.255.255.224, 30 direcciones IP utilizables Red C: 10.0.0.224/255.255.255.240, 14 direcciones IP utilizables Red D: 10.0.0.240/255.255.255.240, 14 direcciones IP utilizables

4. El campo de Checksum indica la suma del paquete en cuestin en notacin binaria, complementada a uno. Por ejemplo, si se tiene un paquete que tiene longitud 31 bytes, el equivalente en notacin binaria sera 01111. Aplicando la operacin de complemento A se obtiene 01000. La razn por la cual este campo del encabezado es sumamente importante, es por la naturaleza de las comunicaciones digitales, en las cuales es muy posible que un bit del paquete se invierta, por problemas con alguna lnea de transmisin. Esto puede

ocasionar graves problemas, ya que los datos pueden tener un significado completamente distinto.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

154

5.9.2 Procedimiento

5.9.2.1 Paso 1

Suponiendo que la puerta de enlace de la red en la que se encuentra conectada la SBC es 10.0.0.1, el comando que se utiliz para configurar la tabla de rutas adecuadamente es:

route add default gw 10.0.0.1

Para verificar que la tabla de rutas contenga la informacin correcta, se utiliz el comando:

netstat rn

La bandera n evita que netstat trate de resolver los nombres asociados a las direcciones IP.

Se realiz el proceso de ping a una direccin IP conocida en Internet para verificar que haya conectividad hacia el exterior de la red. Utilizando la direccin IP de yahoo.com (216.109.124.72) el comando es el siguiente:

ping 216.109.124.72

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

155

El programa ping mostr la siguiente respuesta:

64 bytes from 216.109.124.72: icmp_seq=0 ttl=47 time=139.6 ms 64 bytes from 216.109.124.72: icmp_seq=1 ttl=47 time=133.3 ms 64 bytes from 216.109.124.72: icmp_seq=2 ttl=47 time=133.4 ms

Ahora, utilizando el traceroute, se ejecut el siguiente comando:

traceroute n 216.109.124.72

Con esto se muestran todos los enrutadores que atraviesan los paquetes de prueba, el resultado fue el siguiente:

traceroute to 216.109.124.73, 30 hops max, 38 byte packets 1 2 3 4 5 6 7 8 9 10 10.254.1.1 10.7.0.109 3.369 ms 68.695 ms 2.160 ms 2.650 ms 53.932 ms 56.574 ms 48.724 ms

50.800 ms

200.9.48.157 200.9.48.149 200.9.48.9

58.245 ms 56.626 ms

55.655 ms 69.990 ms

59.006 ms

55.453 ms

56.229 ms 98.839 ms

208.173.95.153 208.172.98.61 206.24.226.99 206.24.227.106 216.109.74.30

110.475 ms 98.549 ms 123.229 ms 126.297 ms 139.760 ms

101.595 ms

110.483 ms 124.169 ms

98.605 ms 141.782 ms 120.566 ms 156.092 ms

122.466 ms 137.505 ms

IE-0502 11

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS 159.140 ms 159.133 ms 159.141 ms 136.116 ms

156

216.109.120.207

12 216.109.120.150 13 216.109.124.73

139.704 ms 216.109.120.222 136.921 ms 132.373 ms

137.312 ms

La primera columna muestra la direccin IP del enrutador que est siendo atravesado. Las dems columnas muestran el tiempo que dur el paquete en ir hasta el enrutador, y volver al nodo que envi el paquete. Esta es una herramienta sumamente til para diagnosticar problemas de conectividad a nivel IP. La utilidad ping opera en la capa de acceso a red ya que utiliza el protocolo ICMP y traceroute puede utilizar paquetes ICMP o UDP.

Se incluy la lnea /usr/sbin/telnetd l /bin/login en el archivo /etc/init.d/rcS para habilitar acceso por telnet. Adems, se cre el directorio /dev/pts y ah los archivos especiales 1,2,3,4,5,6,7,8,9,10 con el comando mknod c 136 <nmero de terminal>. Esto crea las terminales virtuales para acceder la SBC por medio de telnet.

5.9.2.2 Paso 2

El parmetro ip.forward se modific con el siguiente comando:

cat 1 > /proc/sys/net/ipv4

Con esto qued habilitado el redireccionamiento de paquetes a nivel de kernel.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

157

La red punto a punto que se configur entre la SBC y la estacin de trabajo B fue la 10.1.1.96 con la mscara 255.255.255.252. La SBC tiene la direccin IP 10.1.1.97 y la estacin de trabajo tiene la direccin 10.1.1.98. La configuracin de estas direcciones se realiz con el comando ifconfig <direccin IP> netmask <mscara>.

Se configur una ruta esttica en la estacin de trabajo A hacia la estacin de trabajo B utilizando el siguiente comando:

route add 10.1.1.98/32 gw 10.0.0.100

La direccin IP 10.0.0.1 es la de la SBC en su interfaz eth0.

Ahora en la estacin de trabajo B se utiliz el siguiente comando:

route add 10.1.1.98/32 gw 10.1.1.97

Se utilizaron los comandos ping y traceroute especificados anteriormente y se comprob que haba conectividad IP.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

158

5.9.2.3 Paso 3

El cdigo del programa se muestra a continuacin:

/*

testSockets.c

Programa de que enva una solicitud GET a un servidor HTTP para descargar un archivo HTML y desplegarlo en pantalla. La direccin IP del servidor y la ubicacin del archivo se pasan como parmetros del programa.

Por ejemplo: testSockets 10.0.7.23 archivo.html

Por Roberto Cardona Soto Julio 2004 Laboratorio Sistemas Incrustados, EIE, UCR

*/

#include <stdlib.h> //librerias para E/S #include <stdio.h>

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

159

#include <unistd.h> #include <string.h> //libreria para el manejo de cadenas #include <sys/socket.h> //librerias para el manejo de conexiones de red #include <netinet/in.h> #include <netdb.h>

int main(int argc, char *argv[]) {

const char *archivo; const char cmdHTTP1[255] = "GET /"; const char *cmdHTTP2 = " HTTP/1.0\r\r\n\n"; //CRs y LFs de acuerdo al protocolo HTTP segun RFC2616 char *cmdHTTPf; char *cmdHTTPf2; char *htmlstring = "<"; //encontrar primer tag de HTML en archivo char *contenido; //puntero a direccion donde empieza el HTML

/*nombre del servidor destino*/ char *host; /*descriptor de socket*/ int sockfd; /* longitudes y resultados, almacenan numero de bytes escritos o leidos*/ int len, result, result2; /*estructura que almacena parametros de servidor remoto (direccion IP y puerto)*/ struct sockaddr_in address;

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

160

/*estructura de informacion sobre el servidor destino*/ struct hostent *hostinfo; /*estructura de informacion sobre el servicio del servidor destino, HTTP en este caso*/ struct servent *servinfo; /*buffer con suficiente espacio para leer pagina*/ char buffer[4096]; /*si no hay argumento utilizar servidor destino igual a localhost*/ if(argc == 1) host = "localhost"; /*sino utiliza primer argumento de programa */ else host = argv[1];

/*si existe segundo argumento, usarlo como nombre de archivo, sino usar default (index.html) */ if(argc > 2) { archivo = argv[2]; } else { archivo = "index.html"; } /*preparar comando para solicitar archivo a servidor HTTP, de acuerdo a RFC2616*/ strcat(cmdHTTP1,archivo); strcat(cmdHTTP1,cmdHTTP2); /*popular estructura hostinfo con informacion del servidor destino*/ hostinfo = gethostbyname(host); if (!hostinfo) { printf("problemas con host\n"); exit(1);} /*popular estructura hostinfo con informacion del servidor destino,

verificar que servicio existe*/

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

161

servinfo = getservbyname("http", "tcp");

if(!servinfo) { printf("no hay servicio http disponible\n"); exit(1); } /*inicializar socket especificando el dominio (Internet) y el tipo de socket (TCP)*/ sockfd = socket(AF_INET,SOCK_STREAM,0); /*fijar dominio en estructura de datos de servidor remoto*/ address.sin_family = AF_INET; /*fijar puerto de acuerdo al obtenido en la informacion del servicio*/ address.sin_port = servinfo -> s_port; /*fija direccion del servidor destino de acuerdo a lo que se tiene en hostinfo*/ address.sin_addr = *(struct in_addr *)*hostinfo ->h_addr_list; /*obtener longitud de estructura address*/ len = sizeof(address);

/*solicitar

establecimiento

de

conexion

del

socket

utilizando

el

descriptor, la estructura

y su longitud*/

result = connect(sockfd, (struct sockaddr *)&address, len); if(result == -1) { perror("error con conexion"); exit(1); }

/*escribir comando a socket*/

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

162

result2 = write(sockfd,cmdHTTP1,strlen(cmdHTTP1)); /*leer resultado de socket*/ result = read(sockfd,buffer,sizeof(buffer)); /*buscar el string delimitador del HTML */ contenido = strstr(buffer,htmlstring);

/*escribir numero de bytes leidos y escritos*/ printf("Se leyeron %d bytes y se escribieron %d bytes", result, result2);

/*escribir la informacion del archivo solicitado*/ printf("Resultado:\n\n%s\n\n", contenido); /*cerrar socket*/ close(sockfd); /*terminar ejecucion*/ exit(0);

Algunos comentarios importantes relacionados al cdigo de este programa:

-Se utiliz la funcin strcat() para concatenar todos los componentes del comando GET que define el RFC 2616.

-La funcin strstr() sirvi para encontrar la primera ocurrencia de una cadena dentro de otra cadena, en este caso encontrar la primera ocurrencia de una colilla HTML.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

163

-Se fij el archivo por defecto index.html ya que este es el archivo por defecto en los servidores HTTP.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

164

CAPTULO

6:

PROPUESTA

DE

PRACTICA

FINAL,

Procesamiento digital de seales y sistemas en tiempo real

6.1 Objetivo General


Poner en prctica los conceptos y tcnicas aprendidas durante el curso para realizar un procesamiento digital de seales de audio en tiempo real.

6.2 Objetivos Especficos


real. Comparar el rendimiento del procesamiento digital con el kernel regular y el kernel Aplicar un parche al kernel para hacer posible la realizacin de tareas en tiempo

con el parche de tiempo real. digital Obtener la seal de audio de un micrfono por medio de los puertos GPIO de la Aprender sobre los parmetros necesarios para la codificacin de audio en formato

SBC y procesarla digitalmente.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

165

6.3 Duracin

La duracin recomendada para esta prctica es de 5 sesiones de cuatro horas

6.4 Investigacin Previa


Los siguientes conceptos bsicos de procesamiento digital de seales: seales en

tiempo discreto, muestreo, transformada de Fourier de tiempo discreto (DTFT), transformada discreta de Fourier (DFT), transformada rpida de Fourier (FFT) y estructuras de filtros IIR (Infinite Impulse Response) y estructuras de filtros FIR (Finite Impulse Response).

Conceptos bsicos de sistemas en tiempo real.

Diseo electrnico para conversin de seales analgicas a digitales y viceversa.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

166

6.5 Marco Terico


6.5.1 Sistemas en tiempo real Una posible definicin de un sistema en tiempo real es la siguiente: cualquier sistema, en el cual una respuesta en un corto perodo de tiempo, por parte de la computadora, es vital.

El significado de corto perodo de tiempo es que el sistema en tiempo real tiene lmites para realizar un procesamiento especfico, por ejemplo, que una cierta tarea debe ejecutarse estrictamente en menos de diez microsegundos. Existen sistemas de tiempo real duros (hard), los cuales tienen requerimientos que no pueden dejar de ser cumplidos bajo ninguna circunstancia porque el resultado sera catastrfico. Tambin existen los sistemas en tiempo real suaves (soft), los cuales tienen como objetivo que se cumplan las limitaciones de tiempo. Sin embargo, si stas no se satisfacen, no ocurre nada serio.

Un ejemplo para esto son los sistemas de control de navegacin de los aviones modernos y los sistemas de demodulacin de radio FM. Si el sistema en tiempo real de la aeronave no cumple con las limitaciones de tiempo impuestas por los diseadores, pueden ocurrir muertes de seres humanos. Por otro lado, si no se realiza la demodulacin de la seal de radio FM a tiempo, el resultado sera que el usuario escuche la seal de radio un poco distorsionada durante unos segundos, lo cual no representa ningun problema grave.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

167

6.5.2 Conversin de seales de audio analgicas a formato digital

Las seales de audio de la vida real, por ejemplo la msica o la voz, son de carcter analgico. Para poderlas procesar en una computadora digital es necesario convertirlas al dominio digital lo cual implica realizar los pasos mostrados en la figura que se muestra a continuacin.

Figura 6.1: Pasos para conversin de una seal analgica a digital

El primero consiste en tomar muestras de la seal analgica con una cierta frecuencia que se conoce como frecuencia de muestreo. Para el caso de seales de ancho de banda limitada, esta frecuencia debe ser no menor de dos veces del ancho de banda de la seal segn el teorema de Nyquist. Esto con el fin de evitar aliasing o interferencias de imgenes de otras seales. La frecuencia de muestreo define la calidad de la seal convertida y depende de los requerimientos de la aplicacin. Las frecuencias de muestreo ms comunes van desde 8 KHz de seales telefnicas hasta 96 KHz de audio digital de alta fidelidad.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

168

La conversin digital debe tener una resolucin, esto significa la cantidad de bits con que se va a codificar la seal digital. Esto define qu tan precisa va a ser la conversin. El proceso de asignarle un valor a cada nivel de voltaje de la seal muestreada se conoce como cuantizacin. Por ejemplo, si se decide implementar un cuantizador de ocho bits de resolucin se cuenta con 256 valores posibles que puede tomar la seal digital. Es claro que en el proceso de cuantizacin se pierde informacin ya que todos los niveles de voltaje que pertenecen a un mismo valor van a ser codificados como si fueran iguales, por lo tanto la calidad de la seal digitalizada tambin depende de la resolucin del cuantizador.

La ltima etapa de la conversin digital a analgica es la codificacin cuya funcin principal es preparar la seal digital para la transmisin en un canal analgico. Su funcin es asignarle un valor binario a cada valor de cuantizacin o smbolo. Por ejemplo, si se tiene una muestra que resulta con un valor cuantizado de 133, se le puede asignar la palabra binaria 00110101. Una de las ventajas de la codificacin es que permite asignar palabras de menos bits a los smbolos ms probables, lo cual implica un ahorro significativo de bits en la transmisin. Si se toma el valor asignado por el cuantizador y se convierte a su valor binario equivalente se obtiene una seal con formato PCM (Pulse Code Modulation).

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

169

6.6 Gua de procedimientos simplificada


6.6.1 Paso 1: Aplicacin de parche RTAI

- Genere una seal de reloj digital de 25 Khz en uno de los puertos GPIO de la tarjeta, utilizando una combinacin de los lenguajes C y ensamblador en un programa en el espacio de usuario. Puede utilizar el cdigo del driver de los puertos GPIO como gua. Recuerde fijar los permisos adecuados utilizando las funciones POSIX ioperm() e iopl(). Observe los resultados con un osciloscopio y determine qu tan preciso es el resultado del programa.

-Aplique el parche ms reciente de RTAI (Real Time Application Interface) al kernel de GNU Linux de la SBC.

- Modifique el programa del reloj digital para que implemente la funcionalidad de RTAI y observe los resultados. Preferiblemente, este programa debe ser un mdulo y debe utilizar las siguientes funciones:
rt_set_periodic_mode() rt_task_init() start_rt_timer() nano2count() rt_task_make_periodic() stop_rt_timer()

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

170

Observe y comente las diferencias con el primer programa.

6.6.2 Paso 2: Digitalizacin de seal analgica de audio

- Elabore un diseo para tomar una seal de audio de un micrfono de tipo dinmico y convertirla en formato digital de ocho bits. Debe tomar en cuenta que la seal del micrfono debe ser amplificada y acondicionada para que el convertidor analgico digital haga un buen trabajo. La seal de audio se debe muestrear a 8 KHz.

- Tome las seales de reloj y chip select para el convertidor A/D de los puertos GPIO de la SBC.

- Se recomienda utilizar un convertidor analgico digital de tipo paralelo por las limitaciones de la seal de reloj que se puede obtener de los puertos GPIO, la cual es cercana a los 35 KHz.

6.6.3 Paso 3: Programas de prueba para lectura de audio.

-Escriba un driver tipo mdulo para leer la seal digitalizada de los puertos GPIO. Cargue el driver utilizando el comando insmod.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

171

-Almacene la seal de audio en una estructura tipo FIFO de tiempo real accessible en el espacio de usuario.

-Escriba un programa que corra en el espacio de usuario, el cual lea la seal de la estructura FIFO. Este programa debe almacenar el audio en un archivo en la memoria secundaria de la SBC codificada en 8 bits y con una frecuencia de muestreo de 8 KHz. A la hora de almacenar el audio, tenga cuidado con la convencin del bit ms significativo.

-Transfiera este archivo a su estacin de trabajo y verifique que el contenido sea correcto.

6.6.4 Paso 4: Conversin D/A -Utilizando los mismos pines GPIO que se utilizaron en los pasos anteriores para introducir el audio a la SBC, elabore un diseo para extraer el audio digital de los mismos utilizando un convertidor digital analgico de 8 bits.

- Ajuste el diseo de la etapa de conversin A/D para que comparta los pines con la etapa D/A.

-A la salida del DAC conecte un parlante para comprobar el funcionamiento de la conversin.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

172

6.6.5 Paso 5: Procesamiento digital de seales en tiempo real -Escriba un programa en lenguaje C para aplicar el siguiente filtro digital de tipo FIR (Finite Impulse Response), conocido como eco simple, a la seal de audio de entrada:

H ( z) =

1 1 gz M

(1)

Utilice M=7500.

-Haga los ajustes necesarios en el programa para que el procesamiento se realice en tiempo real. En otras palabras, el resultado del procesamiento debe ser reproducido casi simultneamente con la seal de entrada de audio.

6.7 Referencias Bibliogrficas


Para esta prctica puede utilizar los siguientes libros que se encuentran en la bibliografa de este documento: 3, 4, 5, 6, 7, 8, 12, 13, 15, 16, 20, 21, 23, 24, 28, 29, 30, 32, 33, 46, 47.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

173

CAPTULO 8: Recomendaciones
Cubrir todos los aspectos de los sistemas incrustados y de las posibilidades de hardware que se puede utilizar es prcticamente imposible. Hay algunos temas e ideas que no se pudieron cubrir en esta gua porque se consider que era mucho para un solo curso pero sera importante incorporarlos en un segundo curso. Entre otras, stas son algunas ideas que se podran poner en prctica en un segundo curso sobre el tema de sistemas incrustados:

- Utilizar el puerto JTAG que tiene la tarjeta net4801 para leer el contenido de las memorias e instalarle un programa BIOS tal como el Linux BIOS. En el anexo de este documento se encuentran las conexiones necesarias para conectar un dispositivo JTAG al microprocesador de la net4801.

- Realizar una prctica donde se utilice el paquete iptables para realizar NAT con la SBC.

- Presentar informacin sobre el progreso del booteo en la pantalla de LCD. Para esto habra que modificar el cdigo dependiente de arquitectura de GNU Linux el cual est en lenguaje ensamblador.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

174

-Realizar una prctica de procesamiento de audio. Esta fue la intencin original pero fue imposible poner a trabajar tarjetas USB con el kernel 2.6 y la nica tarjeta de sonido PCI que cumple con la limitacin de voltaje de la SBC no funcion tampoco.

- Utilizar el temporizador watchdog que tiene el procesador Geode para alguna prctica que requiera monitoreo del hardware.

- Encender el LED si se da cierta condicin durante el proceso de inicializacin.

- Utilizar la caracterstica de Wake On LAN que tienen los adaptadores de red de la net4801 para realizar alguna tarea en la cual la SBC se encienda por medio de la red.

- Aprovechar los sensores de voltaje y temperatura que tiene el controlador E/S PC87366 para algn experimento.

- Utilizar el sistema de archivos JFFS2 para la memoria flash.

Adicionalmente, es importante que se imparta un curso terico de sistemas empotrados para que sirva como complemento al laboratorio ya que el modelado y sntesis de los sistemas incrustados es sumamente importante para proyectos de la vida real.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

175

CAPTULO 9: Conclusiones

El profundo conocimiento del sistema operativo GNU Linux fue fundamental para poder resolver todas las prcticas en el tiempo establecido. Asimismo, los conocimientos sobre los conceptos tericos de sistemas operativos fueron de gran ayuda para poder lograr resolver problemas que se presentaron en el camino.

Al terminar de resolver todas las prcticas, se puede afirmar que se tiene una muy buena base en el campo de la instalacin y configuracin a la medida del sistema operativo GNU Linux. Asimismo, se adquiri experiencia importante en el campo del manejo de diversos dispositivos de entrada y salida as como en el rea del acceso a redes TCP/IP.

La posibilidad de experimentar la integracin de la ingeniera elctrica con las ciencias de la computacin es uno de los logros ms importantes de este laboratorio. Los estudiantes que aprueben este curso van a tener una visin amplia de las posibilidades para inventar y desarrollar soluciones con los conocimientos que han adquirido a lo largo de los cursos de la carrera afines a la computacin. Por ejemplo, el hecho de haber logrado inicializar el sistema operativo GNU Linux en menos de trece segundos, utilizando un espacio de memoria secundaria inferior a los cinco megabytes, crea una gran cantidad de posibilidades para desarrollar dispositivos de bajo costo y alto rendimiento.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

176

BIBLIOGRAFA

Artculos de revistas:

1. Kroah-Hartman,G. Writing a Simple USB Driver, Linux Journal, Estados Unidos, Volumen 120, Abril 2004.

2. Kroah-Hartman, G. Writing a Real Driver in User Space, Linux Journal, Estados Unidos, Volumen 122, Junio 2004.

3. Ruiz, Federico & Maldonado, Alexis. Reporte Experimento #3, Filtros Digitales: FIR e IIR. Laboratorio de Sistemas Digitales. Universidad de Costa Rica. Diciembre, 2003.

Libros:

4. Love,

R.

Linux

Kernel

Development,

Primera

Edicin,

Sams Publishing, Estados Unidos, agosto 2003.

5. Rubini, A. & Corbet,, J. Linux Device Drivers, Segunda Edicin, , OReilly and Associates, Inc., Estados Unidos, junio 2001.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

177

6. Stones, R. & Matthew,N. Beginning Linux Programming, Segunda Edicin, Wrox Press Ltd., Canad, Setiembre 1999.

7. Oualline, S.

Practical C

Programming, Tercera Edicin, OReilly and

Associates, Inc., Estados Unidos, Agosto 1997.

8. Hollagaugh, C.

Embedded Linux Hardware, Software, and Interfacing ,

Tercera Edicin, Addison Wesley, Estados Unidos, Noviembre 2002.

9. Yaghmour, K. Building Embedded Linux Systems, Primera Edicin, OReilly and Associates, Inc., Estados Unidos, Abril 2003.

10. Satchell, S. & Clifford, H.B.J. Linux IP Stacks Commentary, The Coriolis Group, LLC, Estados Unidos, 2000.

11. Lewis, D. Fundamentals of Embedded Software, Prentice Hall, Inc., Estados Unidos, 2002.

12. Ackenhusen, J. Real Time Signal Processing, Prentice Hall, Inc.,Estados Unidos, 1999.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

178

13. Kernighan, B.

&

Ritchie, D. El Lenguaje de Programacin C, Quinta

reimpresin diciembre 1986, Prentice Hall, Inc., Estados Unidos.

14. Lombardo, J. Linux Incrustado, Primera edicin en espaol , Prentice Hall, Inc., Estados Unidos, 2002.

15. Krishna, C.M. & Shin, K. Real Time Systems, The McGraw-Hill Companies, Inc., Estados Unidos, 1997.

16. Jung, W. IC OP-AMP Cookbook, Tercera Edicin , Howard W. Sams & Co, Estados Unidos, 1989.

17. Catsoulis, J. Designing Embedded Hardware, Primera Edicin, OReilly & Associates, Inc., Estados Unidos, Noviembre 2002.

18. Nisley, E. The Embedded PCS ISA BUS: Firmware, Gadgets, and Practical Tricks , Annabooks, Estados Unidos, 1997.

19. Azofeifa, I.

Gua para la Investigacin y Desarrollo de un Tema, Quinta

reimpresin, Editorial de la Universidad de Costa Rica, 1996.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

179

20. Proakis J. & Manolakis,, D. Tratamiento Digital de Seales Principios, Algoritmos y Aplicaciones, Tercera Edicin, 2000. Prentice Hall, Estados Unidos,

21. Wakerly, J. Diseo Digital Principios y Prcticas, Tercera Edicin, Prentice Hall, Estados Unidos, 2000.

22. Hunt, C TCP/IP Network Administration , Segunda Edicin, OReilly & Associates, Inc, Estados Unidos, 1998

23. Mitchell, M., Oldham, J. & Samuel, A. Advanced Linux Programming, Primera Edicin, New Riders Publishing, Estados Unidos, 2001.

24. Stevens, R. Advanced UNIX Programming, Primera Edicin, Addison-Wesley Professional, Estados Unidos, 1992.

25. Tanenbaum, A. Modern Operating Systems ,Segunda Edicin, Pearson Education, Estados Unidos, 2001.

26. Sridhar, T. Designing Embedded Communications Software, CMP Books, Estados Unidos , 2003.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

180

27. Barr, M. Programming Embedded Systems in C and C++ , OReilly and Associates, Inc., 1999.

28. Li, Q. & Yao, C. Real Time Concepts for Embedded Systems , CMP Books, Estados Unidos, 2003.

29. Bovet, D. & Cesati, M. Understanding the Linux Kernel , Segunda Edicin, OReilly and Associates, Inc., Estados Unidos,, 2002.

30. Abbott, D. Linux for Embedded and Real-Time Applications , Newnes, Estados Unidos, 2003.

31. Lee,

B.

Gi

&

Kim,

W.

Integrated

Broadband

Networks

TCP/IP,ATM,SDH/SONET, and WDM/Optics , Artech House Publishers, Estados Unidos, 2002.

32. Schilling D. & Belove Ch. Circuitos Electrnicos Discretos e Integrados , Tercera Edicin, McGraw Hill, Inc.,1993

33. Stremler, F.G. Introduccin a los Sistemas de Comunicacin , Tercera Edicin, Addisson Wesley Longman, Estados Unidos, 1993.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

181

34. Stevens, R. UNIX Network Programming, Vol.1 : The Sockets Networking API Tercera Edicin, Addisson Wesley, Estados Unidos, 2003.

35. Teich, Jrgen & Thiele Lotear. Manuscrito del curso Eingebettete System. Escuela Tcnica Federal de Zrich, Suiza, 2004.

Pginas web:

36. Sitio web con driver para puertos GPIO en net4801 para kernel 2.4, http://centerclick.org/net4801/2.4.25/

37. Sayah Karadji, Kianusch. Sitio web que contiene match para procesador National Semiconductor Geode SC1100, http://www.sk-tech.net/support/soekris.html

38. Machado, Mike. Running Debian on Soekris Engineering Embedded Systems. http://www.innercite.com/~mike/soekris/

39. Microcom Serial Terminal Emulator, http://microcom.port5.com/

40. Soekris Engineering, http://www.soekris.com

41. Matrix Orbital, http://www.matrixorbital.ca

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

182

42. Sweet, Michael. Serial Programming Guide for POXIX Operating Systems. http://www.easysw.com/~mike/serial/serial.html

43. DIAPM RTAI Realtime Application Interface, http://www.aero.polimi.it/~rtai/

44. Embedded Systems Programming: Embedded.com, http://www.embedded.com

45. Osuchowski, Adam. Remote DoS vulnerability in Linux kernel 2.6.x. http://www.securityfocus.com/archive/1/367615/2004-06-27/2004-07-03/0

46. Carter, Alison. Real-time and Embedded Systems. Universidad de Westminster, Inglaterra. http://icebear.cmsa.wmin.ac.uk/~alison/embedded/

47. Lee, Insup. Embedded Systems and Greles Sensor Networks. Universidad de Pennsylviania, E.E.U.U. http://www.cis.upenn.edu/~lee/04cis640/

48. Heiner, Monika. Validation of Embedded Systems. Escuela de Ciencias de la Computacin e Informtica (ECCI), Universidad de Costa Rica. http://profesores.ecci.ucr.ac.cr/Monika%20Heiner/myCourseDescription.htm

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

183 -HTTP/1.1.

49. RFC

2616

Hypertext

Transfer

Protocol

http://www.faqs.org/rfcs/rfc2616.html

50. RFC 1918 - Address Allocation for Private Internets. http://www.faqs.org/rfcs/rfc1918.html

51. RFC 1631 - The IP Network Address Translator (NAT). http://www.faqs.org/rfcs/rfc1631.html

52. RFC 791 - Internet Protocol DARPA Internet Program Protocol Specification. http://www.ietf.org/rfc/rfc0791.txt

53. RFC 793 - Transmission Control Protocol. http://www.faqs.org/rfcs/rfc793.html

54. RFC 768 - User Datagram Protocol. http://www.faqs.org/rfcs/rfc768.html

55. The Serial Programming HOWTO. http://www.tldp.org/HOWTO/Serial-Programming-HOWTO/

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

184

APNDICES
A Introduccin Sistemas Operativos
El sistema operativo de una computadora es el programa cuya funcin principal es administrar la ejecucin de las diferentes tareas que tiene la computadora. En el caso de sistemas empotrados y, en especial, el de los sistemas en tiempo real, el sistema operativo tiene una gran importancia pues es responsable de manejar el orden de la ejecucin de los programas, y la forma en que se atienden los eventos del mundo exterior. El programa principal del sistema operativo es conocido como kernel o ncleo.

Relacin de hardware con sistema operativo

Microprocesador

En un registro interno del procesador llamado palabra de estatus, tambin conocida como PSW (Program Status Word), se guardan banderas importantes en cuanto a los resultados de ejecucin de cada instruccin, tales el estado cero. Hay una bandera dentro del PSW que indica en qu modo se encuentra el programa que se est ejecutando, ya sea en modo de usuario o en modo de kernel. Ms adelante habr una extensa explicacin sobre lo que significa cada uno de estos modos. Sin embargo, las instrucciones que se pueden ejecutar en modo de usuario y las direcciones de memoria que se pueden acceder son limitadas en comparacin con el modo de kernel.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

185

El registro interno del procesador llamado contador de programa, o PC, tambin es de gran importancia para el sistema operativo, ya que este indica la posicin de memoria que contiene la siguiente instruccin que se debe ejecutar.

Otro componente importante del microprocesador es la unidad de manejo de memoria, que es la responsable de hacer el mapeo entre direcciones virtuales y reales. Este proceso se ilustrar detalladamente ms adelante.

Una caracterstica importante de microprocesadores, que determina complicaciones para los sistemas operativos es la ejecucin de instrucciones por medio de pipelining. Esto por cuanto la decodificacin y la ejecucin de instrucciones se realiza en procesos simultneos.

Memoria

La jerarqua de diferentes tipos de memoria es de gran importancia para el sistema operativo. El orden de la jerarqua se ilustra a continuacin.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

186

Registros internos del microprocesador Memoria cache del procesador Memoria principal (RAM) Memoria secundaria (disco duro por ejemplo) Memoria de acceso secuencial

Cuando se tienen dos o ms programas en memoria, se deben resolver dos problemas: (a) cmo manejar el hecho que los programas tienen posiciones diferentes en memoria cada vez que se ejecutan, y (b) como proteger el kernel de los programas ejecutados por los usuarios de la computadora. Esto se resuelve mediante un par de registros que tiene el procesador, los cuales son conocidos como registro base, y registro lmite. El primero, como su nombre lo indica, marca la direccin base de un programa, en otras palabras, el lugar donde el texto y los datos empiezan en la memoria. El segundo marca el final de esta seccin. Por lo tanto, para el programa, la memoria comienza en la direccin de memoria almacenada en el registro base, y termina en la del registro lmite, siendo este espacio de memoria el nico con el cual el programa puede trabajar.

Dispositivos entrada/salida

Los dispositivos entrada/salida sirven para que la computadora interacte con el mundo exterior; por ejemplo, pueden ser interfaces de red, tarjetas de audio y video, impresoras,

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

187

pantallas, teclados, etc. Los mtodos para acceder estos dispositivos son tres: busy wait, interrupcin y acceso directo a memoria (DMA).

Buses

Estos elementos son de gran importancia ya que son el medio mediante el cual se comunica el microprocesador con la memoria, y los dispositivos E/S. En las arquitecturas modernas se encuentran buses de hasta 64 bits conocidos como Peripheral Compact Interface (PCI), buses heredados Industry Standard Adapter (ISA) as como un bus dedicado de

comunicacin entre el microprocesador y la memoria para mayor rendimiento.

Conceptos bsicos de sistemas operativos

Procesos

Desde que inici la poca de la multiprogramacin en las computadoras modernas, se tienen varios procesos en una computadora, que dan la impresin de estar corriendo al mismo tiempo, pero en realidad es el sistema operativo, y la velocidad del microprocesador los que hacen que el usuario tenga esta ilusin. Cada proceso tiene un programa ejecutable, sus propios registros y variables, as como su propio contador del programa. Cada vez que el sistema operativo decide que un determinado proceso debe ejecutarse, los valores

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

188

originales de los recursos del proceso en cuestin son restablecidos para que se pueda llevar a cabo la ejecucin del proceso.

Debido a que en un mismo procesador hay varios procesos ejecutndose, se debe tener un contador de programa por proceso. Estos se guardan, y se toman, de acuerdo al proceso que tenga control sobre el CPU.

Creacin del proceso

Hay tres diferentes situaciones que crean un proceso nuevo:

-Inicializacin del sistema -Llamada a fork() por parte de algn programa -Usuario ejecuta un programa nuevo

La llamada fork() es caracterstica de UNIX y lo que hace es que crea un proceso hijo, el que tiene un espacio de memoria distinto del proceso padre, pero copia los contenidos del espacio padre para cuando inicie operacin.

Estados de procesos

Los procesos pueden estar en tres estados distintos: corriendo, bloqueado y preparado.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

189

El primer estado se presenta cuando el texto del programa del proceso se est ejecutando. Puede pasar al estado bloqueado cuando maneja una interrupcin externa, y debe esperar alguna accin por parte del dispositivo externo. La otra transicin posible se presenta cuando el programa del proceso est preparado para correr, pero el sistema operativo ha decidido darle a otro proceso el control sobre el microprocesador, por lo que el proceso preparado debe esperar.

Cuando el proceso est en estado bloqueado, puede pasar nicamente al estado preparado; esto sucede cuando el dispositivo externo ha terminado la accin que deba completar.

Si el proceso se encuentra en estado preparado, puede pasar a cualquiera de los otros dos estados.

Jerarquas de procesos

La relacin entre el proceso raz, los procesos padres, y los procesos hijos es importante.

El proceso raz es el proceso principal del sistema operativo encargado de iniciar los dems procesos. En el caso especial de UNIX el proceso raz es conocido como init.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

190

Un proceso padre es aquel que ya est registrado en el sistema operativo, y por consiguiente tiene sus registros, espacio de memoria, y dems recursos bien definidos.

El proceso hijo es el que es creado por el padre y, como se mencion antes, recibe una copia del espacio de memoria del padre, y comparte los recursos con el mismo.

Terminacin del proceso

-Final de ejecucin normal del programa del proceso -Error interno del programa del proceso -Error fatal del programa del proceso, puede ser manejado internamente -Otro proceso que le hace kill() a un proceso.

A diferencia de los primeros dos, los ltimos motivos son causas externas al programa. La llamada kill() tambin es caracterstica de UNIX, y lo que hace es matar al proceso en cuestin.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

191

Implementacin de procesos

Los sistemas operativos controlan a los procesos utilizando una tabla de procesos, la cual contiene toda la informacin importante tal como estado, valor del contador de programa, valor del puntero de pila, directorio de trabajo y otros atributos.

Manejo de interrupciones Las interrupciones son las que hacen posible que el sistema operativo d la ilusin de que se estn ejecutando varios procesos al mismo tiempo en una computadora, con un solo microprocesador. El elemento ms importante de la atencin a interrupciones es el vector de interrupcin, el cual es una posicin en memoria en la que el sistema operativo encuentra cmo manejar la interrupcin. Los pasos generales que realiza el sistema operativo para manejar una interrupcin son: guardar registros actuales, cargar el valor del contador de programa que indica el vector de interrupcin, un programa en lenguaje de mquina guarda registros y configura una pila para la interrupcin, se ejecuta la rutina de atencin a interrupcin, y cuando termina la ruta el sistema operativo decide qu proceso va a correr entonces.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

192

Hilos

Adems de la ejecucin secuencial de procesos existen los hilos, que son diferentes entidades que pueden pertenecer a un mismo proceso, y comparten los recursos del proceso (archivos abiertos, memoria, seales, etc.). Cada hilo tiene su propio contador de programa, pila, registros y estado. Los hilos tienen la gran ventaja que su creacin es muy rpida, en comparacin con un proceso, pues comparten prcticamente todos los recursos con el proceso en cuestin.

La utilidad de los hilos se puede ver en un proceso en el cual un hilo tiene ms interaccin con dispositivos entrada/salida que otro. Si el proceso slo tiene asignado una cierta cantidad de tiempo del microprocesador y gran parte de este se va a utilizar para esperar a dispositivos E/S, habra un gran desperdicio de tiempo en el procesamiento. Con dos hilos se puede dejar correr un hilo que realiza el trabajo ms intenso con el procesador, mientras el otro hilo espera al dispositivo E/S. Se debe llevar a cabo una coordinacin de la ejecucin de los diferentes hilos, razn por la cual se requiere una tabla de hilos, ya sea en el kernel o en el proceso, dependiendo de la implementacin, que lleve un control de los hilos. Adems, se debe contar con un sistema que administre la puesta en ejecucin de los diferentes hilos, que se haga responsable de maximizar el uso del tiempo del procesador.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

193

Comunicacin entre procesos (IPC)

La comunicacin entre procesos es sumamente importante ya que el acceso a recursos debe ser coordinada, pues su ejecucin se lleva a cabo en forma intercalada, de acuerdo a lo que el secuenciador del sistema operativo disponga, para cada proceso. Adems, muchos procesos deben cooperar unos con los otros para lograr completar tareas impuestas por el usuario o el kernel. Los mismos problemas se presentan en el manejo de hilos, en especial el problema de la coordinacin.

Situaciones en las que dos procesos deben realizar dos operaciones en un mismo recurso, (por ejemplo datos en memoria, archivo) son conocidos como condiciones de carrera o race conditions. Por ejemplo, el proceso A debe enviar los datos del archivo passwd a un puerto de E/S, sin embargo, mientras el proceso se prepara para hacer esto, el proceso B modifica ese archivo, por lo que, cuando el proceso A enva los datos al puerto, estos son inconsistentes.

Esta seccin de memoria en la cual se puede presentar el problema, es conocida como regin crtica; para evitar el inconveniente se debe tener algn mecanismo que realice una exclusin mutua. Las caractersticas principales de la exclusin mutua son: (a) solamente un proceso puede estar en la regin crtica al mismo tiempo, (b) ningn proceso corriendo fuera de una regin crtica puede bloquear otro proceso y, (c) ningn proceso debe esperar indefinidamente para entrar en la regin crtica.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

194

Exclusin mutua mediante busy waiting

Una posibilidad es que los procesos deshabiliten las interrupciones cuando se vaya a acceder una regin crtica tal, que nicamente el proceso en cuestin pueda modificar el contenido de la regin. Esto tiene el inconveniente que habra que darle el control a los procesos de los usuarios, pues se podran presentar problemas serios si un usuario no los habilita. Esto es una prctica ms comn en el kernel.

Otra posibilidad es tener una variable, que sea el cerrojo de la regin crtica: si est en uno la regin est siendo utilizada, y de lo contrario est libre. El problema es que se puede tener el mismo inconveniente con la variable cerrojo que con la variable en cuestin. Para esto hay algunos procesadores que implementan una instruccin conocida como TSL (test and set lock) que tiene como funcin llevar a cabo el proceso descrito arriba en una sola operacin atmica, garantizando as que no hay ningn otro proceso modificando la variable cerrojo. Este mtodo es conocido como espera activa o busy waiting.

El problema que ocasiona este sistema es que el proceso debe chequear continuamente el estado de la regin crtica, o la variable cerrojo hasta poder tomar control sobre ella, y esto es intenso para el microprocesador.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

195

Exclusin mutua mediante dormir y despertar

La otra posibilidad es que el sistema operativo, o el proceso mismo tome la decisin de dormir si al buscar acceder una regin crtica esta se encuentre ocupada. Cuando la regin crtica quede libre, el proceso que la liber puede notificar al durmiente para que la utilice. Esto se puede implementar mediante llamadas al sistema operativo tal como dormir() y despertar().

Semforos

Esta opcin implica que haya una variable conocida como semforo, que almacene el nmero de veces que se ha despertado algn proceso. Para trabajar con el semforo hay dos llamadas, abajo() y arriba(). La primera, verifica que el valor del semforo sea mayor que cero, si esto es as, disminuye su valor en uno y contnua. Si la variable es cero, el proceso se pone a dormir, y no termina de completar la llamada abajo(). Esta serie de pasos son realizados en una sola operacin atmica utilizando la instruccin TSL del procesador. Por otro lado, la operacin arriba() incrementa el valor del semforo en uno y, de haber procesos durmiendo, despierta a uno para que complete la llamada abajo(). Cuando un proceso en un semforo es despertado, este debe terminar la llamada abajo() substrayendo uno al valor del semforo, y continuando la ejecucin. En este caso la ejecucin que debe seguir es entrar en la regin crtica. Cuando este mismo proceso sale de la regin crtica,

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

196

este debe llamar arriba() para completar el proceso. Si de esta forma se manejan las entradas y salidas a regiones crticas, se garantiza exclusin mutua entre los procesos, por lo que no se van a dar condiciones de carrera.

Otros mtodos utilizados para la comunicacin entre procesos son los mensajes, los cuales son utilizados por los sistemas operativos de la familia UNIX, y se implementan como llamadas al sistema. Las barreras y los monitores son otros mtodos posibles, aunque son poco usados.

Secuenciadores (Schedulers)

Uno de los componentes ms importantes del sistema operativo es el secuenciador, elemento responsable de asignar las porciones de tiempo de ejecucin a cada uno de los procesos que se encuentran corriendo en el sistema. El algoritmo de secuenciacin utilizado para asignar valores a estas porciones vara dependiendo del sistema operativo y de los requisitos de los usuarios.

Como se vio anteriormente, hay dos tipos de procesos: los ms relacionados a la actividad E/S, y los ms relacionados con el procesamiento. El algoritmo del secuenciador debe hacer un balance entre estos tipos de procesos, de tal forma que las porciones del tiempo de ejecucin sean distribuidas de manera tal que el rendimiento del sistema sea el mximo. El problema ms complicado con el que tiene que lidiar el secuenciador es el alto costo, en

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

197

trminos de rendimiento, que tiene el hacer cambios de proceso, ya que muchos recursos deben ser almacenados para que los del nuevo proceso tengan lugar.

El secuenciador debe tomar decisiones en cuatro situaciones distintas: la creacin de un proceso hijo, la terminacin de un proceso, cuando un proceso se bloquea esperando un semforo o actividad de un dispositivo E/S, y cuando ocurre una interrupcin.

Hay dos tipos de algoritmos de secuenciadores: los expulsivos y los no expulsivos. Los primeros se caracterizan porque el kernel termina cada proceso cuando su tiempo de ejecucin ha terminado, y los segundos porque el secuenciador escoge el siguiente proceso a ejecutarse, cuando el proceso anterior termina o se bloquea. Los secuenciadores tienen como objetivo que todos los recursos del sistema se utilicen al mximo, as como una distribucin equitativa del tiempo de procesamiento.

Adems, el tiempo de respuesta, y el rendimiento en procesos por unidad de tiempo deben tener valores ptimos. Estas ltimas dos variables son inversamente proporcionales, ya que si se tienen tiempos de respuesta muy altos, van a ser necesarios muchos cambios de proceso, por lo que la cantidad de procesos que se completan por unidad de tiempo ser menor.

A continuacin se enumeran algunos de los algoritmos de secuenciacin de un sistema interactivo:

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

198

Secuenciacin Round Robin. Este es el ms utilizado, y se caracteriza porque a cada

proceso se le asigna una unidad de tiempo, lo que representa el tiempo de procesamiento al que el proceso tiene derecho. Si la unidad se hace muy pequeo, la velocidad de respuesta del sistema va a ser muy alta, pero la cantidad de procesos ejecutados por unidad de tiempo va a ser baja, porque el costo en trminos de rendimiento al hacer cambios de proceso es muy alto.

Secuenciacin por prioridad. En este caso se asigna un nivel de prioridad a cada uno

de los procesos y el proceso con ms alta prioridad es ejecutado. Es importante que en este tipo de algoritmos, las prioridades sean dinmicas de tal forma que todos los procesos se ejecuten, no solamente los que tienen alta prioridad inicial.

Mltiples colas. Esto es una combinacin de los primeros dos algoritmos porque se

tienen clases o colas de procesos, las cuales tienen prioridades internas dentro de las clases,y externas entre las colas.

El proceso ms corto es el siguiente. Este algoritmo calcula mediante

comportamientos anteriores de cada proceso cual va a tomar menos tiempo en ejecutar, y de acuerdo a esto, programa la secuencia de ejecucin.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

199

Hay otros algoritmos como secuenciacin por lotera, secuenciacin garantizada y secuenciacin compartida justa, los cuales no son muy comunes en implementaciones convencionales.

Todos estos algoritmos tambin son utilizados para secuenciacin de hilos.

Deadlocks Los deadlocks o puntos muertos son situaciones complicadas, en los cuales todos los procesos estn a la espera que una accin de otro proceso termine para continuar, por lo tanto el sistema est atascado. Para evitarlo, se debe tener un manejo adecuado de los recursos, utilizando los mecanismos ya mencionados tales como semforos.

Para que se presente un deadlock deben presentarse cuatro situaciones: haber mutua exclusin entre los recursos, procesos utilizando recursos previamente asignados pueden tomar otros recursos, no puede haber expulsin, y tiene que haber una condicin de espera circular.

Una forma de lidiar con estos problemas es ignorarlos como propone el algoritmo de Ostrich. Otra forma de lidiar sera detectando el deadlock cuando ya ocurri, y recuperar el sistema del mismo haciendo expulsin, o matando alguno de los procesos.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

200

Evitar los deadlocks es otra alternativa; eso se logra llevando una bitcora del camino de cada proceso, de tal forma que solo transite por estados seguros. La ltima forma de lidiar con los deadlocks es mediante la prevencin. Esto se logra nicamente mediante programacin precavida: la utilizacin exclusiva de recursos nicamente cuando es totalmente necesaria, la obligacin de que un proceso libere todos los recursos en uso, antes de acceder a un recurso exclusivamente, acceder a los recursos en un cierto orden numrico, o bien implementar una poltica de asignacin de recursos de primero que entra, primero que sale.

Manejo de memoria

La funcin de manejo de memoria que tienen los sistemas operativos es muy importante, ya que es la forma en que el software de una computadora interacta con la jerarqua de memoria de la computadora. La tcnica moderna conocida como multiprogramacin permite que en memoria estn varios programas, sus datos, y el sistema operativo al mismo tiempo.

Multiprogramacin

Al implementar un modelo de multiprogramacin hay dos problemas que necesitan solucin: relocalizacin y proteccin. El primero consiste en la posicin relativa de las instrucciones en un programa que tiene una instruccin en la posicin absoluta nmero 30,

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

201

pero cuando este se carga en memoria, ocupa, por ejemplo, la posicin 1630. Cuando el programa intenta ejecutar esta instruccin, va a ir a la posicin 30 de la memoria general y se producir un error, ya que no es la instruccin deseada. El segundo problema se presenta si todos los procesos comparten el espacio de memoria sin ninguna restriccin. Este problema es serio, por las repercusiones de seguridad en los sistemas operativos, cuando hay mltiples usuarios ejecutando programas al mismo tiempo. La solucin para este problema, en arquitecturas modernas, es utilizar dos registros: el base y el lmite, los cuales son encargados de poner un lmite inferior y otro superior al espacio de memoria de cada programa que se ejecuta.

Swapping

La tcnica del swapping es utilizada en computadoras y sistemas operativos modernos en los que la memoria principal no es suficiente para almacenar todos los programas y datos, de cada uno de los procesos que estn programados para ejecucin. Lo que se hace es mover la memoria utilizada para datos, de los procesos a memoria secundaria (a un disco duro por ejemplo), cuando stos no estn siendo ejecutados. Un aspecto importante relacionado al intercambio es, qu tan grande debe ser el espacio que se le asigna a cada proceso en la memoria secundaria, puesto que los procesos tienden a ocupar ms espacio en ejecucin; y si se quiere asignar un espacio a un proceso y no se encuentra campo, puede suceder que se tenga que terminar el proceso, lo cual es catastrfico para cualquier sistema

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

202

operativo. Para evitar esto, se asignan dos espacios en memoria secundaria para cada proceso, uno para la pila y otro para variables dinmicas.

Manejo de utilizacin de la memoria

Una forma de hacer eso es con mapas de bits. Se divide la memoria en unidades mnimas, y se le asigna un uno a cada unidad si est ocupada, y un cero si no lo est. Otra forma de hacer esto es con listas enlazadas: se mantiene una lista con informacin sobre los segmentos de memoria asignados y los segmentos libres; de esta forma se pueden utilizar diferentes algoritmos para asignar y remover segmentos de memoria.

Memoria virtual

Esta tcnica permite tener parte de cada programa y sus datos en memoria principal, y parte en memoria secundaria. La posibilidad de utilizar un espacio de memoria virtual en un sistema operativo, es una tcnica conocida como paging. Para implementar este sistema, debe haber un dispositivo en hardware que haga la conversin entre el espacio de memoria virtual y el real, el cual se conoce como unidad de manejo de memoria (MMU). El espacio de la memoria virtual se divide en pginas de un mismo tamao, el cual es tpicamente entre 512 bytes y 64 kilobytes. Para que esto funcione, en la memoria real o fsica debe haber un menor nmero de pginas que las de la memoria virtual, y stas son conocidas como marcos de pginas o page frames los cules tienen que tener el mismo tamao que las

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

203

pginas de la memoria virtual. La MMU identifica cuales pginas estn en memoria principal por un bit de presencia-ausencia en la tabla de pginas, la cual tiene usualmente dos direccionamientos. Adems de este bit, la tabla de pginas tiene informacin sobre su ltima modificacin, si el proceso de cach est deshabilitado para esa pgina, si la pgina est protegida, y otros campos. Un campo importante es el de cacheo, ya que las pginas destinadas a la comunicacin con dispositivos E/S, mapeados en memoria, por la naturaleza de la comunicacin E/S tienen que tener la informacin ms reciente cada vez que un programa las solicita, y no una copia del cach. El proceso de bloquear una pgina en memoria para que no sea guardada en memoria secundaria se conoce como pinning.

Cuando un programa trata de acceder una direccin de memoria que se encuentra en una pgina que no est en memoria fsica ocurre una falla de pgina o page fault: la MMU debe avisar al CPU para que ste atrape al sistema operativo, el cual congela la instruccin ejecutada, coloca la pgina en cuestin en una posicin de la memoria principal, y vuelve a ejecutar la instruccin. Es importante mencionar que la MMU slo almacena informacin sobre las pginas que estn en memoria primaria, no sobre las que estn en memoria secundaria, ya que esta informacin no es necesaria para la MMU, solamente para el sistema operativo.

En vista que la gran mayora de los programas tienden a acceder slo una pequea parte de las pginas en memoria, los diseadores de computadoras han implementado un dispositivo adentro de la MMU conocido como Translation Lookaside Buffer (TLB), el cual mantiene

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

204

un rendimiento similar que si no se hiciera el paging. El TLB contiene un nmero reducido de entradas, tpicamente menos de 64, que mapean pginas a espacios de memoria fsica. Si la MMU no encuentra en el TLB, busca en la tabla de pginas y coloca una copia de la informacin en el TLB para aumentar el rendimiento en futuros accesos a la misma direccin. Algunas arquitecturas RISC tales como Sparc y MIPS implementan el TLB en software.

Existen varios algoritmos para decidir qu pgina de la memoria secundaria reemplazar; dichos algoritmos estn fuera del objetivo de esta introduccin.

El sistema operativo es responsable de la administracin del sistema que maneja el paging, el cual tiene que trabajar durante la creacin, ejecucin y terminacin de un proceso, as como cuando ocurre una falla de pgina. Cuando se crea un proceso, el sistema operativo debe inicializar memoria para el mismo, lo cual implica asignar espacio en el disco duro, y almacenar los detalles en la tabla de pginas. En la ejecucin de un proceso, el sistema debe resetear la MMU y limpiar el TLB. La liberacin de las pginas en un proceso que ha sido terminado es otra tarea ms del sistema. En el caso de una falla de pgina, luego de haber copiado las pginas en cuestin de memoria secundaria, el sistema operativo deber volver a ejecutar la instruccin que caus la falla de pgina.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

205

Segmentacin

Este concepto implementa los mtodos de memoria virtual con varios espacios de memoria virtual para diferentes tipos de datos. Por ejemplo, para el caso de pilas que almacenan variables dinmicas, es muy importante tener espacios de memoria que puedan tener tamaos flexibles dinmicamente.

La segmentacin funciona con direccionamiento bidimensional: se tiene un nmero de segmento, as como una direccin dentro del mismo. Otro ejemplo para demostrar que la segmentacin es de utilidad, son las libreras del sistema que los usuarios deben compartir.

Un detalle importante sobre la segmentacin es que el programador debe manejarlo explcitamente, a diferencia del paging que es transparente para el programador.

Implementacin de segmentacin y paging en la familia Intel Pentium

Este procesador tiene 16k segmentos, cada uno contiene hasta un billn de palabras de 32 bits. Esta forma de dividir los segmentos es importante ya que la gran mayora de programas requieren relativamente pocos segmentos, pero de gran tamao. El procesador Pentium tiene seis registros para el manejo de segmentacin, CS y DS, que son los ms importantes y cuatro ms: SS para interaccin con la pila y tres adicionales conocidos como ES, FS y GS.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

206

El procesador contiene una tabla local de descriptor (LDT) y una tabla global de descriptor (GDT). Cada programa tiene su propia LDT, la cual describe los segmentos propios del programa como pila, datos, texto, etctera pero hay nicamente una GDT, la cual describe los segmentos del sistema. Para acceder un segmento especfico, el programa coloca el selector en uno de los registros de segmentos y durante la ejecucin del programa el registro CS contiene el selector del segmento de cdigo y DS contiene el selector del segmento de datos. Un selector es una palabra de 16 bits: los 13 bits menos significativos son responsables de identificar cul tabla de descriptor usar, el siguiente bit diferencia si la tabla es global o local, y los dos bits ms significativos contienen informacin sobre los privilegios del segmento en cuestin. Si el selector es cero, significa que el segmento escogido no est disponible, y genera una trampa en el procesador.

Cuando se carga un selector, el procesador obtiene el descriptor de la tabla en cuestin y se almacena en un registro interno del procesador para poder ser accedido rpidamente. La parte ndice del selector hace referencia a una posicin dentro de la tabla del programa que est solicitando acceso al segmento, por lo que para obtener el descriptor asociado se debe hacer una traduccin de esta direccin, sumndole la direccin base de la tabla, ya sea LDT o GDT, al valor ndice.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

207

El descriptor contiene, adems de la direccin base del segmento, una gran cantidad de campos que describen por ejemplo si se trata de un segmento de 16 32 bits, si el segmento es del sistema o de una aplicacin y otros.

Despus de tener un segmento seleccionado y se ejecuta una instruccin para la cual alguno de sus operandos es una direccin en memoria llamada offset de ahora en adelante, el procesador tiene un par de valores (segmento:offset), verifica que el valor resultante est dentro del segmento; de no ser este el caso se genera una trampa en el procesador. Por ejemplo, si se ejecuta la instruccin MOV AX,$8192 y la base del segmento en cuestin es $20480, la direccin conocida como de tipo lineal que se le va a pasar al procesador, para que ejecute la instruccin MOV es $28672 ($20480+$8192).

Si el paging est habilitado se tiene que tener una jerarqua de dos niveles para el direccionamiento, para evitar problemas de rendimiento, ya que el tamao de la tabla de paging puede ser muy grande en el caso de arquitecturas de 32 bits. En el procesador Pentium el primer nivel se conoce como directorio y representa a un grupo de pginas. Este procesador implementa una TLB pequea para hacer eficiente la relacin entre pginas y directorios que se acceden frecuentemente.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

208

Este procesador tiene varios niveles de proteccin, los cuales se utilizan frecuentemente para separar la ejecucin de los programas de los usuarios en el nivel ms alto, las libreras del sistema, las llamadas al sistema, y la ejecucin del kernel en el nivel ms bajo. El acceso de datos de otros niveles es permitido nicamente si es en direccin hacia arriba, y se pueden acceder funciones en otros niveles inferiores, pero se deben seguir ciertos procedimientos.

Entrada y salida

La interaccin de un sistema operativo, con dispositivos del mundo exterior es de suma importancia, ya que esta es la nica forma en la que una computadora puede ser de utilidad para la humanidad.

En el caso de la familia de sistemas operativos UNIX, hay dos tipos generales de dispositivos de E/S: los basados en caracteres y los basados en bloques. Los primeros se manejan de forma secuencial; no se puede acceder una ubicacin especfica de memoria dentro del dispositivo. El ratn y la impresora son dispositivos que se pueden clasificar en esta categora. Los segundos tienen la capacidad de hacer lecturas y escrituras aleatorias, lo cual se conoce como seeking, y tienen la caracterstica que almacenan la informacin en bloques de tamao predefinido. Por ejemplo, un dispositivo de bloques es el disco duro, el cual tiene bloques que estn compuestos por un nmero determinado de sectores, y tienen

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

209

tamaos entre 512 y 32,768 bytes. Hay algunos dispositivos que no se pueden clasificar en ninguna de estas categoras, por ejemplo los relojes.

Controladores de Dispositivos

La gran mayora de los dispositivos de entrada y salida son manejados por un controlador, que es un dispositivo que acta entre el procesador y el aparato externo. Por ejemplo, en el caso de los discos duros modernos, este dispositivo es el controlador IDE SCSI. Las funciones principales de este controlador son la correccin de errores, y la conversin de los bits que se leen del disco duro en bloques que el sistema operativo interprete correctamente.

La comunicacin entre el procesador y los dispositivos puede llevarse a cabo en dos formas: mapeo en memoria y puertos.

Comunicacin E/S: Mapeo en memoria En este caso los registros de control de los dispositivos E/S aparecen como si fueran parte del espacio en memoria que puede acceder el procesador.

Para lograr esto, se debe tener un espacio de memoria que no est asociado a una posicin en la memoria fsica, de tal forma que el procesador sepa que debe acceder los puertos E/S

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

210

en el lugar de la memoria. Un ejemplo de un dispositivo que trabaja de esta forma es la tarjeta de video de cualquier computadora moderna.

Una ventaja de este tipo de comunicacin es el hecho de permitir que el sistema operativo limite la interaccin con dispositivos E/S, al no incluir en el espacio de memoria virtual el espacio de memoria asociado a dispositivos E/S. Otra ventaja es que se pueden realizar operaciones con dispositivos E/S con una sola instruccin; no hace falta accesar los registros con una, y realizar la operacin con otra.

Un cuidado que se debe tener con el mapeo en memoria es que no se haga cacheo de las posiciones de memoria que representan los dispositivos, ya que esto podra resultar en una penalidad para el rendimiento de la computadora. Por ejemplo, en las arquitecturas como el procesador Intel Pentium, en los que hay un bus de alta velocidad exclusivo, que comunica la memoria y el procesador, y otro que comunica la memoria y el procesador con los dispositivos E/S, hay que tener un cuidado adicional. El problema asociado a esta

arquitectura es que los aparatos externos no tienen forma de saber si se les est llamando, ya que no tienen acceso exclusivo al bus. Intel ha solucionado esto poniendo un chip en el bus PCI conocido como puente PCI el cual tiene como funcin identificar al arranque, qu rangos de memoria van a ser utilizados por dispositivos E/S, lo cual permite al procesador saber correctamente en cual bus debe colocar la direccin que desea acceder.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

211

Comunicacin E/S: Puertos

Para lograr comunicarse de esta forma, el programa debe ejecutar dos instrucciones para leer y escribir al dispositivo, las cuales son tpicamente conocidas como IN y OUT, y se pueden llamar nicamente a nivel de ensamblador.

Por ejemplo, para escribir el contenido del acumulador de un procesador x86 a un puerto que tiene como direccin $4128 sera ejecutar la instruccin OUT AX,$4128. Es importante recalcar que, cuando se ejecuta alguna de estas instrucciones, el procesador sabe que el operando que lleva un valor de direccin hace referencia a un puerto, y no a una posicin en memoria.

Acceso directo a memoria (DMA)

Cuando el procesador desea acceder cierto dispositivo E/S, se evita que el mismo espere a que todos los datos sean transferidos mediante un controlador DMA, el cual es programado por el procesador directamente, cuando se necesita que ste interfiera en la transferencia entre dispositivos de entrada y salida. La programacin se lleva a cabo mediante una serie de registros del controlador DMA, los cuales representan informacin tal como el puerto E/S a utilizar, la direccin de la transferencia de informacin, etctera.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

212

La forma en que DMA opera es as: cuando ocurre una interrupcin al sistema operativo solicitando una transferencia de datos entre un dispositivo E/S y una ubicacin en memoria, el procesador programa el controlador DMA y luego solicita al dispositivo en cuestin que empiece la transferencia de datos. El procesador sigue ejecutando otras instrucciones mientras el controlador DMA coordina la transferencia entre el aparato y la memoria. Cuando se ha transferido toda la informacin que el procesador haba solicitado, el controlador DMA interrumpe al procesador, y el sistema operativo puede utilizar los datos que se haban solicitado, ya que stos ya estn en memoria.

Hay dos modos de operacin de DMA: una palabra a la vez y bloques. El primero transfiere una palabra a la vez, y comparte el bus con el procesador, lo cual hace la transferencia ms lenta. El segundo transfiere varias palabras a la vez lo cual hace el proceso mas rpido, pero pone al procesador a esperar si este debe usar el bus.

Dos funciones importantes del controlador DMA es hacer correccin de errores, y funcionar como buffer si el bus est siendo utilizado y los datos no se pueden copiar a su destino en el mismo momento que se obtienen de su fuente.

En algunos casos la utilizacin de DMA no tiene mucho sentido si la velocidad del procesador es mucho mayor que la del controlador DMA.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

213

Interrupciones

Cuando un procesador est ejecutando un programa y recibe una interrupcin mediante un controlador de interrupciones, lo primero que hace es atenderla si no hay ninguna otra interrupcin esperando. Esta atencin comienza cuando el procesador guarda algunos registros (al menos el PC) del programa que estaba ejecutando en una pila, y toma el nmero que el controlador que maneja el dispositivo interruptor puso en el bus de memoria, el cual sirve como ndice en la tabla conocida como vector de interrupcin. Esta tabla contiene el nuevo valor que se debe fijar en el contador de programa el que apunta al inicio de la rutina de servicio de interrupcin ISR. Rpidamente, luego que esto sucede, el procesador le indica al controlador de interrupciones que puede aceptar otra interrupcin.

En las arquitecturas superescalares, o las que implementan el concepto de pipelining, es sumamente difcil saber cul fue la ltima instruccin en ejecutarse, por lo que volver al estado anterior es de gran dificultad. Para estos casos las interrupciones se dividen en precisas e imprecisas, dependiendo de la informacin que se pueda recuperar para seguir ejecutando despus de la interrupcin. Las interrupciones imprecisas hacen la complejidad en hardware y en software (sistema operativo) sumamente grande.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

214

Cdigo muestra para el manejo de interrupciones se muestra a continuacin:


Programa en kernel copy_from_user(buffer,p,count); enable_interrupts(); while(*printer_status_reg != READY); *printer_data_reg = p[0]; scheduler(); Rutina de servicio de interrupcin (ISR) if (count == 0) { unblock_user(); } else { *printer_data_reg = p[i]; count = count 1; i=i+1; } ack_interrupt(); return_from_interrupt();

Cdigo tomado de [25], pgina 286. Objetivos del software E/S Algunos objetivos son: lograr independencia entre como maneja el sistema operativo el dispositivo en cuestin, y las caractersticas especficas del aparato, coordinacin entre accesos E/S sincrnicos los cuales bloquean y asincrnicos, los que no bloquean (interrupciones). La posibilidad de hacer buffering en accesos a dispositivos E/S, y la posibilidad de coordinar el acceso compartido son otros objetivos del software E/S.

Objetivos de software I/O Algunos objetivos son: lograr independencia entre cmo maneja el sistema operativo el dispositivo en cuestin, y las caractersticas especficas del aparato, coordinacin entre accesos E/S sincrnicos los cuales bloquean y asincrnicos, los que no bloquean

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

215

(interrupciones). La posibilidad de hacer buffering en accesos a dispositivos E/S, y la posibilidad de coordinar el acceso compartido son otros objetivos del software E/S.

Capas del software E/S Tabla A.1: Capas de software E/S Software E/S a nivel de usuario Software del sistema operativo independiente de dispositivo Manejador de dispositivo Manejador de interrupcin Hardware

Manejadores de interrupciones (interrupt handlers):

Lo ptimo es tener un manejador de dispositivo que se bloquee, por ejemplo mediante un semforo, mientras se lleve a cabo la operacin E/S y que se desbloquee cuando termine y finalice el procesamiento solicitado. Adems el manejador debe hacer todo el trabajo de salvar los registros del programa que se estaba ejecutando y preparar el procesador para la ejecucin de la rutina de interrupcin. La notificacin al dispositivo que la interrupcin se va a manejar es algo que este manejador debe hacer. Despus que se ejecuta la rutina de interrupcin, el manejador debe escoger cul proceso se va a ejecutar y preparar los registros del procesador para esto. Como se puede observar, el manejo de una interrupcin no es algo sencillo ni rpido.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

216

Manejador de dispositivo (device driver):

Este manejador es el que tiene cdigo dependiente del dispositivo que se est manejando ya que cada aparato tiene diferentes registros para diferentes propsitos. Debido a que el driver tiene que acceder registros del dispositivo, este debe ser parte del kernel del sistema operativo para tener los suficientes privilegios. La mayora de los sistemas operativos definen interfaces estndar para drivers de dispositivos tipo bloque, y de tipo carcter. Dentro de las tareas que tiene el driver est la verificacin que el aparato est listo para realizar la operacin, o que ya la concluy, ejecutar ciertos comandos especficos del dispositivo. Al igual que con el manejador de interrupciones, es posible que el driver se tenga que bloquear, si la operacin va a requerir mucho tiempo; tambin es posible que no sea necesario.

Como los dispositivos modernos operan a altas velocidades, los drivers deben ser reentrant, en otras palabras que puedan ser llamados casi inmediatamente una segunda vez despus de haber sido llamados por primera vez.

Los drivers no tienen permitido hacer cualquier llamada al sistema operativo, solamente las necesarias para manejar el MMU, el controlador DMA y otros elementos.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

217

Software del sistema operativo independiente de dispositivo:

Esta parte debe proveer: interfaz uniforme, buffering, reporte de errores, designar y liberar dispositivos, y proveer un tamao de bloque independiente del dispositivo.

Sobre el primero se puede decir que este software busca proveer funciones comunes, nomenclatura estndar y proteccin para todos los dispositivos. Por ejemplo, en UNIX se tiene un nmero mayor, y uno menor asociado a cada driver para cada dispositivo.

El buffering es muy importante, ya que permite que el rendimiento de la computadora se maximice si es necesario esperar eventos aleatorios.

Los reportes de errores es algo de gran inters para detectar y corregir errores de los dispositivos E/S. Los sistemas operativos modernos poseen facilidades para guardar los mensajes de error, tal es el caso del programa syslog en la familia de sistemas operativos UNIX.

La designacin y liberacin de dispositivos es necesaria; hay algunos que slo pueden ser accedidos por un proceso simultneamente.

El asunto del tamao del bloque uniforme es relevante, pues se tienen, por ejemplo, discos con diferentes geometras donde la informacin se obtiene en diferentes tamaos, o tambin

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

218

el caso de interfaces de red con diferentes velocidades. En ambos casos, el driver debe hacer una normalizacin del tamao de los bloques de datos para que el sistema operativo pueda trabajar con ellos adecuadamente.

Software E/S a nivel de usuario:

Este es el software que coordina cmo se van a hacer las llamadas respectivas al sistema operativo, para acceder los dispositivos E/S. Por ejemplo las llamadas printf() y scanf() son parte de esta categora.

Sistemas de Archivos

Esta es la forma en que se organizan los datos dentro de un dispositivo de memoria secundaria tal como un disco duro o un disco floppy. Ejemplos de sistemas de archivos son el FAT32 en sistemas operativos Microsoft y ext2 en GNU Linux.

Caractersticas generales de sistemas de archivos

Debe haber una nomenclatura estndar para los archivos la cual debe ser propia de cada sistema de archivos. As mismo, la estructura de los archivos, y los tipos de archivos deben ser caractersticas propias de cada sistema operativo. Por ejemplo, los archivos binarios

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

219

deben acomodar la siguiente informacin: encabezado, texto del programa, datos, direcciones de datos del programa en memoria y tabla de smbolos.

La forma en que los archivos se acceden debe tener cierto estndar; por ejemplo en UNIX se implementan llamadas al sistema que hacen esto, tales como open(), seek(), read(), etc. Las operaciones que se pueden realizar sobre un archivo son las siguientes: crear, eliminar, abrir, cerrar, leer, escribir, adjuntar, buscar o seek, modificar atributos y renombrar. El mapeo de archivos en memoria es otra forma de accederlos, y esto se logra mediante una modificacin de lo que referencia cierta regin en memoria.

Los atributos de los archivos son una parte importante del sistema de archivos y estos tienen como objetivo definir propiedades de cada archivo, como por ejemplo los permisos de acceso, el tamao, etc.

Implementacin de sistemas de archivos

Todo disco duro tiene un MBR (master boot record) en el que se tiene la informacin de como inicializarse la ejecucin (boot block), y una tabla de particiones. Cada particin tiene un boot block, as como un sistema de manejo de espacio libre.

Los archivos se implementan mediante una serie de bloques contiguos, los cuales pueden ser no contiguos en caso que no haya una serie de bloques lo suficientemente grandes para

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

220

el archivo y as se origina la fragmentacin. Para el llevar control de donde est cada archivo, se puede implementar una tabla de archivos que contenga punteros a cada archivo, tal y como se hace en los sistemas operativos de Microsoft. Tambin se pueden implementar index nodes o i-nodes, los cuales existen uno por archivo, y contienen informacin sobre la ubicacin y atributos de cada archivo.

El tamao de los bloques es otra caracterstica del sistema de archivos. Para definir esto se debe buscar un compromiso entre el rendimiento del disco y la utilizacin efectiva del disco duro. Si se tienen bloques muy grandes, se aprovecha mucho el espacio del disco pero el rendimiento es bajo y viceversa.

Para llevar una cuenta de los bloques libres se pueden usar listas enlazadas o se puede tener un mapa de bits que lleve el control sobre qu bloques estn siendo utilizados.

Llamadas a sistema operativo

Esta es la forma que se comunican los programas de los usuarios con el kernel y representan un nivel de abstraccin entre los programas y el hardware.

Cuando un programa hace una llamada al sistema operativo, este debe instruir al procesador que se va a hacer un cambio de modo de usuario a modo de kernel, y las variables y registros del programa que se est ejecutando deben ser almacenadas en la pila

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

221

para que se puedan a volver a utilizar una vez que la llamada al sistema se haya completado. Una vez completada la llamada, el programa original puede seguir su ejecucin.

En el caso de la familia UNIX, estas llamadas son parte de un estndar conocido como POSIX.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

222

B- Archivos de configuracin
Los archivos de configuracin de cada prctica se encuentran en el disco compacto adjunto a este documento.

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

223

ANEXOS
A- Hojas fabricante
Las siguientes hojas del fabricante se pueden encontrar en el disco compacto adjunto a este trabajo:

National Semiconductor PC87366 National Semiconductor Geode SC1100 Tarjeta SBC Soekris net4801

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

224

B- Configuracin cable UTP en modo crossover

Figura B.1: Detalle de conexiones de cable UTP en modo crossover

C- Conexiones de pines para puerto JTAG en tarjeta net4801


En el conector JP1 se deben realizar las siguientes conexiones: Tabla C.1: Conexiones JTAG de tarjeta net4801 Nmero de pin 1 2 3 4 5 6 7 Seal JTAG_RST VCC3 JTAG_TDO JTAG_TDI JTAG_TMS JTAG_TCK GND Resistencia PU o PD 1k 4.7k 4.7k 4.7k 4.7k

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

225

D- Fotos de la solucin de las prcticas

Figura D.1: SBC conectada funcionando

Figura D.2: SBC conectada a LCD y teclado

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

226

Figura D.3: Equipo de trabajo

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

227

E- Mensaje de booteo de GNU Linux en net4801


Linux version 2.6.6 (root@hextwo) (gcc version 2.95.4 20011002 (Debian prerelease)) #24 Wed Jul 28 10:03:17 CST 2004 BIOS-provided physical RAM map: BIOS-e801: 0000000000000000 - 000000000009f000 (usable).................. BIOS-e801: 0000000000100000 - 0000000008000000 (usable) 128MB LOWMEM available. On node 0 totalpages: 32768 DMA zone: 4096 pages, LIFO batch:1 CPU Geode 266 Mhz Normal zone: 28672 pages, LIFO batch:7 HighMem zone: 0 pages, LIFO batch:1 LBA 490-4-32 31 Mbyte DMI not present. 8H8H-9H9H------------------Built 1 zonelists Kernel command line: BOOT_IMAGE=Linux ro root=301 video=vga16:off console=ttyS0,19200n81 Initializing CPU#02000000 0107 0290 00 3F 00 0000E101 A0000000 10 PID hash table entries: 1024 (order 10: 8192 bytes)01 A0001000 10 Detected 266.674 MHz processor.0290 00 3F 00 0000E301 A0002000 10 Using tsc for high-res timesource80 00 00 00 00000000 00000000 00 Console: colour dummy device 80x250 08 38 00 A0003000 00000000 11 Memory: 126556k/131072k available (1591k kernel code, 3944k reserved, 704k data, 312k init, 0k highmem) Checking if this processor honours the WP bit even in supervisor mode... Ok. Calibrating delay loop... 524.28 BogoMIPS Dentry cache hash table entries: 16384 (order: 4, 65536 bytes) Inode-cache hash table entries: 8192 (order: 3, 32768 bytes) Mount-cache hash table entries: 512 (order: 0, 4096 bytes) CPU: NSC Unknown stepping 01 Checking 'hlt' instruction... OK. POSIX conformance testing by UNIFIX NET: Registered protocol family 16 PCI: PCI BIOS revision 2.00 entry at 0xf7861, last bus=0 PCI: Using configuration type 1 mtrr: v2.0 (20020519) ACPI: Subsystem revision 20040326 ACPI: Interpreter disabled. SCSI subsystem initialized usbcore: registered new driver usbfs usbcore: registered new driver hub PCI: Probing PCI hardware PCI: Probing PCI hardware (bus 00) ................................ 4801gpio: Version 1.2.0+daj0.1 (C) 2003 Martin Hejl & Dave Johnson 4801gpio: Geode GPIO base 0x6100 Serial: 8250/16550 driver $Revision: 1.90 $ 8 ports, IRQ sharing enabled ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A loop: loaded (max 8 devices) Using anticipatory io scheduler nbd: registered device at major 43 natsemi dp8381x driver, version 1.07+LK1.0.17, Sep 27, 2002 originally by Donald Becker <becker@scyld.com> http://www.scyld.com/network/natsemi.html 2.4.x kernel port by Jeff Garzik, Tjeerd Mulder eth0: NatSemi DP8381[56] at 0xc8800000, 00:00:24:c1:cc:4c, IRQ 10. eth1: NatSemi DP8381[56] at 0xc8802000, 00:00:24:c1:cc:4d, IRQ 10. eth2: NatSemi DP8381[56] at 0xc8804000, 00:00:24:c1:cc:4e, IRQ 10. Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2 ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx SC1200: IDE controller at PCI slot 0000:00:12.2 SC1200: chipset revision 1 SC1200: not 100% native mode: will probe irqs later ide0: BM-DMA at 0xe000-0xe007, BIOS settings: hda:pio, hdb:pio ide1: BM-DMA at 0xe008-0xe00f, BIOS settings: hdc:pio, hdd:pio

IE-0502

GUIA DE LABORATORIO DE SISTEMAS INCRUSTADOS

228

hda: SanDisk SDCFB-32, CFA DISK drive SC1200: set xfer mode failure ide0 at 0x1f0-0x1f7,0x3f6 on irq 14 hda: max request size: 128KiB hda: 62720 sectors (32 MB) w/1KiB Cache, CHS=490/4/32 hda: hda1 ohci_hcd 0000:00:13.0: Compaq Computer Corporation ZFMicro Chipset USB ohci_hcd 0000:00:13.0: irq 11, pci mem c8806000 ohci_hcd 0000:00:13.0: new USB bus registered, assigned bus number 1 usb usb1: Product: Compaq Computer Corporation ZFMicro Chipset USB usb usb1: Manufacturer: Linux 2.6.6 ohci_hcd usb usb1: SerialNumber: 0000:00:13.0 hub 1-0:1.0: USB hub found hub 1-0:1.0: 3 ports detected Initializing USB Mass Storage driver... usbcore: registered new driver usb-storage USB Mass Storage support registered. NET: Registered protocol family 2 IP: routing cache hash table of 1024 buckets, 8Kbytes TCP: Hash tables configured (established 8192 bind 8192) ip_conntrack version 2.1 (1024 buckets, 8192 max) - 300 bytes per conntrack ip_tables: (C) 2000-2002 Netfilter core team ipt_recent v0.3.1: Stephen Frost <sfrost@snowman.net>. http://snowman.net/projects/ipt_recent/ arp_tables: (C) 2002 David S. Miller NET: Registered protocol family 1 NET: Registered protocol family 17 hda: hda1 EXT3-fs: INFO: recovery required on readonly filesystem. EXT3-fs: write access will be enabled during recovery. kjournald starting. Commit interval 5 seconds EXT3-fs: recovery complete. EXT3-fs: mounted filesystem with ordered data mode. VFS: Mounted root (ext3 filesystem) readonly. Freeing unused kernel memory: 312k freed init started: BusyBox v1.00-pre9 (2004.07.21-02:16+0000) multi-call binary EXT3 FS on hda1, internal journal eth0: link up. eth0: Setting full-duplex based on negotiated link capability.

Vous aimerez peut-être aussi