Académique Documents
Professionnel Documents
Culture Documents
IE-0502
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:
IE-0502
DEDICATORIA
IE-0502
IE-0502
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
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
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
IE-0502
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
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
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
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
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
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
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
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
Polling
Booteo
Shell
Root
Sniffer
Script
IE-0502
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
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
IE-0502
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
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
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.
-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.
-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.
IE-0502
20
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
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
22
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
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.
IE-0502
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
25
3.3 Duracin
IE-0502
26
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
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
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
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
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.
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
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
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
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.
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.
IE-0502 /
34
/modules
/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
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
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
36
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
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.
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
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
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.
3.
y su sistema husped tiene un procesador de arquitectura x86, qu diferencias habra en la compilacin del kernel para el sistema incrustado?
4.
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
40
- 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
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
42
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
43
- 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
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
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.
- 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
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
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.
- 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
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.
- 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
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.
- 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
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.
- 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
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
52
- 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
53
- 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
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.
- 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
55
- Con esto se termina la configuracin bsica del sistema operativo GNU Linux en el sistema incrustado.
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
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
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
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
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
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
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 /.
tftp
root
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.
/home/rcs/crustaceos/rootfs 10.0.0.100(rw,no_root_squash)
IE-0502
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.
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
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
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.
IE-0502
65
Si su sistema husped usa el formato shadow para la base de datos de usuarios locales es necesario que habilite esta opcin
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
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
67
A continuacin se muestra el archivo fstab inicial que se debe crear en el directorio /etc de la SBC que se utiliz:
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.
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
68
memoria
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:
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.
IE-0502
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
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
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
72
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
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
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
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
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
77
CAPITULO 4: SEGUNDA PRACTICA, Interaccin con el mundo exterior mediante puertos de Entrada y Salida
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
78
4.3 Duracin
La duracin recomendada para esta prctica es de 3 sesiones de cuatro horas.
arquitectura x86.
La forma en que maneja el kernel 2.6 de GNU Linux los dispositivos E/S.
Cmo se deben accesar los puertos GPIO del controlador E/S de la SBC as como
como debe ser la alimentacin elctrica de la misma y que precauciones debe tener a la hora de realizar las conexiones.
IE-0502
79
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
80
penalidades de rendimiento altas. Por ejemplo, en el manejo de archivos regulares se recomienda utilizar fopen() en lugar de open().
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.)
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
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
82
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
83
5.
(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.
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
IE-0502
84
funcin del kernel que proporciona la informacin de este archivo se llama show_interrupts().
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.
Los manejadores de interrupciones tienen razones de peso por las cuales deben ser sumamente rpidas, algunas de ellas son:
IE-0502
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
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
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
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
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.
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
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.
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.
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
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
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
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
IE-0502
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.
- 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
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.
- 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
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
95
teclado y desplegarlo en la consola de la SBC. Utilice el mtodo de polling para comunicarse con el teclado del LCD.
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
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.
- 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.
IE-0502
97
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.
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
98
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
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.
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
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:
IE-0502
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
*/
#include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <termios.h> #include <fcntl.h>
IE-0502
102
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
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
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';
//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
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(); }
IE-0502
106
IE-0502
107
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(); }
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); }
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 */
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
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.
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().
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
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.
/*
testlcd.c
Programa de prueba para escribir iniciales en pantalla y desplazarlas hacia la derecha indefinidamente.
Requiere liblcd.so
IE-0502
111
Por Roberto Cardona Soto Julio 2004 Laboratorio Sistemas Incrustados, EIE, UCR
*/
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
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
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
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.
/*
testlcd2.c
IE-0502
113
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
IE-0502
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 }
4.9.2.3 Paso 3
-Las pruebas que se realizaron para comprobar que los puertos GPIO y el LED de error funcionen adecuadamente son:
IE-0502
115
Con esto se encendi el LED de error y se pudo medir un uno lgico en todos los puertos GPIO.
/*
testgpio.c
Programa de prueba que determina y modifica estatus de LED de error y puertos GPIO
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
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
116
Por Roberto Cardona Soto Julio 2004 Laboratorio Sistemas Incrustados, EIE, UCR
*/
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
IE-0502
117
file1 = fopen(filename1, "a+"); //abrir primer archivo if (file1 == NULL) { printf("Error al abrir archivo %s!\n",filename1); exit (8); }
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; } }
IE-0502
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";
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()
IE-0502
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
120
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
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
122
5.3 Duracin
La duracin recomendada para esta prctica es de dos sesiones de cuatro horas.
IE-0502
123
Estructuras de bajo nivel en GNU Linux para manejo de redes. Forma en que se documentan los estndares de Internet.
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
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
125
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
IE-0502
126
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).
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
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.
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
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.
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
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
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
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.
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
131
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
132
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.
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
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
134
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
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.
IE-0502
136
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
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
137
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.
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
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
139
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
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.
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
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 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 nodo final recibe el paquete, le quita el encapsulado Ethernet, y obtiene paquete IP original.
IE-0502
142
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
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
144
cmo funciona este mtodo, y el software que utilizara en el servidor para lograr dicho acceso.
3.
4.
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.
-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
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.
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
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.
-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
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.
IE-0502
148
1.
"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
149
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
150
IE-0502
30 1011001000101100 31 1100101110110110 32 0001110011001011 33 0110100100011111 34 1100101110111010 35 1010110011001011 36 1110000110111011
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:
IE-0502
152
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
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
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:
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
155
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
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
58.245 ms 56.626 ms
55.655 ms 69.990 ms
59.006 ms
55.453 ms
56.229 ms 98.839 ms
101.595 ms
110.483 ms 124.169 ms
122.466 ms 137.505 ms
IE-0502 11
156
216.109.120.207
12 216.109.120.150 13 216.109.124.73
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
IE-0502
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:
Se utilizaron los comandos ping y traceroute especificados anteriormente y se comprob que haba conectividad IP.
IE-0502
158
5.9.2.3 Paso 3
/*
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 Roberto Cardona Soto Julio 2004 Laboratorio Sistemas Incrustados, EIE, UCR
*/
IE-0502
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>
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
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,
IE-0502
161
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); }
IE-0502
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);
-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
163
-Se fij el archivo por defecto index.html ya que este es el archivo por defecto en los servidores HTTP.
IE-0502
164
CAPTULO
6:
PROPUESTA
DE
PRACTICA
FINAL,
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
IE-0502
165
6.3 Duracin
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).
IE-0502
166
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
167
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.
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
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
169
- 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
170
- 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.
-Escriba un driver tipo mdulo para leer la seal digitalizada de los puertos GPIO. Cargue el driver utilizando el comando insmod.
IE-0502
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.
IE-0502
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.
IE-0502
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
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.
- 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.
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
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
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,
5. Rubini, A. & Corbet,, J. Linux Device Drivers, Segunda Edicin, , OReilly and Associates, Inc., Estados Unidos, junio 2001.
IE-0502
177
6. Stones, R. & Matthew,N. Beginning Linux Programming, Segunda Edicin, Wrox Press Ltd., Canad, Setiembre 1999.
7. Oualline, S.
Practical C
8. Hollagaugh, C.
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
178
13. Kernighan, B.
&
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.
IE-0502
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
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
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
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/
IE-0502
182
42. Sweet, Michael. Serial Programming Guide for POXIX Operating Systems. http://www.easysw.com/~mike/serial/serial.html
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
183 -HTTP/1.1.
49. RFC
2616
Hypertext
Transfer
Protocol
http://www.faqs.org/rfcs/rfc2616.html
52. RFC 791 - Internet Protocol DARPA Internet Program Protocol Specification. http://www.ietf.org/rfc/rfc0791.txt
IE-0502
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.
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
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
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
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
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
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.
-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
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
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.
-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
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
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
193
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
194
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
195
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
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
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.
IE-0502
198
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.
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
199
Hay otros algoritmos como secuenciacin por lotera, secuenciacin garantizada y secuenciacin compartida justa, los cuales no son muy comunes en implementaciones convencionales.
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
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
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
202
operativo. Para evitar esto, se asignan dos espacios en memoria secundaria para cada proceso, uno para la pila y otro para variables dinmicas.
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
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
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
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.
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
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
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
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
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
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
211
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.
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
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
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
214
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
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
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
216
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
217
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
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.
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.
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
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.
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
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.
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
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
222
B- Archivos de configuracin
Los archivos de configuracin de cada prctica se encuentran en el disco compacto adjunto a este documento.
IE-0502
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
224
IE-0502
225
IE-0502
226
IE-0502
227
IE-0502
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.