You are on page 1of 87

´ Indice general

1. PLATAFORMA DE DESARROLLO ECBOT 1.1. Introducci´ on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1. Apropiaci´ on de Conocimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.2. Contribuciones al desarrollo tecnol´ ogico en Colombia . . . . . . . . . . . . . . . 1.2. Sistemas Embebidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1. Caracter´ ısticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2. Arquitectura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3. Metodolog´ ıa de Dise˜ no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.4. Herramientas Software de libre distribuci´ on GNU toolchain . . . . . . . . . . . . 1.2.5. Herramientas hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.6. Interfaz JTAG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3. El sistema Operativo Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1. Arquitectura de Linux [1] [2] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4. Portando Linux a la plataforma ECBOT y ECB AT91 . . . . . . . . . . . . . . . . . . . . 1.4.1. El Kernel de Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.2. Imagen del kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5. Inicializaci´ on del kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.1. Darrel’s Loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.2. U-boot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.3. Portando U-boot a la familia de plataformas ECB AT91 . . . . . . . . . . . . . . 1.5.4. Almacenamiento de la im´ agen del kernel . . . . . . . . . . . . . . . . . . . . . . 1.5.5. Inicializaci´ on del Kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6. Inicializaci´ on del Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6.1. Sistema de Archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6.2. Primer Programa en Espacio de Usuario init . . . . . . . . . . . . . . . . . . . . . 1 3 3 3 8 11 11 12 13 15 25 31 35 37 42 42 48 52 53 57 58 63 65 69 69 71

2

Sistemas Embebidos 1.6.3. Distribuciones Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7. M´ odulos del kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7.1. Ejemplo de un driver tipo caracter . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8. Interfaz con Perif´ ericos dedicados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.1. Comunicaci´ on Procesador - Perif´ erico . . . . . . . . . . . . . . . . . . . . . . . . 1.8.2. Comunicaci´ on Perif´ erico - Procesador . . . . . . . . . . . . . . . . . . . . . . . . 74 75 75 79 79 83

Cap´ ıtulo 1

PLATAFORMA DE DESARROLLO ECBOT
1.1. Introducci´ on

Uno de los objetivos principales del presente trabajo es la realizaci´ on de actividades que ayude al pa´ ıs en su desarrollo tecnol´ ogico; en la actualidad Colombia es un consumidor de tecnolog´ ıa, es decir, busca en el exterior soluciones a sus problemas, en la mayor´ ıa de las ocasiones, estas soluciones no se ajustan a los requerimientos, ya que no tienen en cuenta la situaci´ on pol´ ıtica, cultural y social del pa´ ıs. En la mayor´ ıa de los casos, no se aumenta el conocimiento tecnol´ ogicos del pa´ ıs, y reduce las opciones de negocios para las empresas locales a representantes de ventas o suministro de sevicios de mantenimiento. Este esquema es nocivo para la industria Colombiana, ya que no existen mecanismos que permita su desarrollo, protegi´ endola de alguna forma frente a los productos for´ aneos. Esto unido a las politicas de estado encaminadas a la apertura comercial, en donde los productos nacionales compiten con productos de paises con mayor desarrollo tecnol´ ogico nos llevar´ a a la eliminaci´ on total de la industrias Colombianas. A continuaci´ on se presenta un res´ umen del estudio realizado por Hector Mart´ ınez sobre la Apropiaci´ on del conocimiento en Colombia [3] durante los a˜ nos 1991 a 2000.

1.1.1.

Apropiaci´ on de Conocimiento

Para que Colombia deje de ser un pa´ ıs que consume tecnolog´ ıa y llegue en alg´ un momento a ser generador de productos tecnol´ ogicos, es necesario que se genere un conocimiento que permita esta transici´ on. “Para que el conocimiento sea motor de desarrollo es necesario el traspaso desde sus creadores a la sociedad, mediante la conversi´ on a tecnolog´ ıas que produzcan cambios radicales que incrementen la producci´ on. Esa transmisi´ on de tecnolog´ ıa generadora de crecimiento econ´ omico esta influenciada por diversos factores: medio geogr´ afico, leyes de propiedad industrial, costos laborales, nivel de ciencia y tecnolog´ ıa, religi´ on, tipos de instituciones, resistencia a innovar, pol´ ıticas de estado, guerras, factores demogr´ aficos, entre otros” [4] Pero como apropiar este conocimiento? Arrow [5] afirma que la apropicaci´ on de conocimiento puede efectuarse de varias formas: “aprender haciendo”, “aprender usando”, “aprender leyendo”. Cuando una empresa decide transmitir su conocimiento disponible, lo hace en procesos de investigaciones conjuntas, en 3

4

Sistemas Embebidos

actividades de producci´ on, y distribuci´ on, mercadeo, servicio y soporte operativo o riesgo compartido. Tambi´ en se presentan alianzas entre firmas como: contratos de I+D, acuerdos de licencias, licencias cruzadas. La conformaci´ on de estas asociaciones permite crear redes tecnol´ ogicas dominadas por pa´ ıses industrializados con sus respectivas empresas multinacionales monopolizando conocimiento [3] Para Colombia, el problema radica en que mediante contratos de importaci´ on de tecnolog´ ıa, las empresas de capital nacional no est´ an adquiriendo el conocimiento necesario para lograr innovaciones al interior de las mismas. De forma que puedan ser competitivas y logren acceder a mercados internacionales ofreciendo productos innovadores, de calidad y a precios competitivos. Con efectos directos como: generaci´ on de empleos especializados, desarrollo tecnol´ ogico e industrial sostenido, ampliaci´ on del acervo de conocimiento nacional y disminuci´ on de la salida de divisas (al mejorar los procesos de negociaci´ on) y creaci´ on de externalidades positivas [3]. Ligado al problema de la senda tecnol´ ogica est´ a el del grado de lo t´ acito del conocimiento cient´ ıfico. Teece [6] se˜ nala que al existir conocimiento t´ acito toda la tecnolog´ ıa disponible no se transfiere de los productores a los receptores o compradores de la misma. Por tanto, los pa´ ıses seguidores siempre van a estar a la zaga tecnol´ ogica. Forbes y Wield [7] se˜ nalan que los esfuerzos adaptativos son mayores porque deben acomodar las “innovaciones” a los materiales locales, fuerza laboral nativa, mercados internos y medio ambiente local. Entonces, el problema no se limita a c´ omo transferir conocimiento, c´ omo develar su parte t´ acita y c´ omo extraerlo de las multinacionales, sino que radica en el bajo poder de negociaci´ on y adquisici´ on de tecnolog´ ıa por firmas peque˜ nas y medianas, las cuales carecen de recursos y tienen procesos deficientes de contrataci´ on. En este orden de ideas, si el pa´ ıs no es un innovador neto ¿no deber´ ıa m´ as bien mostrar una tendencia a importar conocimiento? Y las firmas nacionales ¿no deber´ ıan ser las que m´ as efectuaran este tipo de contratos, para as´ ı acceder al conocimiento de la tecnolog´ ıa adquirida? En resumen, conociendo mejor qu´ e tecnolog´ ıa se importa y qu´ e tipos de contratos se utilizan, es posible crear marcos de referencia para empresas nacionales que est´ en interesadas en adquirir tecnolog´ ıa. Esto producir´ ıa externalidades positivas en empresas importadoras de conocimiento y, a su vez, en la econom´ ıa del pa´ ıs. Con una adecuada importaci´ on de conocimientos tecnol´ ogicos se crear´ ıa una ventaja competitiva de car´ acter estructural, basada en un acervo de conocimiento tecnol´ ogico que permita incrementar la productividad en todos los sectores econ´ omicos de manera permanente [3]. Seg´ un los estudios realizados por Mart´ ınez, con base en registros del Decreto 259/92, del Incomex. La importaci´ on de conocimiento no est´ a siendo empleada con el prop´ osito de utilizar tecnolog´ ıas de punta que permitan efectuar innovaciones al interior de las empresas y de los sectores. Las empresas nacionales se limitan a comprar un determinado dispositivo, sin tener el conocimiento para operarlo, hacerle mantenimiento ni mucho menos mejorarlo, por lo que se ven obligadas a contratar con el vendedor contratos para dicho f´ ın. Esto indica que la adquisici´ on de tecnolog´ ıa no se realiza con base en programa desarrollado de antemano, sino son una respuesta a cambios en el mercado, lo cual evidencia la inexistencia de programas de innovaci´ on encaminados a la disminuci´ on de la brecha tecnol´ ogica.

Situaci´ on de la Industria Electr´ onica en Colombia La industria electr´ onica nacional no es ajena a las pol´ ıticas que siguen las empresas nacionales en cuanto a la apropiaci´ on de tecnolog´ ıa; Colombia depende totalmente de econom´ ıas m´ as desarrolladas para el suministro de dispositivos electr´ onicos en diversas areas (comunicaciones, entretenimiento, industria, medicina, etc). Mientras en otros sectores de la econom´ ıa han pasado de ser consumidores a exportadores, y adquieren nuevas tecnolog´ ıas para ser m´ as competitivos, el sector electr´ onico del pa´ ıs ha reducido sus actividades de Investigaci´ on y Desarrollo hasta el punto de depender totalmente de productos externos unos de baja calidad y que no suplen los requerimientos del mercado local, pero que son muy econ´ omicos.

las herramientas de desarrollo necesarias para la programaci´ on y depuraci´ on de este tipo de sistemas son de libre distribuci´ on. seg´ un el Sistema Nacional de ´ ltimos 10 a˜ Informaci´ on Superior. especialmente en los sectores de tecnolog´ ıa m´ edica. comunicaciones y consumo [8]. Seg´ un Proexport el 91 % de las exportaciones son realizadas por Bogot´ a y los destinos se encuentran en pa´ ıses cercanos como Venezuela. falta de cultura de Investigaci´ on y Reducida apropiaci´ on tecnol´ ogica. Seg´ un ASESEL cadena electr´ onica. movilidad. circuitos impresos. De los problemas expuestos anteriormente podemos identificar cuales son los que m´ as afectan el desarrollo de la industria electr´ onica en Colombia. La demanda mundial de este tipo de sistemas aumentar´ a de forma dram´ atica en los pr´ oximos a˜ nos. para el cual el tiempo de aprendizaje. Es importante decir que la industria colombiana. 1 en el 2001 exist´ ıan 154 empresas productoras de componentes y equipos de la Dentro de los productos que la industria electr´ onica exporta se encuentran registrados: Circuitos integrados.Carlos Iv´ an Camargo Bare˜ no 5 En la actualidad la industria electr´ onica presenta una gran din´ amica a nivel mundial. Por otro lado. Un estudio realizado en la Universidad Nacional de Colombia [10] identific´ o los siguientes obst´ aculos para el desarrollo de la industria electr´ onica en Colombia: Deficientes relaciones Universidad Empresa. como vimos anteriormente muchas industrial Colombianas se resisten al cambio y prefieren comprar equipos en el exterior a buscarlos localmente. el uso de los sistemas electr´ onicos se extiende a todas las actividades humanas. La electr´ onica en Colombia y en el mundo hace parte de esas industrias que se mueven velozmente en un camino desconocido. la mayor´ ıa de los productos Colombianos no cumplen con las normas m´ ınimas de calidad y utilizan productos de bajo costo obtenidos en remates de componetes. limitado recurso humano con formaci´ on avanzada. ni microestructuras. instrumentos para medida y control. por lo que estas son ventas de productos comprados en pa´ ıses desarrollados. pol´ ıticas gubernamentales. aunque. como consecuencia se hace necesario tener una actualizaci´ on constante de los avances tecnol´ ogicos y las proyecciones futuras del sector. tecnol´ ogica terminal y de t´ ecnica profesional. Debido a la importancia del sector tecnol´ ogico es primordial que en Colombia se est´ e consciente del estado actual y que se puede hacer en t´ erminos de Investigaci´ on Cient´ ıfica y Desarrollo Tecnol´ ogico (I+D) en Ingenier´ ıa Electr´ onica. Per´ u. esta falta de confianza en la industria local no es infundada. Instrumentos y aparatos el´ ectricos o electr´ onicos. la falta de confiabilidad en los productos Colombianos agrava este problema. en Colombia trabajamos a´ un con circuitos integrados que se crearon en la decada de los 80 del siglo pasado y utilizamos lenguajes de programaci´ on como el assembler. gracias a la gran demanda originada. no es posible ser competitivo en el mercado electr´ onico mundial con tecnolog´ ıas y metodolog´ ıas de dise˜ no obsoletas. La culpa de este atraso tecnol´ ogico no es exclusiva de la induatria. los insumos y los servicios de fabricaci´ on son muy econ´ omicos. atraso tecnol´ ogico. durante los u nos se han abierto 230 programas relacionados con la industria electr´ onica. Ecuador y USA. el que m´ as perjudica sin lugar a dudas es el atraso tecnol´ ogico. estos programas est´ an repartidos entre programas de formaci´ on Universitaria. Otro actor que contribuye al retraso tecnol´ ogico es el sector acad´ emico. seguridad. en la actualidad no fabrica circuitos integrados. El mercado de los sistemas embebidos es una industria que movi´ o alrededor de 25 billones de d´ olares en el 2008 seg´ un Venture Development Corporation [9]. Pobre enfoque acad´ emico hacia la industria. Desafortunadamente en Colombia la industria electr´ onica se encuentra muy rezagada en relaci´ on a las de los pa´ ıses industrializados. competencia de pa´ ıses asi´ aticos. y las ventajas y oportunidades de negocios mencionadas anteriormente no son aprovechadas en la actualidad. microestructuras. desarrollo y de depuraci´ on es muy largo. Calidad de los productos nacionales. la inversi´ on de capital necesaria para el dise˜ no de Sistemas Embebidos es relativamente baja. por otro lado. la mayor´ ıa de estos centros de formaci´ on se encuentran ubicados en 3 De1 Asociaci´ on de entidades del Sector Electr´ onico .

se realizan tareas manuales. muchos de los cuales provienen de instituciones educativas con poca consolidaci´ on. en Colombia. Fomentar cooperaci´ on internacional e inversi´ on extranjera con transferencia de tecnolog´ ıa. Realizar seminarios y l´ ıneas de profundizaci´ on de temas afines a la administraci´ on y la gerencia en empresas de base tecnol´ ogica. Por esta raz´ on no es de extra˜ nar la poca confianza que tienen los industriales en los productos nacionales. Por otro lado. los curr´ ıculos son conservadores hay poca experimentaci´ on y su estructuraci´ on y metodolog´ ıas son muy cl´ asicas. repetitivas que pueden ser realizadas por herramientas de dise˜ no moderno. A los centros de Ense˜ nanza: Creaci´ on de portafolio de servicios. Montar laboratorios de pruebas e incentivar los productores nacionales para que logren una calidad que cumpla con los est´ andares internacionales. regulaci´ on de los programas acad´ emicos. De lo anterior podemos concluir que en Colombia se presenta una sobre-oferta de profesionales en ´ rea electr´ el a onica. Pasos a seguir para iniciar la soluci´ on al problema de atraso tecnol´ ogico Estudios consultados [12] [11] [10] [3]. regulaci´ on de la oferta laboral. generan el clima perfecto para que el atraso tecnol´ ogico se mantenga durante mucho tiempo y Colombia no deje de ser un consumidor de tecnolog´ ıa. Antioquia y Valle [11]. coinciden en que para dar soluci´ on a los problemas expuestos anteriormente se deben seguir las siguientes recomendaciones: Al gobierno: Fomento gubernamental de centros de investigaci´ on y productividad para fortalecer la relaciones universidad empresa. Definir agendas de investigaci´ on acordes con las tendencias mundiales y desarrollar capacidades en el pa´ ıs. y fuera del contexto mundial. el contenido de las asignaturas relacionadas directamente con la industria electr´ onica se encuentran muy desactualizados. .6 Sistemas Embebidos partamentos: Bogot´ a. a nivel gubernamental. Adem´ as las preferencias en la educaci´ on superior son Formaci´ on t´ ecnica / form. este aumento es aportado por instituciones de poca consolidaci´ on. Otro problema adicional radica en la falta de experiencia en el sector productivo por parte del personal acad´ emico. El n´ umero de Ingenieros graduados en un a˜ no es entre 2 y 8 veces mayor que en los pa´ ıses en v´ ıa de desarrollo y doce veces mayor que los que se grad´ uan en los pa´ ıses desarrollados. se utilizan metodolog´ ıas de dise˜ no antiguas en las que primaba la experiencia del dise˜ nador. lo cual explica la pobreza de ingenieros con altos niveles de formaci´ on. raz´ on por la cual se evita la experimentaci´ on y se da m´ as e an´ alisis y solo se llega a una simulaci´ on. Lo anterior unido a la falta de pol´ ıticas de estado que: tracen normas encaminadas a incentivar la inversi´ on en investigaci´ on y desarrollo. tecnol´ ogica / form. y que han sido formados con programas desactualizados que no tienen en cuenta los avances tecnol´ ogicos y metodol´ ogicos. defina l´ ıneas y campos de investigaci´ on. Apoyo del gobierno a personas que tienen un alto potencial de crear y desarrollar tecnolog´ ıa. profesional que es justamente lo opuesto a la de los pa´ ıses desarrollados [12]. un componente importante de los profesores nunca han sido parte de un proceso productivo o de un proceso de desarrollo que tenga como f´ ın ´ nfasis al la creaci´ on de un producto comercial.

Interacci´ on entre Universidades. Implementaci´ on de las ecuaciones minimizadas utilizando las familias l´ ogicas 7400 y 4000. (continuo aprendizaje) habilidad para innovar. breadboards) 5. Y el desconocimiento en herramientas tipo CAD. 2. 4. El proceso de dise˜ no que realizaban los estudiantes era: 1. Conviene que buena parte de los trabajos realizados en doctorado sean de investigaci´ on aplicada. 2 El problema detr´ as del uso de esta tecnolog´ ıa se encuentra en la ausencia total de metodolog´ ıas de dise˜ no (en el caso Colombiano). Especificaciones del sistema. ´ nicamente a los estudiantes. el quedarse ahi no es bueno para una industria electr´ onica desactualizada. Las facultades de Ingenier´ ıa deben acompa˜ nar las demandas que surgen del sector productivo. falta de concentraci´ on. Incentivar la formaci´ on de maestr´ ıas y doctorados nacionales acorde con una agenda de investigaci´ on. la mayor´ ıa de los estudiantes consultados no realizaban simulaciones funcionales y prefer´ ıan probar el dise˜ no una vez implementado f´ ısicamente. esto unido a la dificultad de depuraci´ on innata a este tipo de implementaciones. sin embargo. las cuales est´ an sujetas a errores humanos originados por cansancio. Estado de la Electr´ onica Digital en la Universidad Nacional de Colombia ´ rea de electr´ Hasta hace un a˜ no en las asignaturas del a onica digital de la Universidad Nacional de Colombia (La Universidad m´ as grande e importante del pais). ni siquiera que en la actualidad se consideren obsoletas para el dise˜ no de un sistema digital completo. La raz´ on de esto es que existen muchas fuentes de error en el proceso. orientadas a mejorar la productividad del sector empresarial Innovaci´ on curricular. Generaci´ on manual de ecuaciones boolenas. debido a que este tipo de implementaciones no pueden generar productos competitivos a nivel mundial. se trabajaba con dispositivos que fueron sacados al mercado en 1966 y 1968. desarrollar nueva tecnolog´ ıa. Necesidad de mejorar las competencias y habilidades generales de los ingenieros. Minimizaci´ on manual utilizando mapas de Karnaugh. 3. Pruebas del sistema. investigar. El problema principal al utilizar esta tecnolog´ ıa no es su a˜ no de creaci´ on. Otro aspecto que vale la pena resaltar es la falta de ua simulaci´ on funcional. etc.Carlos Iv´ an Camargo Bare˜ no 7 Infraestructura institucional que impulse la actualizaci´ on tecnol´ ogica en el sector mediante desarrollo de proyectos de tecnolog´ ıa de punta con una posible transferencia de tecnolog´ ıa. actualizaci´ on continua de profesionales. A manera de ejercicio acad´ emico se justifica el uso de las familias 7400 y 4000. generados por la ausencia de herramientas CAD que realizan las operaciones tediosas como las minimizaci´ on de ecuaciones booleanas. sobre placas de pruebas (protoboards. Realizaci´ on de proyectos de aplicaci´ on. 2 En la actualidad estas compuertas se utilizan para la implementaci´ on de peque˜ nas operaciones l´ ogicas . las familia l´ ogica TTL 7400 y CMOS 4000. la Universidad debe El contacto con las empresas no debe ser encargada u desarrollar las competencias que la empresa requiere. aumentaba considerablemente el tiempo requerido para realizar las pruebas al sistema.

se observaron hasta 8 placas de pruebas con cerca de 50 circuitos integrados interconectados entre s´ ı. al comienzo. ´ rea de electr´ ´ nico que importa son La sensaci´ on que queda al terminar el a onica digital es que lo u ´ til. se utilizan microcontroladores de 8 bits de diferentes familias y se utiliza el lenguaje ensamblador como herramienta de desarrollo.1. cuyo objetivo principal es contribuir al desarrollo tecnol´ ogico en Colombia. se daba m´ as importancia al uso de la herramienta y no a la metodolog´ ıa de dise˜ no. Falta de una metodolog´ ıa de dise˜ no. Contribuciones al desarrollo tecnol´ ogico en Colombia Durante la realizaci´ on de esta investigaci´ on se llevaron a cabo varias actividades. Por esta raz´ on unoa de las matas del presente trabajo fu´ e la creaci´ on de una plataforma hardware que permita implementar las diferentes modelos bio-inspirados. 3. de nuevo el estudiante ataca los problemas sin una metodolog´ ıa de dise˜ no clara. lo cual aumenta las posibles causas de error y aumenta el tiempo de desarrollo en forma considerable. ya que el contenido de este curso se encuentra totalmente desligado al de los dos anteriores. Poco uso de las herramientas CAD. 5. La siguiente tabla muestra los los microcontroladores y que lo visto en los primeros cursos no es muy u ´ rea de electr´ problemas encontrados en el a onica digital de las carreras de Ingenier´ ıa El´ ectrica y Electr´ onica de la Universidad Nacional de Colombia: 1. se introduce al estudiante al uso de los dispositivos l´ ogicos programables (PLD) y los lenguajes de descripci´ on de hardware (HDL) como herramientas para el dise˜ no de sistemas digitales. esta pr´ actica no es seguida por la mayor´ ıa de los estudiantes. En la mayor´ ıa de estudios similares no se contempla la creaci´ on de estas plataformas ya que en los pa´ ıses donde se desarrollan la investigaci´ on existe una industria electr´ onica competitiva y que esta al tanto de los desarrollos tecnol´ ogicos a nivel mundial. Sin embargo.2. cada profesor utilizaba contenidos y niveles de exigencia diferentes. durante este curso se proporciona una metodolog´ ıa de dise˜ no en la que los estudiantes emulan el comportamiento del microcontrolador antes de ser programado. Como se mencion´ o anteriormente este no es el caso de nuestro pais. . Falta de continuidad en las asignaturas. sin embargo. ´ rea de electr´ En el segundo curso del a onica digital. una posible causa de este comportamiento puede ser la falta de metodolog´ ıas de dise˜ no en los cursos anteriores. En la tercera parte del curso se trabaja con sistemas microcontrolados. Vale la pena indicar que este curso fue dictado por profesores ocasionales ´ ltimos cuatro a˜ durante los u nos. como se expuso anteriormente el pa´ ıs presenta serias dificultades en este campo y es deber de la comunidad acad´ emica nacional atacar los problemas locales. en la mayor´ ıa de las industrias nacionales y en las facultades relacionadas con la electr´ onica se trabaja con tecnolog´ ıas de hace 30 a˜ nos (Familias 74 TTL y 40 CMOS) y se utilizan herramientas de programaci´ on de bajo nivel como el lenguaje ensamblador. lenguajes de programaci´ on. 1. Falta de docentes.8 Sistemas Embebidos A los problemas mencionados anteriormente se suma la gran cantidad de circuitos integrados necesarios para implementar un sistema sencillo. 4. 2. No se suministra una formaci´ on adecuada que ayude a la industria electronica a salir del retraso tecnol´ ogico. Una de las principales desventajas que presenta este curso (y de la l´ ınea en general) es la falta de continuidad en los contenidos y en la metodolog´ ıa utilizada. Utilizaci´ on de herramientas obsoletas: Familias L´ ogicas. el contenido de estos cursos se limitaba al uso de una herramienta de dise˜ no y la ense˜ nanza de nociones b´ asicas del lenguaje VHDL. 6.

Necesidad de mejorar las competencias y habilidades generales de los ingenieros. sino que se construir´ a una plataforma que sea tecnol´ ogicamente “moderna” y que este al nivel de las plataformas utilizadas en estudios similares. Realizaci´ on de proyectos de aplicaci´ on: La primera decisi´ on que se tom´ o en cuanto a la naturaleza de esta investigaci´ on fu´ e la de generar una aplicaci´ on f´ ısica real que validara los modelos propuestos. desarrollar nueva tecnolog´ ıa. 1. Contribuciones a Nivel Tecnol´ ogico y Acad´ emico En este cap´ ıtulo se realiza la presentaci´ on de la plataforma Hardware y Software utilizada en el desarrollo de esta investigaci´ on. Interacci´ on entre Universidades. librer´ ıas. seg´ un Venture Development Corporation (VDC). ´ la primer Computadora en una sola placa (SBC 3 ) que utiliza un procesador de Para esto se dise˜ no 32 Bits y utiliza Linux como sistema operativo 2 2. se eligieron en las que se pod´ ıa hacer un aporte significativo. vale la pena anotar que no todas est´ an dentro del alcance de este trabajo. inc. Sistemas Operativos) abre grandes posibilidades comerciales para paises en v´ ıa de desarrollo ya que no son necesarias grandes inversiones de capital para la implementaci´ on de estos sistemas. la caida de precios del hardware. Conviene que buena parte de los trabajos realizados en doctorado sean de investigaci´ on aplicada. bluetooth. investigar. esta tendencia se debe al aumento de complejidad de los dispositivos y a las necesidades de conexi´ on (tales como Ethernet. actualizaci´ on continua de profesionales. 6. etc). simuladores. con una tasa de crecimiemto anual (AAGR) del 16 %.com/ . (continuo aprendizaje) habilidad para innovar. Recientes investigaciones de VDC sugieren que entre el 13 y el 15 % de los desarrolladores utilizan linux como su sistema operativo principal. Esto unido a: el gran nivel de integraci´ on obtenido por la industria de los semiconductores en los SOC. la disponibilidad de herramientas software de desarrollo gratuitas (compiladores. Otro factor es el deseo de utilizar el mismo Sistema Operativo para varios proyectos. M´ as de un bill´ on de dispositivos embebidos fueron vendidos en el 2004. Innovaci´ on curricular. Uno de los objetivos de este trabajo. y se espera que esta cifra aumente al madurar la tecnolog´ ıa y 3 Single Board Computer 4 http://www. El mercado de los sistemas embebidos contin´ ua en aumento y su campo de acci´ on se ha extendido en casi todas las actividades humanas. WiFi. es la creaci´ on de una plataforma Embebida que permita la apropiaci´ on de nuevas herramientas y metodolog´ ıas de dise˜ no. Seg´ un BBC. este trabajo no se limitar´ a a realizar simulaciones. adem´ as.1).1 % en 2001 a 37.1 % en 2004. mientras la tasa de crecimiento para las tarjetas embebidas es del 10 %. 4 el mercado para el software embebido puede crecer de $1.5 billones en 2009.6 billones a $3.bccresearch. El contacto con las empresas no debe ser encargada u desarrollar las competencias que la empresa requiere. Infraestructura institucional que impulse la actualizaci´ on tecnol´ ogica en el sector mediante desarrollo de proyectos de tecnolog´ ıa de punta con una posible transferencia de tecnolog´ ıa: ´ nicamente a los estudiantes. 4. orientadas a mejorar la productividad del sector empresarial 5.Carlos Iv´ an Camargo Bare˜ no 9 A continuaci´ on se mestran una lista del trabajo realizado sobre algunas de las recomendaciones dadas por los estudios acerca del desarrollo tecnol´ ogico en Colombia. elimina la necesidad de eficiencia en el manejo de recursos proporcionada por muchos productos comerciales. De acuerdo con VDC el porcentaje de dispositivos basados en Sistemas Operativos comerciales tiende a disminuir callendo del 43. (Favor ver Figura 1. la Universidad debe 3.

la gran disponibilidad de herramientas de desarrollo.2 muestra una encuenta realizada a 932 desarrolladores de todo el mundo por linuxdevices 5 Figura 1. Fuente: BCC Inc.10 Sistemas Embebidos Figura 1.linuxdevices. aplicaciones.2: Preferencia de Sistema Operativo para Sistemas Embebidos 2003-2007. El coraz´ on de todo sistema embebido es su procesador.1: Mercado Global de Sistemas Embebidos 2003-2009. librer´ ıas y la posibilidad de modificar o adaptar c´ odigo ya existente. interface con el humano (Controladores de: LCD.com . 5 http://www. en la actualidad existen diversos fabricantes que ponen a disposici´ on de los desarrolladores System On Chip (SOC) que incluyen una gran variedad de perif´ ericos que incluyen dispositivos de comunicaci´ on (UARTs. La elecci´ on de Linux como herramienta de desarrollo esta fuertemente influenciada por su caracter libre. tarjetas de sonido. el soporte de los recursos de la comunidad aumenten. almacenamiento (memorias: RAM. Fuente: linuxdevices. Ethernet). La figura 1. dispositivos touch screen). USB.

el costo de este SOC es muy bajo (en comparaci´ on con el costo de cada perif´ erico por separado). La figura 1. el control de un asensor siempre realizar´ a las mismas acciones durante ´ til. El t´ ermino Sistemas de Tiempo Real es utilizado para enfatizar este aspecto.2.1.3ort´ atiles. Figura 1.2. un Sistema Embebido realiza tareas pre-definidas. su vida u Debido a su interacci´ on con el entorno los ES deben cumplir esctr´ ıctamente restricciones temporales. tel´ efonos celulares. Los componentes Hardware. Sistemas Embebidos Un Sistema Embebidos es un sistema de prop´ osito espec´ ıfico en el cual. Por ejemplo. lo cual permite su optimizaci´ on. Como puede verse en la Figura 1.Carlos Iv´ an Camargo Bare˜ no 11 SDRAM.3 muestra la preferencia de los desarrolladores encuestados por linuxdevices. como ASICs y Dispositivos L´ ogicos Programables (PLD) proporcionan la velocidad de ejecuci´ on y el cosumo de potencia necesarios en algunas aplicaciones. est´ an compuestos por componentes Hardware y Software. SD. siendo estos u as populares en dispositivos de consumo como PDAs. es decir.3 existe una clara preferencia entre los procesadores x86 y los ´ ltimos los m´ procesadores ARM. reduciendo el tama˜ no y costo del producto [?] 1. 1. consolas de juego p1.3: Preferencia de CPU para Sistemas Embebidos 2004-2007. Fuente: linuxdevices. MMC). es decir. estos sistemas realizan un grupo de funciones previamente definidasm y una vez el sistema es dise˜ nado. no se puede cambiar su funcionalidad. Routers. Los Sistemas Embebidos son heterog´ eneos. Al incluir la mayor´ ıa de los perif´ ericos en el mismo Chip se reduce el espacio de la placa de circuito impreso (PCB) y se reduce la posibilidad de errores debido a interconexi´ on y contrario a lo que se podr´ ıa esperar. Caracter´ ısticas Los sistemas embebidos son dise˜ nados para una aplicaci´ on espec´ ıfica. el computador es encapsulado completamente por el dispositivo que el controla. A diferencia de los computadores de prop´ osito general. .

http://www.com. Este tipo de implementaci´ on es muy popular en los dispositivos de consumo masivo (Reproductores de MP3. Al momento de dise˜ nar un Sistema Embebido encontramos las siguientes opciones: Componente HW y SW Integrado en un dispositivo semiconductor (SoC): En la actualidad existen muchas compa˜ n´ ıas que fabrican procesadores de 32 bits integrados a una gran variedad de perif´ ericos. etc . o con una funcionalidad espec´ ıfica.2. http://www.4 se muestra la arquitectura t´ ıpica de un Sistema Embebido.samsung.atmel. http://www. consolas de juego.com. 1.com. conocido con el nombre de perif´ ericos y un componente software (procesador o DSP) cap´ az de ejecutar software. la parte del procesador est´ a dividida en la CPU (En algunos casos posee una cach´ e) y las unidades de Memoria.com.cirrus. esto disminuye el costo de componentes ´ rea de circuito impreso. etc). es necesario recurrir a la utilizaci´ on de dispositivos comerciales que implementen 6 http://www.2. y reduce el a Componente SW en un SoC y componente HW en una FPGA: Cuando no existen en el mercado un SoC con la cantidad de perif´ ericos requerida para una determinada aplicaci´ on.com.sharpsma. implementado ya sea en un PLD (CPLD. lo cual simplifica el dise˜ no y reduce costos.freescale. pueden tener consecuencias desastrosas. La cual integra un componente hardware. Arquitectura En la Figura 1.12 Sistemas Embebidos Figura 1. FPGA) o en un ASIC. http://www.4: Arquitectura de un Sistema Embebido Los Sitemas Embebidos tienen grandes requerimientos en t´ erminos de confiabilidad. Errores en aplicaciones como la aviaci´ on y el automovilismo. 6 . debido a los grandes niveles de producci´ on (del orden de millones de unidades) resulta m´ as econ´ omico contar con un dispositivo que integre el mayor n´ umero de funcionalidades.

lo cual disminuye la m´ axima velocidad de funcionamiento. La especificaci´ on puede ser verificada a trav´ es de una serie de pasos de an´ alisis cuyo objetivo es determinar la validez de los algor´ ıtmos seleccionados. en este punto se describe la funcionalidad y se definen las restricciones f´ ısicas. Todo modelo obtenido debe ser verificado para comprobar que cumple con las restricciones del sistema. Esta decisi´ on esta atada al nivel de producci´ on. Una vez definidas las especificaciones del sistema se debe realizar un modelamiento que permita ´ l depende el paso exisextraer de estas la funcionalidad. implementar estas funcionalidades en una FPGA. Utilizando como base la arquitectura obtenida en el paso anterior las tareas del modelo del sistemas son mapeadas dentro de los componentes. Esto es. (ver Figura 1.Carlos Iv´ an Camargo Bare˜ no 13 dicha operaci´ on.com 8 http://www. Sistemad de Eventos Discretos y Redes de Petri.gaisler. diagramas de flujos de datos. Pines de Entrada/Salida). C++. se suele utilizar lenguajes de alto nivel. Los modelos m´ as utilizados son: M´ aquinas de estados finitos. tambi´ en se recomienda la utilizaci´ on de FPGAs en sistemas que requieren la utilizaci´ on de la misma funcionalidad un gran n´ umero de veces (Puertos seriales. viabilidad comercial. ya que al utilizar los recursos l´ ogicos de la FPGA para la implementaci´ on del procesador (softcore) la longitud de los caminos de interconexi´ on entre los bloques l´ ogicos aumentan el retardo de las se˜ nales. la soluci´ on es entonces. en algunas ocaciones el perif´ erico puede relizar funciones poco com´ unes y no se proporciona comercialmente.5). como UML. Existen dos opciones a la hora de implementar las tareas o procesos: 7 http://www. y puede realizarse con varios criterios en mente: Costos. el´ ectricas y econ´ omicas. algunas partes del funcionamiento global deben tomarse de una librer´ ıa de algor´ ıtmos existentes. pero la de menor desempe˜ no.com/ 9 http://www.latticesemi. Esta especificaci´ on debe ser muy general y no deben existir dependencias (tecnol´ ogicas. Desde el punto de vista de la re-utilizaci´ on. determinar si el algoritmo siempre termina. el n´ umero y tipo de componentes y su inter-conexi´ on.3. ˜ Metodolog´ ıa de Diseno El proceso de dise˜ no de un Sistema Embebido comienza con la especificaci´ on del sistema. El modelamiento es crucial en el dise˜ no ya que de e toso de la especificaci´ on a la implementaci´ on. Una vez se ha obtenido el modelo del sistema se procede a determinar su arquitectura. asignaci´ on de funciones a los componentes de la arquitectura. por ejemplo. metodol´ ogicas) de ning´ un tipo. esto es.opencores.2. Componente SW y HW en una FPGA: Esta es tal vez la opci´ on m´ as flexible.xilinx. Es importante definir que modelo matem´ atico debe soportar el entorno de dise˜ no. los resultados satisfacen las especificaciones. Este paso no es m´ as que una exploraci´ on del espacio de dise˜ no en b´ usqueda de soluciones que permitan la implementaci´ on de una funcionalidad dada. Los procesadores softcore m´ as populares en la actualidad son: • Microblaze y Picoblaze de Xilinx7 • Leon de Gaisler Research 8 • LatticeMico32 de Lattice Semiconductors9 • OpenRisc 10 1.com . ya que al incluir una FPGA aumenta el costo global del proyecto. Cada modelo posee propiedades matem´ aticas que pueden explotarse de forma eficiente para responder preguntas sobre la funcionalidad del sistema sin llevar a cabo dispendiosas tareas de verificaci´ on. confiabilidad.com 10 http://www.

14 Sistemas Embebidos Figura 1.5: Flujo de Dise˜ no de un Sistema Embebido [13] .

Por otro lado. Otro factor considerado a la hora de realizar nuestra elecci´ on es el econ´ omico. finalmente el sistema f´ ısico debe someterse a pruebas para verificar que se cumplen con las especificaciones iniciales. 11 http://www. as Utilidad que compila la salida del compilador de C (GCC). Implementaci´ on Software: La tarea se va a ejecutar en un procesador. Este proceso recibe el nombre de planificaci´ on. ya que la mayor´ ıa de los productos comerciales son costosos y poseen soporte limitado. Herramientas Software de libre distribuci´ on GNU toolchain En el mercado existe una gran variedad de herramientas de desarrollo para Sistemas Embebidos.4. para esto las tareas hardware deben ser llevadas al dispositivo elegido (ASIC o FPGA) y se debe obtener el ejecutable de las tareas software. este proceso recibe el nombre de s´ ıntesis HW y SW respectivamente. por lo tanto se deben hacer decisiones sobre el orden de ejecuci´ on y la prioridad de estas. Implementaci´ on Hardware: La tarea se va a ejecutar en un sistema digital dedicado. esta elecci´ on se debe a que la mayor´ ıa de los productos comerciales utilizan el toolchain de GNU11 internamente y proporcionan un entorno gr´ afico para su f´ acil manejo.6).2. Las siguientes fases corresponden a la implementaci´ on del modelo. el toolchain de GNU es utilizado ampliamente en el medio de los dise˜ nadores de sistemas embebidos y se encuentra un gran soporte en m´ ultiples foros de discusi´ on (ver Figura 1. 15 Para cumplir las especificaciones del sistema algunas tareas deben ser implementadas en Hardware. 2. 1. Dada una direcci´ on y un ejecutable. el particionamiento y la planificaci´ on del sistema. un ejemplo t´ ıpico de estas tareas es la generaci´ on de bases de tiempos.Carlos Iv´ an Camargo Bare˜ no 1. El proceso de prototipado consiste en la realizaci´ on f´ ısica del sistema. Las tareas Software deben compartir los recursos que existan en el sistema (procesador y memoria). esta selecci´ on es fuertemente dependiente de restricciones econ´ omicas y temporales. modifica y extrae desde ficheros. en este estudio nos centraremos en el uso de las herramientas de libre distribuci´ on.org . La decisi´ on de que tareas se implementan en SW y que tareas se implementan en HW recibe el nombre de particionamiento. as´ ı mismo se deben sintetizar los mecanismos de comunicaci´ on. sin embargo.gnu. esto con el f´ ın de no ocupar al procesador en tareas c´ ıclicas. estas realimentaciones permiten depurar el resultado de pasos anteriores en el caso de no cumplirse con las especificaciones iniciales. usa la informaci´ on de depuraci´ on en el ejecutabe para determinar que nombre de atchivo y n´ umero de lpinea est´ a asociado con la direcci´ on dada. GNU binutils[14] Son una colecci´ on de utilidades para archivos binarios y estan compuestas por: addr2line Convierte direcciones de un programa en nombres de archivos y n´ umeros de l´ ınea. ar Esta utilidad crea. Como puede verse en el flujo de dise˜ no existen realimentaciones. En este punto del dise˜ no el modelo debe incluir informaci´ on sobre el mapeo. Un fichero es una colecci´ on de otros archivos en una estructura que hace posible obtener los archivos individuales miembros del archivo.

H8/300. GNU Compiler Collection El GNU Compiler Collection normalmente llamado GCC. size Lista el tama˜ no de las secciones y el tama˜ no total de un archivo tipo objeto. y lo almacena en e readelf Interpreta encabezados de un archivo ELF. System/390. ARM. IA-64 i. ranlib Genera un ´ ındice de contenidos de un fichero. C++. IA-32 (x86) and x86-64.6: Tendencia de utilizaci´ on de herramientas de desarrollo c++filt Este program realiza un mapeo inverso: Decodifica nombres de bajo-nivel en nombres a nivel de usuario. Objective-C++ para las arquitecturas: Alpha. Objective-C. strip Elimina todos los s´ ımbolos de un archivo tipo objeto.16 Sistemas Embebidos Figura 1.e. objcopy utiliza la librer´ ıa GNU BFD para leer y escribir el archivo tipo objeto. Fortran. re-localiza sus datos y los relaciona con ´ ltimo paso en la construcci´ referencias. de tal forma que el linker pueda mantener estas funciones sobrecargadas (overloaded) “from clashing”. Blackfin. System/370. Java. strings Imprime las secuencias de caracteres imprimibles de almenos 4 caracteres de longitud. ´ l. objdump Despliega informaci´ on sobre archivos tipo objeto. Es el compilador standard para el software libre de los sistemas operativos basados en Unix y algunos propietarios como Mac OS de Apple. objcopy Copia los contenidos de un archivo tipo objeto a otro. Soporta los siguientes lenguajes: ADA. es un grupo de compiladores de lenguajes de programaci´ on producido por el proyecto GNU. Atmel AVR. C. gasp GNU Assembler Macro Preprocessor ld El linker GNU combina un n´ umero de objetos y ficheros. nm Realiza un listado de s´ ımbolos de archivos tipo objeto. the ”Itanium”. Normalmente el u on de un nuevo programa compilado es el llamado a ld. . Permite esccribibr el archivo destino en un formato diferente al del archivo fuente.

sparc. GNU Debugger El depurador oficial de GNU (GDB). es mucho m´ as peque˜ na que glibc.Carlos Iv´ an Camargo Bare˜ no 17 Motorola 68000. PDP-11. Uno de los inconvenientes al trabajar con esta librer´ ıa en sistemas embebidos es que genera ejecutables de mayor tama˜ no que los generados a partir de otras librer´ ıas. diet libc16 Es una versi´ on de libc optimizada en tama˜ no. hppa. world!” ocupa menos de 30k en un entorno basado en newlib. mips. arm. sin embargo. Por otro lado. Como puede verse GCC soporta una gran cantidad de lenguajes de programaci´ on.com/newlib/ 16 http://www.redhat. el tiempo requerido para realizar aplicaciones utilizando C o C++ disminuye. permitiendo de esta forma tener bajos tiempos time to market y reducir de forma considerable el costo del desarrollo. s390. SuperH. MIPS. adem´ as. esto lo hace una herramienta Universal para el desarrollo de sistemas embebidos. Librer´ ıas C Adicionalmente es necesario contar con una librer´ ıa que proporcione las librer´ ıas standard de C: stdio. ppc y x86 64. Motorola 88000. ia64. Una caracter´ ıstica de resaltar de GCC es la gran cantidad de plataformas que soporta. la disponibilidad de librer´ ıas de m´ ultiples prop´ ositos reduce a´ un m´ as los tiempos de desarrollo. en el presente estudio solo lo utilizaremos como herramienta de compilaci´ on para C y C++.org/ 15 http://sources. permite establecer sesiones remotas utilizando el puerto serie o TCP/IP. stdlib. El t´ ıpico “Hello. lo cual no ocurre al utilizar lenguaje ensamblador. 12 Esto recibe el nombre de re-utilizaci´ on de c´ odigo 13 http://www. PowerPC. puede ocupar 380k [?]. MorphoSys. GDB permite al usuario monitorear y modificar las variables internas del programa y hacer llamado a funciones de forma independiente a la ejecuci´ on normal del mismo. VAX. puede ser utilizada para crear ejecutables est´ aticamente enlazados para linux en plataformas alpha. ya que no es necesario aprender las instrucciones en assembler de una plataforma determinada. SPARC. Adem´ as. mientras que en uno basado en glibc. i386. sparc64. math.de/dietlibc/ . Renesas R8C/M16C/M32C. las m´ as utilizadas en sistemas embebidos son: glibc13 Es la librer´ ıa C oficial del proyecto GNU. uClibc14 Es una librer´ ıa dise˜ nada especialmente para sistemas embebidos. newlib15 Al igual que uClibc.gnu. Aunque GDB no posee una interfaz gr´ afica. se han desarrollado varios front-ends como DDD o GDB/Insight. PA-RISC.fefe. lo cual no la hace muy atractiva para este tipo de aplicaciones. el c´ odigo escrito en una plataforma (en un lenguaje de alto nivel) puede ser implementado en otra sin mayores cambios. esto elimina la dependencia entre el c´ odigo fuente y el HW12 . es un depurador que al igual que GCC tiene soporte para m´ ultiples lenguajes y plataformas.org/software/libc/ 14 http://uclibc. est´ a dise˜ nada para sistemas embebidos.

esto se realiza a trav´ es de un link de enlazado el cual define de forma expl´ ıcita su localizaci´ on. Escritura del c´ odigo fuente: Creaci´ on del c´ odigo fuente en cualquier editor de archivos de texto. ´ nicamente 4.7: Flujo de dise˜ no SW utilizando la cadena de herramientas GNU A continuaci´ on se realiza una breve descripci´ on de los pasos necesarios para generar un ejecutable para un sistema embebido: 1. Extracci´ on del archivo de programaci´ on En algunas aplicaciones es necesario extraer u las secciones que residen en los medios de almacenamiento no vol´ atil y eliminar las dem´ as secciones . 3. Enlazado: En esta etapa se realizan dos tareas: a) Se enlazan los archivos tipo objeto del proyecto.7 se ilustra la secuencia de pasos que se realizan desde la creaci´ on de un archivo de texto que posee el c´ odigo fuente de una aplicaci´ on hasta su implementaci´ on en la tarjeta de desarrollo. como por ejemplo el printf en el archivo stdio. Compilaci´ on: Utilizando el compilador gcc se compila el c´ odigo fuente. 2. junto con las librer´ ıas.h. b) Se define la posici´ ones f´ ısicas de las secciones del ejecutable tipo ELF. Como resultado de este paso se obtiene un archivo tipo objeto.18 ˜ software Flujo de diseno Sistemas Embebidos En la figura 1. vala la pena mencionar que en este punto el compilador solo busca en los encabezados (headers) de las librer´ ıas la definici´ on de una determinada funci´ on. Figura 1. si una determinada funci´ on no es edfinida por ninguna de las librer´ ıas pasadas como par´ ametro al linker. este generar´ a un error y no se generar´ a el ejecutable.

es necesario escribir una serie de comandos cada vez que se realiza un cambio en el c´ odigo fuente. la cual recibe como entrada un archivo que normalmente recibe el nombre de Makefile o makefile. Dependiendo de la plataforma existen varios m´ etodos para descargar el archivo de programaci´ on a la memoria de la plataforma de desarrollo: a) Utilizando un loader: El loader es una aplicaci´ on que reside en un medio de almacenamiento no vol´ atil y permite la descarga de archivos utilizando el puerto serie o una interfaz de red. o debug io . Un ejemplo de este tipo de archivo se muestra a continuaci´ on: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 SHELL = / b i n / s h b a s e t o o l s d i r = / home / a t 9 1 / gcc − 3. permite generar archivos en la mayor´ ıa de los formatos soportados por los programadores de memorias y procesadores. c f g $ { ASFILES } $ { OBJS } $ {LDFLAGS} \ \ \ . o at91rm9200 lowlevel . lo cual resulta poco pr´ actico durante la etapa de desarrollo. como por ejemplo S19 e Intel Hex. y de esta forma. Para realizar este proceso de forma autom´ atica.Carlos Iv´ an Camargo Bare˜ no 19 del ejecutable. Esto se realiza con la herramiento objcopy. la cual. 5 CC AS LD OBJCOPY = = = = arm− s o f t f l o a t −l i n u x −gnu−g c c arm− s o f t f l o a t −l i n u x −gnu−a s arm− s o f t f l o a t −l i n u x −gnu−l d arm− s o f t f l o a t −l i n u x −gnu−o b j c o p y CFLAGS =−mcpu= a r m 9 2 0 t − I . depuraci´ on. Depuraci´ on Una vez se descarga la aplicaci´ on a la plataforma es necesario someterla a una serie de pruebas con el f´ ın de probar su correcto funcionamiento. La herramienta make ejecuta los comandos necesarios para realizar la compilaci´ on.o ASFILES = a r m i n i t . se cre´ o la herramienta make. o programaci´ on. −Wall LDFLAGS =−L$ { l i b d i r } − l g c c OBJS = \ main . indicados en el archivo Makefile o makefile.5 − g l i b c − 2 . acceder a las memorias de la plataforma y ejecutar un programa residente en una determinada posici´ on de memoria. b) Utilizando el puerto JTAG: El puerto JTAG (Joint Test Action Group) proporciona una interfaz capaz de controlar los registros internos del procesador. 4 . Debido a que las herramientas GNU solo poseen entrada por consola de comandos. 6. o p string .4. Esto se puede realizar con el depurador GNU (GDB) y una interfaz de comunicaci´ on que puede ser un puerto serie o un adaptador de red. 3 . Make Como vimoas anteriormente es necesario realizar una serie de pasos para poder descargar una aplicaci´ on a una plataforma embebida. 5. 6 / arm− s o f t f l o a t −l i n u x −gnu b i n d i r = ${ b a s e t o o l s d i r } / b i n l i b d i r = $ { b a s e t o o l s d i r } / l i b / g c c / arm− s o f t f l o a t −l i n u x −gnu / 3 . o LIBS=$ { l i b d i r } / all : hello world h e l l o w o r l d : $ { OBJS } $ { ASFILES } $ { LIBS } $ {LD} −e 0 −o h e l l o w o r l d . Descarga del programa a la plataforma. e l f −T l i n k e r .

27 y 31 aparecen unas etiquetas de la forma: nombre: esta es la forma de definir reglas y permiten ejecutar de forma independiente el conjunto de instrucciones asociadas a ellas. arm init. − d I %. −Wall −c −o d e b u g i o . o a r m i n i t . en las l´ ıneas 7 . de aqui la importancia de definir bien la variable de entorno CC cuando trabajamos con compiladores cruzados17 . c = $ (CC) $ ( CPPFLAGS ) $ (TARGET ARCH) −E −Wp. at91rm9200 lowlevel.o .c.c . debe realizar las acciones necesarias para generar $OBJS $ASFILES $LIBS. Las l´ ıneas 12 y 13 definen dos variables especiales que se pasan directamente al compilador de C (CFLAGS) y al liniker (LDFLAGS) En las l´ ıneas 25. por ejemplo.o.o. c $ (LDFLAGS) −o $@ Lo cual le indica a la herramienta make que para generar un archivo . make tiene predefinidas una serie de reglas para compilar los archivos .c la regla es de la forma: .pp : %. −Wall −c −o main .c: $ (CC) $ ( CFLAGS ) $@ .a. esto es: main. por ejemplo. at91rm9200 lowlevel. c arm− s o f t f l o a t −l i n u x −gnu−g c c −mcpu= a r m 9 2 0 t − I .c FORCE $ ( PREPROCESS . e l f h e l l o w o r l d . o main .o * hello world. −Wall −c −o p s t r i n g . en este caso: main. de assembler (AS).o.o. Hasta este punto al ejecutar el comando: make hello world.20 29 30 31 32 33 34 35 36 37 $ {OBJCOPY} −O b i n a r y h e l l o w o r l d . debug io. si se ejecuta el comando: make clean make ejecutar´ a: rm -f *. en la l´ ınea 21 se definen los archivos en assembler que contiene el proyecto.o. −C.* Observemos los comandos asociados a la etiqueta hello world: En la misma l´ ınea aparecen $OBJS $ASFILES $LIBS.c .10 se definen las herramientas de compilaci´ on a utilizar. b i n clean : rm − f ∗ .o: $ (CC) $ ( CFLAGS ) −c $< .o a partir de uno . o p s t r i n g arm− s o f t f l o a t −l i n u x −gnu−a s −o a r m i n i t .o y p string.o y libgcc. p string. debug io. estos reciben el nombre de dependencias y le indican a la herramienta make que antes de ejecutar los comandos asociados a este label.o. c ) $< > $@ Sistemas Embebidos En las l´ ıneas 3-5 se definen algunas variables globales que ser´ an utilizadas a lo largo del archivo. para este caso arm init. el linker (LD) y la utilidad objcopy.c es necesario ejecutar $(CC) $(CFLAGS) -c $¡. o d e b u g i o arm− s o f t f l o a t −l i n u x −gnu−g c c −mcpu= a r m 9 2 0 t − I .c En las l´ ıneas 28 se realiza el proceso de enlazado. al linker se le pasan los par´ ametros: 17 Un compilador cruzado genera c´ odigo para una plataforma diferente en la que se est´ a ejecutando. A partir de la l´ ınea 15 se definen los objetos que forman parte del proyecto. make realizar´ ıa las siguientes operaciones: arm− s o f t f l o a t −l i n u x −gnu−g c c −mcpu= a r m 9 2 0 t − I .o.o. −dD. ∗ PREPROCESS . espec´ ıficamente los compiladores de C (CC). −Wall −c −o a t 9 1 r m 9 2 0 0 l o w l e v e l at91rm9200 lowlevel arm− s o f t f l o a t −l i n u x −gnu−g c c −mcpu= a r m 9 2 0 t − I . genera ejecutables para ARM pero se ejecuta en un x86 . s . o ∗ ˜ h e l l o w o r l d .

bss Datos no inicializados.elf: Nombre del archivo de salida hello world -T linker. proporcionando informaci´ on de la forma de acceder a las secciones [15]. c´ odigo ejecutable espec´ ıfico o informaci´ on de enlazado din´ amico debe utilizar link view.dynamic Informaci´ on sobre enlace din´ amico . . El encabezado describe el layout del archivo. la localizaci´ on de los segmentos text o data debe utilizar execution view. tablas de strings.8 est´ a compuesto por varias secciones (link view) o segmentos (execution view). Las secciones m´ as importantes son las siguientes: .data y .Carlos Iv´ an Camargo Bare˜ no -e 0: Punto de entrada .dynstr Strings necesarios para el enlacedin´ amico . El formato ELF El formato ELF (Executable and Linkable Format) Es un st´ andard para objetos. (RAM) . Figura 1. librer´ ıas y ejecutables y es el formato que genera las herramientas GNU. tablas de s´ ımbolos. (RAM) .cfg: Utilice el archivo de enlace linker. Si un programador est´ a interesado en obtener informaci´ on de secciones sobre tablas de s´ ımbolos. Esto se explicar´ a con mayor detalle m´ as adelante. datos. .8: Formato ELF Las secciones pueden almacenar c´ odigo ejecutable. informaci´ on de enlazado din´ amico.comentarios. y notas. Pero si busca informaci´ on sobre segmentos.comment Informaci´ on de la versi´ on.cfg $ASFILES $OBJS $LDFLAGS: Lista de objetos y librer´ ıas para crear el ejecutable. como por ejemplo. datos de depuraci´ on.debug Informaci´ on para depuraci´ on simb´ olica. -o hello world. Como puede verse en la figura 1.data1 Datos inicializados. 21 En la l´ ınea 29 se utiliza la herramienta objcopy para generar un archivo binario (-O binary) con la informaci´ on necesaria para cargar en una memoria no vol´ atil. utilice 0 como s´ ımbolo para el inicio de ejecuci´ on.

.line Informaci´ on de n´ umero de l´ ınea para depuraci´ on simb´ olica. G ( g r o u p ) . rodata PROGBITS 00000000 0000 d4 000010 00 A 0 0 4 [ 6 ] . global = i.symtab Tabla de s´ ımbolos. int global 1 = 1. escribamos una aplicaci´ on sencilla: # i n c l u d e < s t d i o . a t t r i b u t e s ARM ATTRIBUTES 00000000 000131 00002 e 00 0 0 1 [ 8] .c Examinemos que tipo de secciones tiene este ejecutable arm-none-eabi-readelf -S hello. } Sistemas Embebidos / / V a r i a b l e no i n i c i a l i z a d a / / Variable i n i c i a l i z a d a / / Caracteres constantes Generemos el objeto compil´ andolo con el siguiente comando: arm-none-eabi-gcc -c hello. data PROGBITS 00000000 0000 d0 000004 00 WA 0 0 4 [ 4] . symtab SYMTAB 00000000 000368 0000 f 0 10 10 11 4 [10] .rodata y .rodta1 Datos de solo-lectura (ROM) . . i ++) { printf ( ” Printing % d\n ” .fini C´ odigo de terminaci´ on de proceso. S ( s t r i n g s ) I ( i n f o ) . i n t main ( v o i d ) { int i . t e x t REL 00000000 000484 000020 08 9 1 4 [ 3] . x ( unknown ) O ( e x t r a OS p r o c e s s i n g r e q u i r e d ) o ( OS s p e c i f i c ) . por esta raz´ on se marca como ejecutable “X” en la columna Flg. .shstrtab Nombres de secciones. M ( merge ) . Es posible ver las instrucciones que se ejecutan en esta secci´ on: . . s h s t r t a b STRTAB 00000000 00015 f 000051 00 0 0 1 [ 9] .text Instrucciones ejecutables (ROM) Para aclarar un poco este concepto. comment PROGBITS 00000000 0000 e4 00004 d 00 0 0 1 [ 7 ] . A ( a l l o c ) . X ( e x e c u t e ) . . bss NOBITS 00000000 0000 d4 000000 00 WA 0 0 1 [ 5] . } return 0. p ( p r o c e s s o r s p e c i f i c ) La secci´ on .dynsym Tabla de s´ ımbolos utilizada para enlace din´ amico. t e x t PROGBITS 00000000 000034 00009 c 00 AX 0 0 4 [ 2] .22 . i < 10. int j = 2.o S e c t i o n Headers : [ Nr ] Name Type Addr Off Size ES F l g Lk I n f Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] . j = j + 1.text. h> int global . s t r t a b STRTAB 00000000 000458 00002 b 00 0 0 1 Key t o F l a g s : W ( w r i t e ) . i ∗ j ) . r e l . . global 1 = i+j . L ( l i n k o r d e r ) . f o r ( i = 0 .ARM. como se dijo anteriormente contiene las instrucciones ejecutables.init C´ odigo de inicializaci´ on de proceso.

[ fp . # 7 2 ] r3 . 0 x0 r3 . # − 12] r3 . r 3 sp . t e x t +0 x98> . 0 x2 r3 .data hello. # − 8] r3 . [ fp . en la l´ ınea 0c: 0c : 10: e3a03002 e50b3008 mov str r3 .text observamos que esta variable es asignada en tiempo de ejecuci´ on. #1 r3 . 90 < .bss hello . esto se debe a que la informaci´ (1) y no muestra informaci´ oo on est´ a en el stack del proceso. l r } fp . # − 8] se ve la asignaci´ on de esta variable.o 00000000 <main > : 0: e92d4800 4: e28db004 8: e24dd008 c: e3a03002 10: e50b3008 14: e3a03000 18: e50b300c 1c : ea000013 20: e51b200c 24: e51b3008 28: e0030392 2c : e59f005c 30: e1a01003 34: ebfffffe 38: e51b3008 3c : e2833001 40: e50b3008 44: e59f2048 48: e51b300c 4c : e5823000 50: e51b200c 54: e51b3008 58: e0822003 5c : e59f3034 60: e5832000 64: e51b300c 68: e2833001 6c : e50b300c 70: e51b300c 74: e3530009 78: daffffe8 7c : e3a03000 80: e1a00003 84: e24bd004 88: e8bd4800 8c : e12fff1e stmdb add sub mov str mov str b ldr ldr mul ldr mov bl ldr add str ldr ldr str ldr ldr add ldr str ldr add str ldr cmp ble mov mov sub ldmia bx s p ! . t e x t +0 x90> .data mantiene las variables inicializadas. 0 x1 .data contiene u on de la variable global 1 ´ n acerca de la variable j. [ fp . la secci´ on . [ fp . # − 8] r2 . # − 12] 70 <main +0 x70> r2 . # − 8] r3 . [ pc . 0 x2 r3 . r2 . sp . # − 12] r3 . 0 x8 . [ fp . r 3 r0 . #2 . r3 .bss mantiene la informaci´ on de las variables no incializadas: arm-none-eabi-objdump -d -j . #9 . l r } lr 23 . #1 r3 .o 00000000 < g l o b a l 1 > : 0: 01 00 00 00 ´ nicamente el valor de inicializaci´ Como vemos. fp . [ fp . # 5 2 ] r2 . r 3 r3 . 0 x4 La secci´ on . 0 x4 . [ pc . #4 s p ! . y contiene: arm-none-eabi-objdump -d -j . sp . # − 12] r3 . [ fp . La secci´ on . [ fp . #4 sp . 98 < . [ pc . { fp . # − 12] r3 . [ fp . [ fp . 0 x9 20 <main +0 x20> r3 . { fp . Si observamos el contenido de la secci´ on . t e x t +0 x94> . 0 x1 .text hello. [ r 2 ] r2 . r3 . #2 . [ fp . #0 . r2 . # − 12] r3 . 94 < . # − 8] r2 . [ fp . 0 x0 r0 . r 3 0 <p r i n t f > r3 . [ r 3 ] r3 . # − 8] r3 . # 9 2 ] r1 . [ fp . #8 r3 .Carlos Iv´ an Camargo Bare˜ no arm-none-eabi-objdump -d -j . # − 12] r3 . #0 .

etc . s ) ∗/ / ∗ s p e c i f y t h e memory a r e a s ∗ / MEMORY { f l a s h : ORIGIN = 0 . De esta forma podemos ajustar el ejecutable a plataformas con diferentes configuraciones de memoria. r o d a t a ∗) /∗ a l l . . LENGTH = 64K } /∗ d e f i n e a g l o b a l symbol s t a c k e n d = 0x20FFFC . ya que el sistema operativo se encarga de guardar las secciones en el lugar indicado.rodata mantiene los datos que no cambian durante la ejecuci´ on del programa. el linker es el encargado de agrupar todos los archivos objeto . Linker Script Como vimos anteriormente. g l u e 7 t s e c t i o n s ( no i d e a what t h e s e a r e ) ∗ / etext = . sin embargo. glue 7t ) / ∗ a l l . ) ∗/ ∗(. GCC: ( CodeS | Observamos que en el archivo se almacena la cadena de caracteres Printing %d n la cual no se modifica durante la ejecuci´ on del programa. d a t a s e c t i o n s t h a t go i n t o RAM ∗/ . Printing % d.| | . de solo lectura. t e x t s e c t i o n s ( code ) ∗/ ∗(. = 0. stack end ∗/ / ∗ FLASH EPROM / ∗ s t a t i c RAM a r e a ∗/ ∗/ / ∗ now d e f i n e t h e o u t p u t s e c t i o n s ∗/ SECTIONS { . . rodata ) /∗ a l l . text ) /∗ a l l . se inicializadan en cero. ) ∗/ ∗ ( . text : / ∗ c o l l e c t a l l s e c t i o n s t h a t s h o u l d go i n t o FLASH a f t e r s t a r t u p ∗/ { ∗(. si examinamos esta secci´ on obtenemos: hexdump -C hello. La secci´ on . A continuaci´ on se muestra un ejemplo de este archivo: /∗ i d e n t i f y the Entry Point ENTRY( v e c r e s e t ) ( vec res et is defined in f i l e crt . Cuando se dispone de un sistema operativo como Linux no es necesario definir este archivo. es necesario tenerlo presente ya que como veremos m´ as adelante existe un momento en el que el sistema operativo no ha sido cargado en la plataforma y las aplicaciones que se ejecuten deben proporcionar esta informaci´ on. data : /∗ c o l l e c t a l l i n i t i a l i z e d . /∗ s e t locati on counter to address zero ∗/ . LENGTH = 256K ram : ORIGIN = 0 x00200000 .o. rodata s e c t i o n s ( constants .Esto brinda un grado mayor de flexibilidaad de la cadena de herramientas GNU.24 000145 c4 < g l o b a l > : 145 c4 : 00000000 Sistemas Embebidos En Linux todas las variables no inicializadas. .. strings . . glue 7 s e c t i o n s ( no i d e a what t h e s e a r e ) ∗ / ∗(. /∗ d e f i n e a g l o b a l symbol e t e x t j u s t a f t e r t h e l a s t code b y t e ∗/ } >f l a s h / ∗ p u t a l l t h e a b o v e i n t o FLASH ∗ / . . . glue 7 ) /∗ a l l . strings .o — grep -i 000000d0 (la secci´ on . y las librer´ ıas necesarias para crear el ejecutable. por medio de un archivo de enlace linker script. rodata∗ s e c t i o n s ( constants .rodata comienza en la posici´ on de memoria 0xd4) 000000 d0 000000 e0 01 00 00 00 50 72 69 6 e 00 00 00 00 00 47 43 43 74 69 6 e 67 20 25 64 0 a 3 a 20 28 43 6 f 64 65 53 | . este linker permite definir donde ser´ an ubicados los diferentes segmentos del archivo ELF. . es decir. etc .

b s s s e c t i o n s t h a t go i n t o RAM /∗ /∗ /∗ /∗ /∗ ∗/ /∗ /∗ /∗ /∗ 25 c r e a t e a g l o b a l symbol marking t h e s t a r t of t h e .Carlos Iv´ an Camargo Bare˜ no { data = . } >ram AT > f l a s h ∗/ . los perif´ ericos incluidos en cada SoC buscan minimizar el n´ umero de componentes externos. . Dentro de los perif´ ericos encontramos: Controlador para memorias: NAND flash. Obviamente una vez finalizada la etapa de desarrollo las aplicaciones deben ser almacenadas en memorias no vol´ atiles. y de esta forma reducir los costos.rodata (datos de solo lectura) se almacenan en una memoria no vol´ atil la flash.4). data ) edata = . d a t a s e c t i o n ∗/ p u t a l l t h e a b o v e i n t o RAM ( b u t l o a d t h e LMA i n i t i a l i z e r c o p y i n t o FLASH ) d e f i n e a g l o b a l symbol marking t h e s t a r t o f t h e .text (c´ odigo ejecutable) y . ya que el acceso a las memorias no vol´ atiles son m´ as lentas y tienen ciclos de lectura/escritura finitos. En este trabajo se utiliza una arquitectura compuesta por el SoC de Atmel el AT91RM9200 y una FPGA. las secciones . Asistentes Digitales.5. bss s e c t i o n ∗/ a l l . . bss : { bss start = . por lo que es necesario que la aplicaci´ on sea cargada por completo en la RAM.2. bss s e c t i o n s ∗/ p u t a l l t h e a b o v e i n RAM ( i t w i l l be c l e a r e d i n t h e s t a r t u p c o d e ∗ / a d v a n c e l o c a t i o n c o u n t e r t o t h e n e x t 32− b i t b o u n d a r y ∗ / d e f i n e a g l o b a l s y m b o l m a r k i n g t h e end o f t h e .data (variables inicializadas) y . espec´ ıficamente del AT91RM920 de Atmel. En este caso. . data s e c t i o n s ∗/ d e f i n e a g l o b a l s y m b o l m a r k i n g t h e end o f t h e . teniendo en cuenta que esta pataforma tiene fines acad´ emicos es muy importante tener la posibilidad de crear tareas HW en un Dispositivo L´ ogico Programable (PLD).0 host. SoC La Figura 1. = ALIGN ( 4 ) . En la actualidad podemos encontrar una gran variedad de SoC dise˜ perif´ ericos asociados a e nados para diferentes aplicaciones: Multimedia. Algunos desarrolladores prefieren almacenar y ejecutar sus aplicaciones en las memorias vol´ atiles durante la etapa de desarrollo. Comunicaciones. debido a que la programaci´ on de las memorias no vol´ atiles toman mucho m´ as tiempo. / ∗ d e f i n e a g l o b a l s y m b o l m a r k i n g t h e end o f a p p l i c a t i o n RAM ∗ / / ∗ c o l l e c t a l l u n i n i t i a l i z e d . . SD/MMC Puerto USB 2. ∗ ( .bss (variables no inicializadas) se almacenar´ an en la memoria vol´ atil RAM. data s e c t i o n ∗/ a l l . SDRAM. A continuacion se definen las secciones y el lugar donde ser´ an almacenadas. Cuando el sistema sea energizado el procesador ejecutar´ a el c´ odigo almacenado en su memoria no vol´ atil. . } end = . Herramientas hardware Como se mencion´ o anteriormente existen varias alternativas al momento de implementar un Sistema Embebido (ver Figura 1. b s s s e c t i o n ∗ / En las primeras l´ ıneas del archivo aparece la declaraci´ on de las memorias de la plataforma. ∗(. En algunos procesadores (como el AT91RM9200) no se dispone de una memoria no vol´ atil.. En este diagrama podemos observar el n´ ucleo central un procesador ARM920T de 180MHz y los ´ l. Las secciones . DataFlash.9 muestra la arquitectura de un SoC actual. bss ) } >ram . en este ejemplo tenemos una memoria RAM de 64kB que comienza en la posici´ on de memoria 0x00200000 y una memoria flash de 256k que comienza en la posici´ on 0x0. Este SoC en particular fu´ e uno de los primeros que dise˜ no ATMEL y est´ a enfocado a tareas en las que se requiere una conexi´ on de red. bss end = . 1.

9: SoC AT91RM9200 fuente: Hoja de Especificaciones AT91RM9200. 2 puertos seriales (RS232). Interf´ az de Bus externo (EBI). indicando los que fueron utilizados en la plataforma de desarrollo.0 4 Puertos SPI. Soporte JTAG. los cuales facilitan la programaci´ on de aplicaciones y la depuraci´ on de las mismas.26 Puerto I2C Interfaz Ethernet 10/100. Sistemas Embebidos Figura 1. Interfaz high speed USB 2. A continuaci´ on se realizar´ a una descripci´ on de los diferentes perif´ ericos que se encuentran disponibles en este SoC. . ATMEL Existen una serie de perif´ ericos que son indispensables en todo Sistema Embebido.

el transistor suministra la carga y el condensador almacena el estado de cada celda. esta carga en el condensador desaparece con el tiempo. raz´ on por la cual es necesario recargar estos condensadores peri´ odicamente. Micron Technology Un ejemplo simplificado de una operaci´ on de lectura es el siguiente: Una posici´ on de memoria se determina colocando la direcci´ on de la fila y la de la columna en las l´ ıneas de direcci´ on de fila y columna respectivamente. . La figura 1. un tiempo despu´ es el dato almacenado aparecer´ a en el bus de datos. Despu´ es de un retardo de tiempo predeterminado para permitir que el circuito de la SDRAM capture la direcci´ on de la fila. El tipo de memoria m´ as utilizado en los sistemas embebidos actuales es la memoria SDRAM. solo se recargan los condensadores para mantener la informaci´ on. la cual est´ a organizada como una matriz de celdas. las memorias vol´ atiles son utilizadas como memoria de acceso aleatorio (RAM) gracias a su bajo tiempo de accesso y al ilimitado n´ umero de ciclos de lectura/escritura. El perif´ erico que controla la SDRAM est´ a encargado de garantizar los ciclos de refresco de acuerdo con los requerimientos de la SDRAM [16].10).10: Diagrama de Bloques de una memoria SDRAM fuente: Hoja de Especificaciones MT48LC16M16. Un ciclo de refresco es un ciclo especial en el que no se escribe ni se lee informaci´ on. Una celda de memoria SDRAM esta compuesta por un transistor y un condensador. el procesador coloca la direcci´ on de la columna en el bus de direcciones y activa la se˜ nal CAS (Column Access Strobe). Debido a esto la mayor´ ıa de los SoC incluyen perif´ ericos dedicados a controlar diferentes tipos de memoria.11 muestra el diagrama de conexiones de una memoria de 32MB utilizada en la plataforma ECBOT. con un n´ umero de bits dedicados al direccionamiento de las filas y un n´ umero dedicado a direccionar columnas (ver Figura 1. El SoC AT91RM9200 posee un perif´ erico que es cap´ az de controlar la memoria SDRAM sin necesidad de l´ ogica adicional.Carlos Iv´ an Camargo Bare˜ no Memorias Vol´ atiles 27 Como se estudi´ o anteriormente existen secciones del ejecutable que deben ser almacenadas en memorias vol´ atiles o en memorias no vol´ atiles. El procesador coloca la direcci´ on de la fila en el bus de direcciones y despu´ es activa la se˜ nal RAS (Row Access Strobe). Figura 1. este proceso recibe el nombre de Refresco.

las dos poseen la capacidad de ser escritas y borradas utilizando control de software. Debido a que el borrado y escritura de una memoria ROM se puede realizar utilizando el control software (ver Figura 1. debido a que los tiempos de escritura y lectura son muy grandes se utilizan como memorias ROM. ideales para aplicaciones donde se requiera almacenamiento de informaci´ on.11: Diagrama de conexiones de la memoria SDRAM de la plataforma ECBOT Memorias No Vol´ atiles La memorias no vol´ atiles almacenan por largos per´ ıodos de tiempo informaci´ on necesaria para la operaci´ on de un Sistema Embebido. Se accede a la informaci´ on utilizando bloques (m´ as peque˜ nos que los bloques NOR). para cambiar un bit de 1 a 0 es necesario borrar una serie de unidades de borrado que reciben el nombre de bloques.12) no es necesario contar con un perif´ erico especializado para su manejo. Una desventaja de estas memorias es que los tiempos de escritura y borrado son muy largos en comparaci´ on con los requeridos por las memorias RAM. A diferencia de las flash tipo NOR. sin embargo. lo que permite reducir el tiempo de borrado de la memoria. Adicionalmente las memorias NAND consumen menos potencia que las memorias NAND. Las memorias NOR son utilizadas en aplicaciones donde se necesiten altas velocidades de lectura y baja densidad. con lo que no es necesario utilizar programadores externos y puedens er modificadas una vez instaladas en el circuito integrado. pueden ser vistos como discos duros de estado s´ olido. Los ciclos de escritura de las flash NAND son mayores en un orden de magnitud que los de las memorias NOR. por esta raz´ on este tipo de memorias son utilizadas en casi todos los dispositivos de almacenamiento modernos como las memorias SD y las memorias USB. los dispositivos NAND se acceden de forma serial utilizando interfaces complejas. existen dos tipos de memoria las memorias NOR y las NAND. . su operaci´ on se asemeja a un disco duro tradicional. con lo que es posible acceder de forma f´ acil a cada byte almacenado en ella. los cuales integran una memoria NAND con un circuito encargado de controlarlas e implementar el protocolo de comunicaci´ on.28 Sistemas Embebidos Figura 1. Las memorias NAND disminuyen los tiempos de escritura y aumentan la capacidad de almacenamiento. Las memorias NOR poseen buses de datos y direcci´ on. Los bits datos pueden ser cambiados de 0 a 1 utilizando el control de software un byte a la vez.

esto es necesario ya que las celdas de memoria pueden da˜ narse de forma espont´ anea durante la operaci´ on normal.4GBits 24MB/s 8 MB/s 2ms Acceso Indirecto Almacenamiento MLC NAND 1Gbits .16GBits 18.1: Cuadro de comparaci´ on de las memorias flash NAND y NOR El AT91RM9200 tiene un perif´ erico que puede manejar una memoria flash NAND. La tabla 1. En su lugar se utiliz´ o una memoria DataFlash de Atmel. Este algor´ ıtmo es capaz de detectar bloques defectu´ n comparando la informaci´ osos en la fase de programac´ ıo on almacenada con la que debe ser almacenada (verificaci´ on).47MB/s 900ms Acceso Aleatorio Solo lectura Densidad Velocidad de Lectura Velocidad de escritura Tiempo de borrado Interfaz Aplicaci´ on Cuadro 1. El algoritmo de ECC (Error-Correcting Code) debe ser cap´ az de corregir errores tan peque˜ nos como un bit de cada 2048 bits.1 resume las principales caracter´ ısticas de los diferentes tipos de memoria flash. si encuentra un error marca el bloque como defectuoso y utiliza un bloque sin defactos para almacenar la informaci´ on.1GBit 103MB/s 0. hasta 22 bits de cada 2048. o puede hacerse un chequeo en cada inicializaci´ on del sistema de toda la RAM para actualizar esta lista de sectores defectuosos.Carlos Iv´ an Camargo Bare˜ no 29 Figura 1. SLC NAND 512Mbits . no se utiliz´ o en esta aplicaci´ on.6MB/s 2. permite una velocidad de lectura de . este dispositivo b´ asicamente es una memoria flash tipo NOR con una interfaz SPI. Debido a esto se debe tener un determinado n´ umero de bloques que se encargen de almacenar tablas de mapeo para manejar los bloques defectuosos.4MB/s 2ms Acceso Indirecto Almacenamiento MLC NOR 16MBits . sin embargo.12: Ciclos de escritura y borrado de una memoria flash NOR Un problema al momento de trabajar con las memorias tipo NAND es que requieren el uso de un manejo de bloques defectuosos.

una vez lo encuentra. en la etapa de producci´ on graban en las memorias no vol´ atiles las apliacaciones definitivas. El AT91RM9200 posee una memoria interna SRAM de 16 kbytes. Un programa de inicializaci´ on (boot program) contenido en una peque˜ na ROM del SoC se encarga de configurar.14).15 muestra el diagrama de flujo del programa de inicializaci´ on del SoC AT91RM9200 El programa descargado a la memoria SRAM interna debe ser capaz de programar una memoria no vol´ atil (La Flash DataFlash SPI para el ECBOT). esto es muy conveniente cuando se trabaja con grandes cantidades ya que ahorra tiempo en el montaje de los dispositivos. estos vectores deben ser instrucciones LDR o Bbranch. debe proporcionar un canal de comunicaci´ on que permita descargar ejecutables m´ as grandes. No sobra mencionar que este ejecutable debe estar enlazado de tal forma que todas las secciones se encuentren en el espacio de la memoria RAM interna (0x0 despu´ es del REMAP 18 ). Algunos fabricantes. lo copia a la memoria RAM interna y lo ejecuta desde all´ ı. Quedando en espera de la descarga de una aplicaci´ on a trav´ es del protocolo DFU (Digital Firmware Upgrade) por el puerto USB o con el protocolo XMODEM en el puerto DBGU.13: Conexiones de la memoria DataFlash de la plataforma ECBOT M´ etodos de arranque Como es obvio todo SoC debe ser programado para que pueda ejecutar una determinada tarea. y soldan en la placa de circuito impreso los dispoditivos programados. El programa de inicializaci´ on del AT91RM9200 (se ejecuta si el pin BMS se encuentra en un valor l´ ogico alto) busca una secuencia de 8 vectores de excepci´ on ARM v´ alidos en la DataFlash conectada al puerto SPI. Si no se encuentra la secuencia de vectores ARM. Figura 1. Despu´ es del reset esta memoria esta disponible en la posici´ on 0x200000. el c´ odigo es almacenado en la memoria SRAM interna y se realiza un remap (con lo que la memoria interna SRAM es accesible en la posici´ on 0x0 ver Figura 1. y revisar ciertos perif´ ericos en b´ usqueda de un ejecutable. en una EEPROM conectada a la interfaz I2C o en una memoria de 8 bits conectada a la interfaz de bus externo (EBI). este programa debe estar almacenado en una memoria no vol´ atil y debe estar en el formato requerido por el procesador. La figura 1. menos la sexta instrucci´ on (posici´ on 14 a 17) que contiene informaci´ on sobre el tama˜ no de la im´ agen (en bytes) a descargar y el tipo de dispositivo DataFlash. y debe inicializar el controlador de memoria SDRAM para que almacene 18 Los procesadores ARM pueden intercambiar el sitio de la memoria RAM interna y la memoria no vol´ atil . Normalmente los SoCs proporcionan varios caminos (habilitando diferentes perif´ ericos) para hacer esto.30 Sistemas Embebidos hasta 66MHz utilizando solamente 4 pines para la comunicaci´ on con el procesador. se inicializa un programa que configura el puerto serial de depuraci´ on (DBGU) y el puerto USB Device.13 muestra el diagrama de conexiones de esta memoria. La figura 1. Si la secuencia es encontrada. despu´ es del remap esta memoria se puede acceder en la posici´ on 0x0.

debido a que las dimensiones de los dispositivos de montaje superficial son muy peque˜ nas. 1. o en otros puntos de contacto convenientes. M´ as adelante hablaremos detalladamente de la aplicaci´ on que realiza estas funciones. Printed Circuit Boards) se basaba en el uso de la t´ ecnica “bed-of-nails”.2.6. la estructura de pruebas para tarjetas de circuito impreso (PCB. que permit´ ıan el acceso a dispositivos en la tarjeta a trav´ es de puntos de prueba colocados en la capa de cobre. Con la aparici´ on de los dispositivos de montaje superficial se empez´ o a colocar dispositivos en las dos caras de la tarjeta. esto es necesario ya que la memoria interna del AT91RM9200 solo es de 16kBytes.14: Diagrama de flujo del programa de inicializaci´ on del SoC AT91RM9200 Figura 1.Carlos Iv´ an Camargo Bare˜ no 31 Figura 1. Las pruebas se realizaban en dos fases: La prueba del circuito apagado y la prueba del circuito funcionando. Interfaz JTAG A mediados de los 1970s. se disminuy´ o la distancia f´ ısica entre las interconexiones. Este m´ etodo hacia uso de un dispositivo que conten´ ıa una serie de puntos de prueba.15: Diagrama de flujo del programa de inicializaci´ on del SoC AT91RM9200 temporalmente el ejecutable a grabar. A mediados de los 1980s un grupo de ingenieros de pruebas miembros de compa˜ n´ ıas electr´ onicas Europeas se reunieron para examinar el problema y buscar posibles soluciones. dificultando el proceso de pruebas. Este grupo se autode- .

Figura 1. Y son independientes del n´ ucleo l´ ogico del mismo. En la Figura 1. y Extest [17]. La se˜ nal de reloj se proporciona por un pin externo TCLK (Test Clock) y el modo de operaci´ on se controla por la se˜ nal TMS (Test Mode Select). Una carga paralela de los registros (captura) ocasiona que los valores de las se˜ nales aplicadas a los pines del dispositivo pasen a las celdas de entrada y que opcionalmente los valores de las se˜ nales internas del dispositivo pasen a las celdas de salida.1 describe tres instrucciones obligatorias: Bypass. Los elementos del Boundary Scan no afectan el funcionamiento del dispositivo. de aqu´ ı el nombre ?Boundary Scan?. de forma serial. El m´ etodo de soluci´ on propuesto por ellos estaba basado en el concepto de un registro de corrimiento serial colocado alrededor de la frontera dispositivo. Despu´ es el grupo se asoci´ o a compa˜ n´ ıas norteamericanas y la “E” de “European” desapareci´ o del nombre de la organizaci´ on convirti´ endose en JTAG (Join Test Action Group). Sample/Preload. Instrucciones JTAG El Standard IEEE 1149. Las celdas conectadas a los pines de entrada reciben el nombre de “Celdas de entrada”. . y las que est´ an conectadas a los pines de salida “Celdas de salida”. empezando por un pin dedicado TDI (Test Data In) y terminando en un pin de salida dedicado llamado TDO (Test Data Out). y opcionalmente los valores almacenados en las celdas de entrada pasen al interior del dispositivo.16 se muestra esta arquitectura. Arquitectura BOUNDARY SCAN A cada se˜ nal de entrada o salida se le adiciona un elemento de memoria multi-prop´ osito llamado “Boundary Scan Cell” (BSC). Los datos pueden ser corridos a trav´ es del registro de corrimiento.16: Arquitectura Boundary Scan Las BSC se configuran en un registro de corrimiento de entrada y salida paralela.32 Sistemas Embebidos nomin´ o JETAG (Joint European Test Action Group). Una descarga paralela (Actualizaci´ on) ocasiona que los valores presentes en las celdas de salida pasen a los pines del dispositivo.

17) . Figura 1. permitiendo la transferencia serial de datos a trav´ es del circuito integrado desde TDI hacia TDO sin afectar la operaci´ on. La codificaci´ on en binario para esta instrucci´ on debe ser con todos los bits en uno. EXTEST Esta instrucci´ on coloca al circuito integrado en modo de test externo (pruebas de la interconexi´ on) y conecta el regsitro Boundary-Scan entre TDI y TDO. Durante este estado es posible modificar y capturar las se˜ nales del n´ ucleo. La codificaci´ on de esta instrucci´ on la define el fabricante. Durante esta instrucci´ on. pero es utilizado para capturar las se˜ nales que salen del n´ ucleo l´ ogico del dispositivo. Las se˜ nales que salen del circuito son cargadas en el registro boundary-scan en el flanco de bajada de TCK en el estado Capture-DR. las se˜ nales de entrada al dispositivo son cargadas al registro boundary-scan durante el flanco de bajada de TCK en el estado Update-DR (ver Figura 1.17: Arquitectura Boundary Scan Depuraci´ on del core ARM [18] Todos los nucleos ARM7 y ARM9 poseen soporte de depuraci´ on en modo halt. para tomar una muestra de los datos de entrada y salida del chip. INTEST La instrucci´ on opcional INTEST tambi´ en selecciona el registro boundary-scan. Esta instrucci´ on tambi´ en se utiliza para precargar los datos de prueba en el registro Boundary-Scan antes de ejecutar la instrucci´ on EXTEST. el registro Boundary-Scan puede ser accesado a trav´ es de la operaci´ on Data Scan. lo que permite detener por competo el n´ ucleo. La codificaci´ on para esta se˜ nal es asignada por el dise˜ nador. . SAMPLE/PRELOAD Esta instrucci´ on selecciona el registro Boundary-Scan para colocarse entre los terminales TDI y TDO. y para aplicar valores connocidos a las se˜ nales de entrada del n´ ucleo. La codificaci´ on para esta instrucci´ on est´ a definida con todos los bits en cero.Carlos Iv´ an Camargo Bare˜ no 33 BYPASS Esta instrucci´ on permite que el chip permanezca en un modo funcional. hace que el registro de Bypass se coloque entre TDI y TDO.

esto es.18 muestra el orden de las se˜ nales en las cadenas para los n´ ucleos ARM7TDMI y ARM9TDMI. . esta formada por 32 bits de datos. Figura 1. o en modo EXTEST. con dos cadena boundary-scan alrededor de las se˜ nales del core. Los n´ ucleos ARM7 y ARM9 implementan un controlador compatible con JTAG. Esto permite realizar depuraci´ on activa y pasiva. para pruebas del dispositivo y la otra es un sub-set de la primera con se˜ nales importantes para la depuraci´ on. una con las se˜ nales del core.19 muestra la cadena scan ICE. El emulador es conectado a un computador que ejecuta el software de depuraci´ on. Figura 1. cuya direcci´ on es colocada en el bus de direcciones. Esta cadena puede ser utilizada en modo INTEST. permitiendo la salida y entrada de informaci´ on hacia y desde exterior del core respectivamente. 5 bits de direcciones y un flag para diferenciar entre lectura (nRW bajo) y escritura. la se˜ nal BREAKPT se utiliza para indicar que la instrucci´ on debe ejecutarse a la velocidad del sistema. utilizando el reloj MCLK en lugar de DCLK. Para pop´ ositos de depuraci´ on es suficiente la cadena 1. que es la misma para los n´ ucleos ARM7 y ARM9.19: Cadena Boundary Scan 2 (Embedded ICE) Los ARM7 y ARM9 poseen un m´ odulo ICE (In Circuit Emulator) que reemplaza el microcontrolador con una variaci´ on que posee facilidades para la depuraci´ on hardware.34 Sistemas Embebidos permitiendo cambiar y examinar el core y el estado del sistema. Se puede acceder a las caracter´ ısticas ICE a trav´ es de registros. las se˜ nales DD[31:0] est´ an conectadas al bus de dtaos bi-direccional y se utilizan para leer o escribir informaci´ on. La Figura 1. permitiendo capturar las se˜ nales del core y aplicar vectores al mismo. En este estado la fuente de reloj del core es el reloj de depuraci´ on (DCLK) que es generado por la l´ ogica de depuraci´ on. La Figura 1. dando un punto de vista no intrusivo del flujo del programa.18: Cadena Boundary Scan 1 Las se˜ nales D[0:31] del ARM7TDMI est´ an conectadas al bus de datos del n´ ucleo y se utiliza para capturar instrucciones o lectura/escritura de informaci´ on. Las se˜ nales ID[0:31] del ARM9TDMI est´ an conectadas al bus de instrucciones y se utilizan para capturar instrucciones.

os. el sistema operativo Unix (desarrollado en The Bell Labs a principios de los 60s). fue pensado como un sistema operativo gratuito y de libre distribuci´ on. y la depuraci´ on de procesadores ARM7 y ARM9 utilizndo el m´ odulo ICE. utilizando los pines del dispositivo.berlios. el cr´ edito de las que conocemos hoy (Debian. Suse. editores de texto. ya que linux es solo el kernel del sistema operativo. El proyecto UrJTAG. Shells. Estas herramientas fueron utilizadas por Torvalds para escribir el elemento que le hac´ ıa falta al proyecto GNU para completar su sistema operativo: el kernel. won’t be big and professional like gnu) for 386(486) AT clones. Esta caracter´ ıstica ha permitido que programadores a lo largo del mundo puedan manipular el c´ odigo fuente para eliminar errores y para aumentar sus capacidades. Desde el lanzamiento de la primera versi´ on de linux. compiladores.20 muestra el desarrollo previo a la creaci´ on de la primera versi´ on de linux hasta el d´ ıa de hoy. y estaba muy bien posicionado en las Universidades. En [18] se puede encontrar el funcionamiento interno de esta herramienta. miles. Una de las caracter´ ısticas m´ as importantes de Linux es que desde su creaci´ on. En estos casos se utiliza la interfaz JTAG en modo EXTEST para controlar directamente las memorias conectadas a los SoCs. Este proyecto se ha convertido en el m´ as popular dentro del grupo de desarrolladores de sistemas Embebidos.minix. tan pronto como se desarrolla una nueva pieza de hardware existen cientos de programadores trabajando en crear el soporte para linux. ten´ ıa una solida posici´ on en el mercado de servidores. un gran n´ umero ´ l y muchos de ellos deseaban poder utilizarlo en sus computadores de estudiantes trabajaban a diario con e personales.I’m doing a (free) operating system (just a hobby. El sistema Operativo Linux Hello everybody out there using minix . sin embargo.de/web/ 20 http://urjtag.3. 1. A principios de los 90. existen procesadore en los que no se conocen las espcificaciones del ICE y en en otros este m´ odulo no existe. 19 http://openocd. Sin embargo. Ubuntu. Con este mail enviado al foro de discusi´ on comp. En 1983. Linus Torvalds. sin embargo. Programaci´ on de memorias Flash Algunos SoC no poseen programas de inicializaci´ on que permitan la descarga de aplicaciones ya sea a las memorias externas o a la interna. cientos de miles y millones de programadores se han puesto en la tarea de convertir a linux en un sistema operativo robusto. Unix era un producto comercial muy costoso.Carlos Iv´ an Camargo Bare˜ no 35 El proyecto OPENOCD (Open On-Chip Debugger 19 ) permite la programaci´ on de la memoria flash interna de algunos procesadores ARM7TDMI. GNU hab´ ıa producido una serie de herramientas como librer´ ıas. amigable y actualizado. por lo tanto. una soluci´ on podr´ ıa ser utilizar el protocolo JTAG para cargar las aplicaciones en la RAM interna. etc) no solo se debe a Torvalds.net/ . 20 permite la programaci´ on de diversas memorias flash.sourceforge. el cual proporciona una parte esencial de los sistemas linux. cientos. un estudiante de la Universidad de Helsinki en Finlandia introduce Linux el 25 de Agosto de 1991. A principios de los 90s. UrJTAG permite la creaci´ on de diferentes interfaces para conectarse con las memorias. estas interfaces reciben el nombre de buses y pueden ser creadas e incluidas en el c´ odigo original de forma f´ acil. etc. La figura 1. Richard Stallman funda en proyecto GNU.

del sistema operativo y de las herramientas de compilaci´ on se encuentran disponibles sin ninguna restricci´ on.20: Linux: Historia Fuente. Protocolos de Comunicaci´ on y est´ andares de Software: Linux proporciona muchos protocolos de comunicaci´ on.net 22 http://www. Linux en la actualidad se puede ejecutar en docenas de diferentes arquitecturas hardware. Existen grandes comunidades como SourceForge21 o Freshmeat 22 que permiten a miles de desrroladores compartir sus trabajos y es posible que en ellas se encuentre una aplicaci´ on que cumpla con sus necesidades. a pesar de que muchos fabricantes no proporcionan soporte para Linux. Disponibilidad de Herramientas: La variedad de herramientas disponibles para Linux lo hacen muy vers´ atil.net . Disponibilidad de C´ odigo: Todo el c´ odigo fuente de las aplicaciones. Soporte de Hardware: Linux soporta una gran variedad de dispositivos y plataformas.freshmeat. miden el nivel de confianza en el c´ odigo. lo que permite su f´ acil integraci´ on a marcos de trabajo ya existentes. que compromete software como el kernel y las aplicacione proporcionadas por las distribuciones. lo cual lo convierte en el Sistema Operativo m´ as portable. la cual permite la distribuci´ on de binarios sin el c´ odigo fuente. 21 http://www.sourceforge. la comunidad trabaja arduamente en incluir el nuevo hardware en las nuevas distribuciones de Linux. Porqu´ e Linux Existen varias motivaciones para escoger Linux frente a un sistema oeprativo tradicional para sistemas embebidos [19]: Calidad Y confiabilidad del c´ odigo: Aunque estas medidas son subjetivas. Existen varios tipos de licencias: la GNU General Public License (GPL).36 Sistemas Embebidos Figura 1. BSD (Berkeley Software Distribution).

Costo: Muchas de las herramientas de deasrrollo y componentes de Linux son gratuitos. Con estas caracter´ ısticas es posible ejecutar tareas de forma independiente. y transparente para el/los usuarios. El mejor sitio para hacer esto son las listas de correo de soporte y desarroll.1. y no requieren el pago por ser incluidos en productos comerciales. Linux toma dos caracter´ ısticas muy importantes de Unix: es un sistema multitarea y multiusuario. 1. el manejador de memoria. la interfaz de red y la comunicaci´ on entre procesos (IPC). Independencia del vendedor: No existe solo un distribuidor del sistema operativo GNU-Linux. entre las que se encuentran: alpha arm26 frv i386 m32r m68knommu parisc ppc64 sh sparc um x86 64 arm cris h8300 ia64 m68k mips ppc s390 sh64 sparc64 v850 Las funciones de estos componentes se describen a continuaci´ on [1]: . En la actualidad existe una gran variedad de arquitecturas soportadas por linux. Esto debe tenerse en cuenta en el momento de elegir la distribuci´ on a utilizar. Millones de usuarios alrededor del mundo pueden encontrar errores en alguna aplicaci´ on y desarrolladores miembros de la cumonidad (en algunos casos los creadores de las aplicaciones) arreglar´ an este problema y difundir´ an su soluci´ on.21: Estructura del kernel de linux Como puede observarse en la figura 1. Tal como se ilustra en la figura 1. ya que las licencias de Linux garantizan igualdad a los distribuidores. esto hace que Linux sea un sistema operativo portable. lo cual fue implementado posteriormente por los sistemas operativos Windows y MacOS. no implica perder la porpiedad intelectual ni los derechos de autor la misma.21. Figura 1. Arquitectura de Linux [1] [2] Linux (Linus’ Minix) es un clon del sistema operativo Unix para PC con procesador Intel 386. Licencia: Al crear una aplicaci´ on bajo alguna de las licencias usuales en Linux. el sistema de archivos virtual.3.Carlos Iv´ an Camargo Bare˜ no 37 Soporte de la Comunidad: Esta es la principal fortaleza de Linux. Algunos vendedores poporcionan aplicaciones adicionales que no son libres y pro lo tanto no se encuentran disponibles con otros vendedores. Linux est´ a compuesto por cinco sub-m´ odulos [2]: El programador (Scheduler).21 el kernel de linux posee sub-m´ odulos que son independientes de la arquitectura y otros que deben ser escritos para el procesador utilizado.

el cambio de estado del programador se realiza cada 10 ms. Esta encargado de realizar las siguientes tareas: Permitir a los procesos hacer copias de si mismos. Liberar los recursos de los procesos. Los procesos usuario. Procesando un llamado del sistema.38 Programador de procesos (Scheduler) Sistemas Embebidos Es el coraz´ on del sistema operativo linux. Manejador de Memoria En el momento en que se energiza la CPU. Listo. En espera. El scheduler de Linux utiliza una interrupci´ on del timer que se presenta cada 10 ms. pueden referenciar m´ as memoria que la existente f´ ısicamente. Determinar que procesos pueden acceder a la CPU y efectuar la transferencia entre los procesos en ejecuci´ on. de tal forma que la memoria Extendida (incluyendo la memoria de los dispositivos) sea accesible. cuando estos finalizan su ejecuci´ on.23): Gran espacio de memoria. Un proceso puede estar en uno de los siguientes estados: En ejecuci´ on. El c´ odigo de inicializaci´ on del Sistema Operativo debe activar el modo protegido del procesador. Enviar se˜ nales a los procesos de usuario. Adicionalmente evita que los procesos sobreescriban datos de solo lectura. Recibir interrupciones y llevarlas al subsistema del kernel adecuado.22 y 1. Protecci´ on La memoria de un proceso es privada y no puede ser le´ ıda o modificada por otro proceso. El programador de procesos proporciona dos interfaces: Una limitada para los procesos de usuario y una interfaz amplia para el resto del kernel. Procesando una rutina de interrupci´ on. Manejar el timer f´ ısico. El manejador de memoria proporciona los siguientes servicios (ver figuras 1. por lo tanto. ´ rea de memoria virtual y accesar Mapeo de memoria Los usuarios pueden mapear un archivo en un a el archivo como una memoria. esta solo ve 1-MB de memoria f´ ısica (Incluyendo las ROMs). Finalmente el OS habilita la memoria virtual para permitir la ilusi´ on de un espacio de memoria de 4 GB. Retornando de un llamado de sistema. Esto debe ser tenido en cuenta a la hora de realizar procesos que manejen dispositivos hardware veloces. Acceso transparente a la memoria f´ ısica esto asegura un buen desempe˜ no del sistema. .

22: Mapeo de memoria del Kernel. • mprotect Cambia la protecci´ on sobre una regi´ on de una memoria virtual. Nivel de kernel • kmalloc() / kfree() Asigna o libera memoria para que sea utilizada por estructuras de datos del kernel. . Figura 1.Carlos Iv´ an Camargo Bare˜ no Memoria compartida 39 Al igual que el programador el manejador de memoria proporciona dos diferentes niveles de acceso a memoria el nivel de usuario y el de kernel. Asigna o libera memoria para que sea utilizada por un proceso. Nivel de Usuario • malloc() / free(). • get free page() / free page() Asigna y libera p´ aginas de memoria f´ ısica. • mmap() / munmap() / msync() /mremap() Mapea archivos en regiones de memoria virtual. Comunicaci´ on Entre Procesos (IPC) El mecanismo IPC de Linux posibilita la ejecuci´ on concurrente de procesos. la sincronizaci´ on e intercambio de datos entre ellos. • swapon() / swapoff() Rutinas que le permiten al super-usuario agregar o eliminar archivos swap en el sistema. • mlock() / mlockall() / munlock() / munlockall() Rutinas que permiten al super usuario prevenir el intercambio de memoria. Linux proporciona los siguientes mecanismos: ˜ Senales Mensajes as´ ıncronos enviados a los procesos. permitiendo compartir recursos. • verify area() Verifica que una regi´ on de la memoria de usuario ha sido mapeada con los permisos necesarios.

los mensajes son escritos a una lista de mensajes y pueden obtenerse leyendo esta lista. Conductos (pipe) Permite transferencias bi-direccionales entre dos procesos. Interfaces de Red Este sistema proporciona conectividad entre m´ aquinas. Sistema de archivo virtual El sistema de archivos de linux cumple con las siguientes tareas: ´ Controlar multiples dispositivos hardware . o un recurso se libere. y un modelo de comunicaci´ on por sockets. proporciona dos protocolos de transporte con diferentes modelos de comunicaci´ on y calidad de servicio: El poco confiable ´ ltiprotocolo UDP (User Datagram Protocol) y el confiable TCP (Transmission Control Protocol). PLIP (paralela) y ethernet. • Memoria Compartida Mecanismo por medio del cual varios procesos tienen acceso a la misma regi´ on de memoria f´ ısica. Se proporcionan tres tipos diferentes de conexi´ on: SLIP (Serial). • Lista de Mensajes Secuencia de bytes. Sockets del dominio Unix Mecanismo de transferencia de datos orientada a la conexi´ on. Se proporcionan dos modelos de implementaci´ on de sockets: BSD e INET. Adem´ as. System V • Sem´ aforos Una implementaci´ on del modelo cl´ asico del sem´ aforo.40 Sistemas Embebidos Figura 1. con un tipo asociado.23: Mapeo de memoria para una aplicaci´ on Listas de espera Proporciona mecanismos para colocar a dormir a los procesos mientras esperan que una operaci´ on se complete. este u mo garantiza el env´ ıo de los datos y que los paquetes ser´ an entregados en el mismo orden en que fueron enviados. Bloqueo de archivos Permite a un proceso declarar una regi´ on de un archivo como solo lectura para los dem´ as procesos.

Esta cconfiguraci´ on din´ amica permite a los usuarios de Linux compilar un kernel tan peque˜ no como sea posible. La interfaz inode hace que todos los archivos se vean igual a otros subsistemas Linux. si tenemos el manejador del scanner cragado a´ un sin que este este conectado a nuestro equipo se esta desperdiciando la memoria asociada a dicho controlador. Esto es u se pueden conectar en caliente. Se proporcionan dos modelos de implementaci´ on de sockets: BSD e INET. ELF. el que puede ser montado en un punto del sistema de archivos virtual. M´ odulos La mayor funcionalidad del sistema de archivos virtual se encuentra disponible en la forma de m´ odulos cargados din´ amicamente. ˜ Desempeno Seguridad Confiabilidad Drivers de Dispositivos 41 La capa manejador de dispositivos es responsable de presentar una interfaz com´ un a todos los dispositivos f´ ısicos. El inode es virtual en el sentido que contiene operaciones que son implementadas diferentemente dependiendo de el sistema l´ ogico y del sistema f´ ısico donde reside el archivo. el mouse. y un modelo de comunicaci´ on por sockets. bloque (acceso en m´ ultiplos de tama˜ no de bloque) y red. Para dar soporte al sistema de archivos virtual. ejemplos de controladores tipo bloque son los dispositivos de almacenamiento masivo como discos duros. y pueden ser tratados como tal. la longitud total del archivo en bloques. y el mapeo entre el offset del archivo y los bloques del dispositivo. Adem´ as.Carlos Iv´ an Camargo Bare˜ no Manejar sistemas de archivos l´ ogicos Soporta diferentes formatos ejecutables Por ejemplo a. memorias SD. java) Homogeneidad Proporciona una interfaz com´ un a todos los dispositivos l´ ogicos o f´ ısicos. Linux usa un inode para representar un archivo sobre un dispositivo tipo bloque. El inode almacena los buffers asociados. proporciona dos protocolos de transporte con diferentes modelos de comunicaci´ on y calidad de servicio: El poco confiable . Interfaces de Red Este sistema proporciona conectividad entre m´ aquinas. es com´ un acceder a dispositivos tipo bloque utilizando un sistema de arcvhivos l´ ogico. Sistema de Archivos l´ ogico Aunque es posible acceder a dispositivos f´ ısicos a trav´ es de un archivo de dispositivo. mientras permite cargar el manejador del dispositivo y m´ odulos del ´ til en el caso de los dispositivos que sistema de archivos si solo son necesarios durante una sesi´ on. como por ejemplo un scanner. Ejemplos de controladores secuenciales son el modem. Linux utiliza el concepto de inodes. El kernel de Linux tiene 3 tipos de controladores de dispositivo: Caracter (acceso secuencial). Los manejadores de dispositivos soportan las operaciones de archivo. El inode se utiliza como una posici´ on de almacenamiento para la informaci´ on relacionada con un archivo abierto en el disco.out.

lib Librer´ ıa de funciones internas. sh. powerpc.4. los archivos de configuraci´ on de estas pueden ser utilizados para crear una propia. En el c´ odigo fuente de Linux se encuentran muchas plataformas que utilizan las diferentes architecturas. en ellos podemos encuentrar los archivos para las arquitecturas: alpha. m68k. m32r. cris. es necesario que este sea cap´ az de manejar todos los perif´ ericos asociados a esta y proporcione caminos para controlarlos. memcpy. bit-twiddling etc). tambi´ en contiene el archivo mach-types que contiene la lista de las m´ aquinas (plataformas) registradas. PLIP (paralela) y ethernet. Se proporcionan tres tipos diferentes de conexi´ on: SLIP (Serial). en nuestro caso trabajaremos con la arquitectura arm. s390. sparc64. arch usr Documentation sound fs include mm lib crypto security net ipc drivers block scripts kernel Dentro de cada arquitectura soportada por Linux (arch/xxx/ ) encontramos los siguientes directorios: kernel C´ odigo del n´ ucleo del kernel. El c´ odigo espec´ ıfico de cada arquitectura lo encontramos en los subdirectorios arch y include/asmxxx. m68knommu. h8300. ppc. sh64. boot Sition donde reside la im´ agen del kernel una vez compilado.1. funciones I/O. 1. este directorio contiene herramientas para generar im´ agenes comprimidas. Los archivos de configuraci´ on . v850. xtensa.42 Sistemas Embebidos ´ ltiprotocolo UDP (User Datagram Protocol) y el confiable TCP (Transmission Control Protocol). ia64. frv. 1. parisc. arm. El Kernel de Linux El c´ odigo fuente se encuentra dividido entre el c´ odigo espec´ ıfico a una arquitectura y el c´ odigo com´ un. x86. tools Contiene scripts para la autogeneraci´ on de archivos. blackfin.4. por lo tanto. A continuaci´ on se listan los directorios que hacen parte sdel c´ odigo fuente de Linux. Portando Linux a la plataforma ECBOT y ECB AT91 Como vimos anteriormente el kernel de Linux es el coraz´ on del sistema operativo GNU/Linux y es el encargado de manejar directamente el Hardware asociado a una determinada plataforma. optimizadas para la arquitectura (backtrace. En nuestro caso tomamos como referenica la plataforma Atmel AT91RM9200-EK dise˜ nada por ATMEL. En esta secci´ on se describir´ a el proceso que debe realizarse para hacer que Linux se ejecute de forma correcta en una plataforma y que permita controlar sus diferentes componentes hardware (este proceso recibe el nombre de Porting). um. este u mo garantiza el env´ ıo de los datos y que los paquetes ser´ an entregados en el mismo orden en que fueron enviados. nwfpe Implementaciones de punto flotante. avr32. Si deseamos dar soporte a una determinada plataforma debemos trabajar en el directorio que contiene la arquitectura del procesador a utilizar. mips. sparc. mm C´ odigo para el manejo de memoria. configs Contiene el archivo de configuraci´ on para cada plataforma.

si este n´ umero no es el mismo que el kernel tiene registrado se generar´ a un error.Carlos Iv´ an Camargo Bare˜ no 43 de esta plataforma se encuentra en: arch/arm/mach-at91/board-ek. la primera es utilizando un archivo de configuraci´ on de una plataforma existente.S 23 este 24 los programa se ejecuta con el comando: make ARCH=arm CROSS COMPILE=arm-none-eabiarchivos que comienzan con “. este archivo refleja las selecciones realizadas para configurar la imagen del kernel. el primero paso en el proceso de port es obter un ID. para evitar esto debemos incluir las siguientes l´ ıneas en el archivo arch/arm/boot/compressed/head-at91rm9200. com / f r e e −ecb −a t 9 1 > La que permite seleccionar nuestra plataforma desde el programa de configuraci´ on de Linux23 (Ver Figura 1. mientras que se asigna un nuevo n´ umero puede asignarse uno que no este utilizado en el archivo: arch/arm/tools/mach-types. la aplicaci´ on encargada de cargar la im´ agen del kernel de Linux le pasa a este el n´ umero de identificaci´ on de la plataforma. < h t t p : / / w i k i .uk/developer/machines/. y la otra es registrar la nuestra.config 24 localizado en la ra´ ız del c´ odigo fuente. dentro de la arquitectura arm existen varias sub-arquitecturas que corresponden a las diferentes familias de SoC. en este caso espec´ ıfico se agragar´ a la l´ ınea: CONFIG MACH ECBAT91=y Como veremos m´ as adelante.arm.linux. Existen dos formas en las que podemos adaptar nuestra plataforma al kernel de Linux. Cada plataforma es identificada por un machine ID.” est´ an ocultos . lo cu´ al se puede hacer en l´ ınea: http://www.24) Figura 1.c. El AT91RM9200 hace parte de la familia de SoCs AT91 de ATMEL.24: Herramienta de configuraci´ on de Linux mostrando la plataforma ECB AT91 Al seleccionar nuestra plataforma el programa de configuraci´ on crear´ a un archivo de configuraci´ on . e m q b i t . La entrada correspondiente a la familia de plataformas ECBACT91 es: ecbat91 MACH ECBAT91 ECBAT91 1072 Con este ID (o uno temporal) se debe crear la siguiente entrada en el archivo /arch/arm/machat91/Kconfig b/arch/arm/mach-at91/Kconfig: c o n f i g MACH ECBAT91 b o o l ” emQbit ECB AT91 SBC” d e p e n d s on ARCH AT91RM9200 help S e l e c t t h i s i f you a r e u s i n g emQbit ’ s ECB AT91 b o a r d .org.

h> # i n c l u d e < l i n u x / w1−g p i o . h> # include ” generic . USB Device. TWI (i2c). o Con esto asignamos el archivo de configuraci´ on board-ecbat91. h> <asm / a r c h / g p i o . r 3 beq 99 f El archivo /arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile contiene una relaci´ on entre la plataforma seleccionada y el archivo de compilaci´ on a utilizar. Como todo archivo escrito en C al comienzo se declaran los encabezados que contienen las funciones utilizadas. h> <asm / a r c h / at91rm9200 mc . h> /mm. # ( MACH TYPE ECBAT91 & 0 x f f 0 0 ) cmp r7 . h> <asm / i r q . por lo que debemos incluir las siguientes l´ ıneas: o b j −$ ( CONFIG MACH ECBAT91 ) += b o a r d −e c b a t 9 1 . en nuestro caso: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 # include # include # include # include # include # include # include # include # include # include # include # include # include <l i n u x <l i n u x <l i n u x <l i n u x <l i n u x <l i n u x <l i n u x <l i n u x <l i n u x / t y p e s . h> / module . h” # i n c l u d e <asm / a r c h / a t 9 1 p i o . h> / i n i t . h> # include # include # include # include # include <asm / a r c h / b o a r d . h> < l i n u x / g p i o k e y s . h> / p l a t f o r m d e v i c e . h> / s p i / s p i .c) y se har´ a una explicaci´ on de cada uno de los par´ ametros de este archivo. RTC. h> <asm / mach− t y p e s . Watchdog. h> Cada arquitectura (CPU) posee un archivo donde se declaran los diferentes perif´ ericos que pueden ´l ser utilizados: arch/arm/mach-at91/at91rm9200 devices. h> # i n c l u d e <asm / mach / a r c h . h> <asm / s e t u p . h> # i n c l u d e <asm / mach / map .44 Sistemas Embebidos @ emQbit ECB AT91 : 1072 mov r3 . Ethernet. Archivo de configuraci´ on de la plataforma ECB AT91 En esta secci´ on realizaremos una descripci´ on del archivo de configuraci´ on de la familia de plataformas ECB AT91 (board-ecbat91.c a la plataforma MACH ECBAT91. # ( MACH TYPE ECBAT91 & 0 x f f ) orr r3 .c en el caso del procesador AT91RM9200. SSC – Synchronous . r3 . SPI. h> / s p i / f l a s h . Timer/Counter blocks. Compact Flash / PCMCIA. MMC / SD. h> / l e d s . h> < l i n u x / i n p u t . h> <asm / h a r d w a r e . h> # i n c l u d e <asm / mach / i r q . h> / dma−mapping . En e podemos encontrar soporte para: USB Host. NAND / SmartMedia.

Carlos Iv´ an Camargo Bare˜ no 45 Serial Controller. Este archivo adem´ as proporciona funciones que permiten incluir y configurar los diferentes controladores asociados al SoC. este puerto ´ nico medio de comunicaci´ es vital ya que es el u on que tenemos con nuestra plataforma. de inicializar el procesador AT91RM9200. definir que el control de un determinado pin este a cargo del perif´ erico. como su nombre lo indica inicializa las interfaces seriales utilizando como configuraci´ on la estructura at91 init serial explicada anteriormente. } La funci´ on at91rm9200 initialize declarada en arch/arm/mach-at91/at91rm9200. Nuestra plataforma utiliza un LED conectado al pin PB20 para estas indicaciones. ttyS0 en nuestro caso. reflejan la actividad de procesos importantes en el estado de diodos emisores de luz LEDs. s t a t i c void i n i t e c b a t 9 1 i n i t i r q ( void ) { a t 9 1 r m 9 2 0 0 i n i t i n t e r r u p t s (NULL ) . . El primer dispositivo declarado en el archivo de configuraci´ on es el puerto serial (UART). . la variable nr tty define el n´ seriales disponibles 25 . tty map realiza la correspondencia entre los dispositivos tty y las UART disponibles en el SoC. espec´ ıficamente se encarga de configurar. } La funci´ on at91rm9200 init interrupts inicializa el Controlador de Interrupciones del AT91RM9200 y permite que estas sean atendidas. .c se encarga. nr tty . −1 } /∗ ttyS0 . UART. La funci´ on at91 init serial(&ecb at91uart config).h. Adicionalmente informa que se est´ a utilizando el empaquetado TQFP208 (Este chip viene en dos versiones TQFP y BGA). − 1. para este ejemplo asocia ttyS0 a la UART4 y ttyS1 a la UART0 s t a t i c void i n i t ecb at91map io ( void ) { / ∗ I n i t i a l i z e p r o c e s s o r : 1 8 . 0 . static struct at91 uart . como por ejemplo. console tty . config initdata ecb at91uart config = { = 0. AT91RM9200 PQFP ) . − 1. /∗ ttyS0 ∗/ = 2. el reloj interno del procesador (con la funci´ on at91 clock init). . timer led)). Linux permite visualizar la actividad de la CPU y el estado de un timer interno (at91 init leds( cpu led. 4 3 2 MHz c r y s t a l ∗ / a t 9 1 r m 9 2 0 0 i n i t i a l i z e ( 1 8 4 3 2 0 0 0 . static struct at91 usbh data 25 El i n i t d a t a ecb at91usbh data = { AT91RM9200 tiene 4 USARTS y una UART para depuraci´ on . / ∗ S e t u p t h e LEDs ∗ / a t 9 1 i n i t l e d s ( AT91 PIN PB20 . / ∗ S e t u p t h e s e r i a l p o r t s and c o n s o l e ∗ / a t 9 1 i n i t s e r i a l (& e c b a t 9 1 u a r t c o n f i g ) . AT91 PIN PB20 ) . la variable console tty define el n´ umero del disposumero de interfaces itivo tty asociado a la consola serial. ttyS0 y ttyS1 en nuestro caso. = { 4 . adicionalmente realiza las operaciones necesarias para poder utilizarlo. tty map }. registra los Osciladores configurables PCK0 a PCK3 (utilizando la funci´ on at91rm9200 register clocks) y finalmente habilita el soporte para los pines de entrada/salida de prop´ osito general GPIOs (utilizando la funci´ on at91 gpio init). ttyS4 ∗/ Los par´ ametros de configuraci´ on de la UART se declaran utilizando la estructura at91 uart config declarada en el archivo include/asm-arm/arch/board. como su nombre lo indica. Las plataforma que carecen de un dispositivo de visualizaci´ on como una pantalla.

s i z e = 1534 ∗ 1 0 5 6 . el u-boot. name = ” Removable f l a s h c a r d ” . s i z e = 12 ∗ 1 0 5 6 . el slot a en nuestro caso. # endif Muchos dispositivos flash est´ an divididos en secciones que reciben el nombre de particiones. s t a t i c s truc t at91 mmc data . static struct spi board info initdata ecb at91spi devices [] = { { /∗ DataFlash chip ∗/ . similares a las particiones encontradas en un disco duro. o f f s e t = MTDPART OFS NXTBLK . modalias = ” mtd dataflash ” . o f f s e t = MTDPART OFS NXTBLK . = 1. / / 12672 b y t e s }. offset (Direcci´ on inicial de la partici´ on) y . n r p a r t s = ARRAY SIZE ( m y f l a s h 0 p a r t i t i o n s ) }.size. . s i z e = 118 ∗ 1 0 5 6 . . # i f d e f i n e d ( CONFIG MTD DATAFLASH ) static struct mtd partition initdata my flash0 partitions [] = { { . . o f f s e t = MTDPART OFS NXTBLK . / ∗ 1619904 b y t e s ∗ / }. offset = 0. . { . y el sistema de archivos (En el dispositivo flash actual no hay suficiente espacio para ´ ltimo). . / / 0 x3180 . en la que creamos 4 particiones. La familia de plataformas ECB AT91 tiene un dispositivo DataFlash serial de 16 Mbits (2Mbytes). .46 . si esta funci´ on es seleccionada con la herramienta de configuraci´ on del kernel (CONFIG MTD DATAFLASH = y). name = ” k e r n e l ” . la imagen del kernel. static struct flash platform data i n i t d a t a my flash0 platform = { . { . ports }. la versi´ on BGA tiene 2). la variable wire4 selecciona el n´ umero de l´ ıneas de datos entre 1 y 4 (wire4 = 1). }. name = ” D a r r e l − l o a d e r ” . / / 0 x21840 . / 0 x0 . }. { . la variable slot b determina cual se usa. . wire4 = 1. en las que se almacenar´ an el loader. El subsistema MTD proporciona soporte para estas particiones Flash. } }. parts = my flash0 partitions . name = ” u b o o t ” . s i z e = MTDPART SIZ FULL . . name = ” f i l e s y s t e m ” . Sistemas Embebidos La estructra at91 usbh data fija el n´ umero de puertos USB host a 1 (El encapsulado TQFP solo tiene un puerto USB host. slot b = 0. Cada partici´ este u on se define con una estructura mtd partition formada por 3 variables: name. i n i t d a t a ecb at91mmc data = { El SoC AT91RM9200 puede manejar dos memorias SD. .

boot params = AT91 SDRAM BASE + 0 x100 . MACHINE END . usbh. esta formada por la variable modalias. io pg offst = ( AT91 VA BASE SYS >> 1 8 ) & 0 x f f f c . bus num . { }. modalias = ” s p i −c s 1 ” . max speed hz . }. chip select . chip select y max speed hz. max speed hz = 10 ∗ 1000 ∗ 1 0 0 0 . con las funciones correspondientes at91 add device (serial.Carlos Iv´ an Camargo Bare˜ no . max speed hz = 250 ∗ 1 0 0 0 . platform data }. { = = = = 0. chip select = 2. / ∗ User a c c e s s a b l e s p i − c s 2 ( 1MHz) ∗ / . . init machine = ecb at91board init . / ∗ USB H o s t ∗ / a t 9 1 a d d d e v i c e u s b h (& e c b a t 9 1 u s b h d a t a ) . . com ∗ / . ” emQbit ’ s ECB AT91” ) / ∗ M a i n t a i n e r : emQbit . spi) estas funciones hacen un llamado a la funci´ on platform device register la que adiciona el dispositivo a nivel de plataforma. . &e c b a t 9 1 m m c d a t a ) . 47 / ∗ User a c c e s s a b l e s p i − c s 1 ( 2 5 0 KHz ) ∗ / . }. / ∗ User a c c e s s a b l e s p i − c s 3 ( 1 0MHz) ∗ / . { }. modalias = ” s p i −c s 2 ” . timer = &a t 9 1 r m 9 2 0 0 t i m e r . phys io = AT91 BASE SYS . / ∗ SPI ∗ / a t 9 1 a d d d e v i c e s p i ( e c b a t 9 1 s p i d e v i c e s . i2c. . } Una vez configurados los perif´ ericos utilizados en la plataforma debemos agregar estos dispositos. max speed hz = 1 ∗ 1000 ∗ 1 0 0 0 . chip select = 3. . MACHINE START ( ECBAT91 . map io = ecb at91map io . ARRAY SIZE ( e c b a t 9 1 s p i d e v i c e s ) ) . 10 ∗ 1000 ∗ 1 0 0 0 . . / ∗ Programmable C l o c k 1 ∗ / a t 9 1 s e t B p e r i p h ( AT91 PIN PA4 . . chip select = 1. mmc. . . / ∗ I2C ∗ / a t 9 1 a d d d e v i c e i 2 c (NULL. Nuestro dispositivo DataFlash se controla utilizando un puerto SPI. modalias = ” s p i −c s 3 ” . 0 ) . . / ∗ MMC ∗ / a t 9 1 a d d d e v i c e m m c ( 0 . init irq = ecb at91init irq . 0 ) . 0. . La estructura spi board info define los dispositivos SPI conectados al SoC. &m y f l a s h 0 p l a t f o r m . . por esto se define la variable platform data = &my flash0 platform s t a t i c void i n i t e c b a t 9 1 b o a r d i n i t ( void ) { /∗ S e r i a l ∗/ at91 add device serial ().

24 − a t 9 1 . la que obtenemos del sitio oficial ftp. gz | p a t c h −p1 Los cambios que se deben realizar en el c´ odigo fuente. este parche modifica algunos archivos de la distribuci´ on oficial de Linux para dar sopote completo y actualizado a los procesadores ATMEL. esto se hace adicionando la ruta donde se encuentran instalados a la variable de entorno PATH. o r g . etc) comienzan con el prefijo arm-noneeabi. 4 A continuaci´ on descargargamos un parche que mantienen los desarrolladores de la familia de SoCs de ATMEL. kernel de Linux para la familia de plataforma ECB AT91.4. 4 . Lo primero que debemos hacer es hacer visibles los ejecutables de la cadena de herramientas.2. Imagen del kernel En esta secci´ on se realizar´ a una descripci´ on de los pasos necesarios para compilar la im´ agen del es. g z z c a t 2. CROSS COMPILE=arm-none-eabi. k e r n e l .Indica que se realizar´ a una compilaci´ on cruzada y que los ejecutables de la cadena de herramientas (gcc. 2 4 . El primer paso obvio es obtener la im´ agen del kernel. objcopy.48 Archivo de Configuraci´ on del kernel Sistemas Embebidos Finalmente debemos incluir un archivo de configuraci´ on para el kernel (arch/arm/configs/ecbat91 defconfig) el cual contiene la configuraci´ on inicial que cnfigura de forma correcta todos los perif´ ericos de la plataforma. z a / AT91RM9200 / 2 . t a r .org wget h t t p : / / f t p . t a r . o r g / pub / l i n u x / k e r n e l / v2 . se realizar´ a un an´ alisis de la imagen. ld. 4 . 2 4 − a t 9 1 . este proceso recibe el nombre de compilaci´ on cruzada. b z 2 t a r x j f l i n u x − 2 . 2. 6 / 2 . Finalmente debemos compilar el kernel utilizando la cadena de herramientas GNU. bz2 cd l i n u x − 2 . e x p o r t e x p o r t PATH=$PATH : / home / a t 9 1 / arm −2007q1 / b i n / a l i a s c r o s s m a k e = ’ make ARCH=arm CROSS COMPILE=arm−none −e a b i − ’ El alias crossmake hace que cada vez que se escriba esta palabra el sistema lo reemplaze por make ametros ARCH=arm CROSS COMPILE=arm-none-eabi-. ARCH=arm Define la arquitectura arm. el resultado de este tipo de compilaciones son ejecutables para una arquitectura ARM. despu´ indicando su composici´ on. 2 4 .6. wget h t t p : / / maxim .(por lo que el nombre del ejecutable del compilador de c es arm-none-eabi-gcc) . 6 / l i n u x − 2 . lo que ahorra tiempo al momento de pasar los par´ a la herramienta make. 6 . estos par´ ametros son: 1. p a t c h . 1. debido a que da como resultado archivos que se ejecutan en una arquitectura diferente (ARM) a la que realiz´ o el proceso de compilaci´ on (X86 en nuestro caso). mencionados anteriormente fueron enviados a los encargados de mantener estas actualizaciones. 6 . en esta secci´ on describiremos el proceso de creaci´ on de la im´ agen del kernel. 2 4 . 6 . p a t c h . por lo que no es necesario modificarlos para dar soporte a la familia de plataformas ECB AT91. Compilaci´ on de la Im´ agen del kernel En la secci´ on anetrior vimos como dar soporte a nuestra plataforma.kernel. c++. 6 .

. o AS a r c h / arm / b o o t / c o m p r e s s e d / head −a t 9 1 r m 9 2 0 0 .. # # AT91RM9200 Board Type # CONFIG MACH ECBAT91=y . 2 4 ...config 26 ejecutando el siguiente comando: crossmake e c b a t 9 1 d e f c o n f i g o make ARCH=arm CROSS COMPILE=arm−none −e a b i − e c b a t 9 1 d e f c o n f i g A continuaci´ on se muestra una secci´ on de este archivo: # # A u t o m a t i c a l l y g e n e r a t e d make c o n f i g : don ’ t e d i t # Linux k e r n e l v e r s i o n : 2 . CONFIG AEABI=y .. t m p S y s t e m . MODPOST 1 m o d u l e s K e r n e l : a r c h / arm / b o o t / Image i s r e a d y AS a r c h / arm / b o o t / c o m p r e s s e d / h e a d . mod ... map OBJCOPY a r c h / arm / b o o t / Image B u i l d i n g modules . Finalmente damos incio al proceso de compilaci´ on: c r o s s m a k e − j 2 ( o make ARCH=arm CROSS COMPILE=arm−none −e a b i − − j 2 ) Si no ocurre ning´ un error. o LD a r c h / arm / b o o t / c o m p r e s s e d / v m l i n u x OBJCOPY a r c h / arm / b o o t / zImage K e r n e l : a r c h / arm / b o o t / zImage i s r e a d y y el contenido de los siguientes ditrectorios debe ser algo como: $ l s a r c h / arm / b o o t / b o o t p c o m p r e s s e d Image $ l s vmlinux ∗ vmlinux vmlinux .. al finalizar debemos observar lo siguiente: LD vmlinux SYSMAP System .. 6 . o GZIP a r c h / arm / b o o t / c o m p r e s s e d / p i g g y . o AS a r c h / arm / b o o t / c o m p r e s s e d / p i g g y . sh Makefile zImage 26 este archivo es utilizado por las herramientas de compilaci´ on para determinar que soporte fu´ e incluido en el kernel .. ko CC a r c h / arm / b o o t / c o m p r e s s e d / m i s c . s t a g e 2 .. o CC d r i v e r s / s c s i / s c s i w a i t s c a n . map SYSMAP . o i n s t a l l . gz LD [M] d r i v e r s / s c s i / s c s i w a i t s c a n . 4 # S a t J u l 25 1 1 : 3 9 : 0 7 2009 # CONFIG ARM=y .Carlos Iv´ an Camargo Bare˜ no 49 Una vez declaradas estas variables de entorno debemos generar el archivo oculto ..

o Im´ agen interna initramfs. o \ s o u n d / b u i l t −i n . o \ −−end−g r o u p \ .S.o Emulaci´ on de punto flot´ ante espec´ ıfico de la arquitectura. 8. 3. o \ a r c h / arm / mach−a t 9 1 / b u i l t −i n . por ejemplo el objeto arch/arm/mm/built-in. A continuaci´ on se enlazan una serie de objetos con el nombre built-in. 4. ejecutando el comando: c r o s s m a k e − j 2 V=1 Al finalizar el proceso de compilaci´ on obtenemos: arm−none −e a b i −l d −EL −p −−no−u n d e f i n e d −X −o v m l i n u x −T a r c h / arm / k e r n e l / v m l i n u x .o C´ odigo gen´ erico especifico de la arquitectura. la ruta del archivo indica la funci´ on que realiza el objeto. o a r c h / arm / nwfpe / b u i l t −i n . A continuaci´ on se realiza la descripci´ on de los componentes de la im´ agen del kernel vmlinux[16] 1. 7.o C´ odigo de inicializaci´ on del kernel. o n e t / b u i l t −i n .o realiza operaciones de manejo de memoria espec´ ıficas a la arquitectura arm. o \ i n i t / b u i l t −i n .o C´ odigo del kernel espec´ ıfico de la arquitectura. el cual se genera a partir de arch/arm/kernel/head.lds) se realiza el proceso de enlace del archivo vmlinux. arch/arm/mm/built-in. o i p c / b u i l t −i n . o a r c h / arm / k e r n e l / b u i l t −i n .o C´ odigo de inicializaci´ on del kernel dependiente de la arquitectura.lds. o a r c h / arm / l i b / l i b . o a r c h / arm / common / b u i l t −i n . o \ a r c h / arm /mm/ b u i l t −i n . o d r i v e r s / b u i l t −i n . El siguiente objeto es init task. o \ b l o c k / b u i l t −i n . a \ lib / lib .o. o \ l i b / b u i l t −i n .o C´ odigo de manejo de memoria espec´ ıfico de la arquitectura.o.o Hilos y estructuras inicialies utilizadas por el kernel.o indicados en la lista.o. l d s a r c h / arm / k e r n e l / h e a d . tmp kallsyms2 . .25 se muestran los componentes de la im´ agen vmlinux y un tama˜ no de una compilaci´ on en particular que nos da una idea de la relaci´ on de tama˜ nos. o En la primera l´ ınea de el listado anterior (arm-none-eabi-ld -EL -p –no-undefined -X -o vmlinux T arch/arm/kernel/vmlinux. arch/arm/nwfpe/built-in. o \ k e r n e l / b u i l t −i n .50 Componentes de la Im´ agen del kernel Sistemas Embebidos Como nuestro inster´ es en este punto es entender la estructura de la im´ agen del kernel podemos indicarle a nuestra herramienta de compilaci´ on que nos muestre m´ as informaci´ on del proceso. el cual establece estructuras de datos e hilos que utilizar´ a el kernel. En la Figura 1. arch/arm/mach-at91/built-in. arch/arm/kernel/built-in. o c r y p t o / b u i l t −i n . o \ −− s t a r t −g r o u p \ u s r / b u i l t −i n . o a r c h / arm / k e r n e l / i n i t t a s k . y contiene rutinas de inicializaci´ on del kernel. 5. Este proceso se explicar´ a detalladamente m´ as adelante. init task. incluyendo los objetos (archivos . 2. 9. N´ otese que el primer archivo enlazado es head. o \ s e c u r i t y / b u i l t −i n . utilizando el script de enlace vmlinux. arch/arm/common/built-in. 6. init/built-in. arch/arm/kernel/head. o \ f s / b u i l t −i n . usr/built-in. a a r c h / arm / l i b / b u i l t −i n . o mm/ b u i l t −i n .o C´ odigo de inicializaci´ on espec´ ıfico de la plataforma.

25: Componentes de la Imag´ en del kernel de Linux vmlinux 10. lib/lib. kernel/built-in.a Diferentes funciones auxiliares. espec´ ıfico de la aquitectura. sound/built-in.o C´ odigo de componentes com´ unes de manejo de memoria.o Red de Linux.o Comunicaci´ on Interproceso.Carlos Iv´ an Camargo Bare˜ no 51 Figura 1. security/built-in. mm/built-in.o Drivers de sonido.tmp kallsyms2. 20.a Diferentes funciones auxiliares. 14. 18. 15. . 11. ipc/built-in.o Drivers internos o drivers no cargables. 19.o Componentes de seguridad de Linux.o Tabla de s´ ımbolos. net/built-in. 12. 16. arch/arm/lib/lib.o Funciones auxiliares comunes del kernel. lib/built-in. 17. drivers/built-in. 13.o C´ odigo de componentes com´ unes del kernel. .

n o t e −R . A continuaci´ on describiremos el proceso que se realiza para crear una im´ agen compatible con u-boot. comment −S v m l i n u x l i n u x .6M. b i n ( 3 .26 indica la secuencia de ejecuci´ on de aplicaciones cuando se energiza nuestra plataforma. Inicializaci´ on del kernel Como se mencion´ o anteriormente. posee un programa residente en una peque˜ na ROM interna que revisa los controladores de memorias flash en busca de un programa v´ alido. La Figura 1. b i n > l i n u x . 4 MBytes ) $ arm−none −e a b i −o b j c o p y −O b i n a r y −R . para que se descargue una aplicaci´ on a la memoria RAM interna utilizando el puerto de depuraci´ on serial a una velocidad de 115200 baudios. 4 MBytes ) $ g z i p −c −9 l i n u x . Debido a que la RAM interna del AT91RM9200 es de tan solo 16kBytes.26: Flujo de ejecuci´ on en la inicializaci´ on de plataforma ECB AT91 La primera aplicaci´ on en ejecutarse es el loader de Darrel 27 . b i n .52 Sistemas Embebidos La im´ agen vmlinux generada tiene un tama˜ no relativamente grande lo que la hace inconveniente para ser almacenada en un dispositivo Flash. 1.5. por lo que el programa interno de inicializaci´ on dara comienzo a una comunicaci´ on Xmodem. Figura 1. el loader de Linux (u-boot) y la imagen del kernel. Recordemos que incialmente el SoC no posee ninguna aplicaci´ on v´ alida en la memoria DataFlash. $ c r o s s m a k e − j 3 v m l i n u x ( 4 . el cargador de Linux m´ as utilizado para las plataformas embebidas. el SoC AT91RM9200. como resultado obtenemos un archivo de 1.com/ . El primer paso para es reducir el tama˜ no del ejecutable ELF vmlinux es eliminar la informaci´ on de depuraci´ on (notas y comentarios). 27 Originalmente creado por Darrel Harmon: http://dlharmon. es necesario utilizar otra aplicaci´ on para poder cargar el loader de Linux U-boot en la memoria SDRAM externa (con capacida de de 32Mbytes). por esta raz´ on se acostrumbra comprimirla. la tercera parte del archivo original. En la familia de plataforma ECB AT91 se utiliza la memoria DataFlash para almacenar: el bootloader. gz ( 1 . 6M) A continuaci´ on se comprime el archivo resultante utilizando la herramienta gzip.

1. A continuaci´ on se muestra el comando ejecutado por las herramientas de compilaci´ on al crear el ejecutable loader arm− e l f −l d − B s t a t i c −T u−b o o t . Su c´ odigo fuente lo podemos descargar utilizando el siguiente comando: $ s v n co h t t p : / / s v n . el proceso de enlazado. / l i b / gcc − l i b / arm− e l f / 3 . 2 . o −− s t a r t −g r o u p −−no−warn−m i s m a t c h −L / home / a t 9 1 / g n u t o o l s / arm− e l f / b i n / . o s r c / b o a r d . o s r c / xmodem . o s r c / d i v 0 . l d s − B s t a t i c −T $ ( LDSCRIPT ) − T t e x t $ ( TEXT BASE ) −−gap− f i l l =0 x f f 0 x00000000 $ ( AOBJS ) $ ( COBJS ) $ ( LDSCRIPT ) $ (LD) $ (LDFLAGS) $ ( AOBJS ) $ ( COBJS ) \ −− s t a r t −g r o u p $ ( PLATFORM LIBS ) −−end−g r o u p \ −Map l o a d e r . controlar la memoria DataFlash y almacenar aplicaciones en ella.c src/interrupts. . o s r c / s e r i a l . y la creaci´ on del archivo a descargar en la plataforma: AOBJS = COBJS = LDSCRIPT : = LDFLAGS += OBJCFLAGS += TEXT BASE = loader : src / s t a r t . o s r c / xmodem . Es interesante analizar esta aplicaci´ on.S y el c´ odigo en C src/board. es una versi´ on ´ nicamente las operaciones mencioandas anteriormente. lo que lo hace interesante para plataformas en las que no se puede ejecutar Linux. implementar un protocolo xmodem que permita transferir aplicaciones a la memoria SDRAM. De ella podemos extraer las partes m´ as interesantes: Los objetos que hacen parte del ejecutable. o s r c / i n t e r r u p t s . o / / ASSEMBLER OBJECTS s r c / b o a r d . o s r c / d a t a f l a s h . o u−b o o t .c src/serial. lo que resulta en un reducida de este y permite u archivo adecuado para ser almacenado en la memoria RAM interna (9. configurar el puerto serie.c src/div0.c. o s r c / d a t a f l a s h . Darrel’s Loader Esta aplicaci´ on permite configurar la memoria externa SDRAM. o r g / s v n / s r c / e m q b i t / ECB AT91 V2 / d a r r e l l −l o a d e r / La estructura del c´ odigo fuente se muestra en el siguiente listado: |−− | | | | | | | ‘−− include |−− asm | |−− a r c h | |−− p r o c | ‘−− p r o c −armv ‘−− l i n u x |−− b y t e o r d e r ‘−− mtd src Antes de estudiar el c´ odigo fuente demos un vistazo al archivo Makefile para ver el proceso de compilaci´ on. a r h u a c o . encadenamos los objetos AOBJS y COBJS utilizando el script de enlazado u-boot. map −o l o a d e r loader $ ( OBJCOPY ) $ {OBJCFLAGS} −O b i n a r y $< $@ loader . Para generar el ejecutable loader (en formato ELF).Carlos Iv´ an Camargo Bare˜ no 53 1. o s r c / s e r i a l .c src/dataflash. l d s − T t e x t 0 x00000000 s r c / s t a r t . map −o l o a d e r . ya que esta se ejecuta sin ning´ un soporte de sistema operativo. bin : Como podemos observar.5.c src/xmodem. El loader de Darrel est´ a basado en u-boot. 1 − l g c c −−end−g r o u p −Map l o a d e r . o s r c / i n t e r r u p t s .3 kBytes).lds. esta aplicaci´ on esta compuesta por el c´ odigo en ensamblador src/start. o s r c / d i v 0 .

S) Cuando se crea un ejecutable para ser utilizado en una plataforma espec´ ıfica.bss 4. text : { src / s t a r t .S (C runtime startup code). es necesario incluir el archivo crt0.. Este archivo contiene el punto de entrada start y est´ a encargado de las siguientes funciones: 1. = ALIGN ( 4 ) .data . got : { ∗ ( . Inicializar la secci´ on . = ALIGN ( 4 ) . data ) } . . 3. = 0 x00000000 . .bss ser´ an incluidas en el ejecutable y se encuentran en la misma regi´ on de memoria (lo que era de esperarse ya que solo tenemos la memoria interna RAM).lds OUTPUT FORMAT( ” e l f 3 2 − l i t t l e a r m ” . crt0.S. ” e l f 3 2 − l i t t l e a r m ” ) / ∗ OUTPUT FORMAT( ” e l f 3 2 −arm ” . rodata : { ∗(. . bss : { ∗ ( . bss ) } end = . . vectors Tabla de vectores de excepciones. . .54 A continuaci´ on se muestra el contenido del archivo u-boot. este script de enlazado nos informa que las secciones . . = ALIGN ( 4 ) . text ) } Sistemas Embebidos (.got y . got ) } . } Este archivo indica que la primera direcci´ on del ejecutable es la 0x0 y que la primera instrucci´ on en ejecutarse (definida por ENTRY ) se encuentra en el s´ ımbolo start definida en el archivo start.rodata . por otro lado. = ALIGN ( 4 ) . o ∗(. Deben estar colocados en la direcci´ on 0x0000. . ” e l f 3 2 −arm ” . Inicilizaci´ on de las pilas (stacks). rodata ) } .data (datos inicializados) de la memoria no vol´ atil. ” e l f 3 2 −arm ” ) ∗ / OUTPUT ARCH( arm ) ENTRY( s t a r t ) SECTIONS { . Copiar el contenido de la secci´ on .text .S (startup. ” e l f 3 2 − l i t t l e a r m ” . = ALIGN ( 4 ) . 2. bss start = . data : { ∗(. Hacer el llamado al punto de entrada main ( start armboot para el Darrel’s loader) Y esta compuesto por: 1. text ) .

xmpdem. 5. sin embargo.Carlos Iv´ an Camargo Bare˜ no 55 2. interrupts. pabort handler Manejador de las excepciones prefetch abort. 7. 3. dabort handler Manejador de las excepciones data abort.c.c: Inicializa y configura el puerto serial de depuraci´ on (DBGU) a uan velocidad ed 115200 baudios.c A continuaci´ on se realiza una descripci´ on de los archivos que hacen parte del loader de Darrel: serial.c. start armboot) serial. Adicionalmente proporciona las funciones: • putc: Transmite un caracter por la interfaz serial de depuraci´ on. Realiza operaciones de inicializaci´ on espec´ ıfica de la arquitectura.c: Remplazo (dummy) del manejador divisi´ on por cero de GNU/Linux. div0. fiq handler Manejador de las FIQ (Fast Iterrupt Request). reset handler Esta funci´ on maneja el reset . Una vez se han ejecutado las operaciones mendionadas anteriormente se hace un llamado al punto de entrada start armboot (ldr pc. y proporciona funciones de alto nivel para la escritura de la DataFlash. El archivo crt0. interrupts.c: Inicializa el puerto SPI. par.c. 6. 8. y es fuertemente dependiente de la arquitectura.c El archivo board. .c: Proporciona funciones para el manejo de interrupciones e implementaci´ on de retardos. • getc: Recibe un caracter por la interfaz serial de depuraci´ on. y es el punto de entrada principal de un ejecutable. 4.S es escrito en languaje ensamblador. addr src. xmodem. swi handler Manejador de las interrupciones software. dataflash. los fabricantes proporcionan ejemplos de este tipo de archivos para que pueden ser utilizados sin tener que estudiar profundamente la arquitectura y el lenguaje ensamblador de la misma. board.c. undef handler Es el manejador de las instrucciones no definidas. • puts: Transmite una cadena de caracteres.c proporciona el punto de entrada start armboot y realiza las siguientes operaciones: Configuraci´ on del Controlador de manejo de potencia (PMC). paridad. size) div0. irq handler Manejador de las IRQ (Interrupt Request).c: Implementa la recepci´ on serial utilizando elprotocolo xmodem. dataflash. solo programadores expertos con un muy buen conocimiento de la arquitectura podr´ ıan escribirlo. • write dataflash(addr dest. 8 bits de datos.

Sistemas Embebidos Una vez se carga el archivo loader.bin utilizando el protocolo xmodem. solo que se cargan las aplicaciones en diferentes direcciones de memoria. el que resulta de quitarle al archivo ELF la informaci´ on de depuraci´ on y notas: / home / a t 9 1 / g n u t o o l s / arm− e l f / b i n / arm− e l f −o b j c o p y −−gap− f i l l =0 x f f −O b i n a r y l o a d e r l o a d e r .bin en la memoria DataFlash. AT91F DataflashInit ( ) . 0 . } } } .bin. l e n ) ) p u t s ( ” D a t a f l a s h w r i t e s u c c e s s f u l \n ” ) . l e n = rxmodem ( ( char ∗ ) 0 x20000000 ) . del men´ u permite almacenar el archivo loader.56 Hace un llamado a la incializaci´ on del puerto serie de depuraci´ on serial init() Configura la SDRAM externa try configure sdram Despliega un men´ u de funciones. i f ( w r i t e d a t a f l a s h ( DATAFLASH UBOOT BASE . b i n El programa desplegar´ a el siguiente men´ u: D a r r e l l ’ s l o a d e r − Thanks t o t h e u−b o o t p r o j e c t V e r s i o n 1 . asm ( ” l d r pc . i f ( r e a d d a t a f l a s h ( DATAFLASH UBOOT BASE . B u i l d J u l 29 2007 1 2 : 0 4 : 0 4 RAM: 3 2MB 1: 2: 3: 4: 5: 6: Upload D a r r e l l ’ s Upload u−b o o t t o Upload K e r n e l t o S t a r t u−b o o t Upload F i l e s y s t e m Memory t e s t loader to Dataflash Dataflash Dataflash image La opci´ on 1. del men´ u transfiere la ejecuci´ on e l s e i f ( key == ’ 4 ’ | | ( ( s c a n s > 3 0 0 0 0 0 ) && a u t o b o o t ) ) { i f ( AT91F DataflashInit ()){ dataflash print info (). 0 x1C000 . } Aca vemos como si se elije la opci´ on 2. 0 x20000000 . Las opciones 2 y 3 son similares a la 1. La opci´ on 4. =0 x20700000 ” ) . ( char ∗ ) 0 x20700000 ) ) { p u t s ( ” D a t a f l a s h r e a d s u c c e s s f u l : S t a r t i n g U−b o o t \ n ” ) . dataflash print info (). observemos el c´ odigo fuente que implementa estas opciones: e l s e i f ( key == ’ 2 ’ ) { p u t s ( ” P l e a s e t r a n s f e r u−b o o t . Realiza las operaciones del men´ u. se despliega un mensaje indicandole al usuario que transmita el archivo u-boot. el programa de inicializaci´ on almacenado en la memoria ROM interna lo ejecutar´ a cada vez que se reinicie la plataforma. dispmenu = 1 . despu´ es se ejecuta la funci´ on rxmodem la que recibe los datos por el serial y lo almacena en la SDRAM externa (direcci´ on 0x20000000) y finalmente se almacena esta informaci´ on en la direcci´ on DATAFLASH UBOOT BASE. b i n v i a Xmodem\ n \ 0 ” ) . una vez hecho esto.

. U-boot La opci´ on n´ umero 4 del men´ u copia el programa u-boot almacenado en la DataFlash a la memoria SDRAM y comienza su ejecuci´ on. no en la direcci´ on donde son almacenadas. OK Para crear una im´ agen con el formato U-boot basta con ejecutar el siguiente comando: $ mkimage −A arm −O l i n u x −T k e r n e l −C g z i p −d l i n u x . gzip el m´ etodo de compresi´ on. este u informaci´ on sobre el tipo de sistema operativo. con lo que se inicia la ejecuci´ on del programa almacenado en la DataFlash. 0x20008000 la direcci´ on de carga y punto de entrada (son iguales para kernels superiores al 2. b i n . La siguiente informaci´ on es desplegada cuando u-boot se inicializa una imagen del kernel de linux. NOR. Es cap´ az ´ ltimo almacena de iniciar una variedad de tipos de archivos. linux como sistema operativo. verificaci´ on de integridad via CRC.3. gz e c b a t 9 1 . img −a 0 x20008000 −e 0 x20008000 −n ” L i n u x K e r n e l Image ” \ Ac´ a definimos ARM como arquitectura. 5 MB Load A d d r e s s : 20008000 E n t r y P o i n t : 20008000 V e r i f y i n g Checksum . 4 8 MB 0 x20008000 0 x20008000 El siguiente listado muestra la estructura del envabezado definida por u-boot.img el archivo de salida. en esta secci´ on se realizar´ a una descrici´ on del loader u-boot. la direcci´ on de carga. / ∗ Image Header Magic Number / ∗ Image Header CRC Checksum / ∗ Image C r e a t i o n T i m e s t a m p ∗/ ∗/ ∗/ . y textos descriptivos. 0 3 kB = 1 . adem´ as de un formato especial propio. . .5. en ella podemos obervar sus componentes y el tama˜ no de cada uno de ellos. Memoria SD. 1. seriales. Image Name : L i n u x K e r n e l Image Image Type : ARM L i n u x K e r n e l Image ( g z i p c o m p r e s s e d ) Data S i z e : 1550369 B y t e s = 1 . Ethernet. Kernel como el tipo de im´ agen.Carlos Iv´ an Camargo Bare˜ no 57 En esta opci´ on se copian 0x1C000 bytes del contenido de la memoria DataFlash comenzando en la posici´ on DATAFLASH UBOOT BASE a la direcci´ on de memoria 0x20700000 (SDRAM externa) y luego se carga el contador de programa con la direcci´ on 0x20700000. # # B o o t i n g image a t c0021840 . tipos de compresi´ on. . t ih time . U-boot es un bootloader que permite cargar archivos utilizando una gran variedad de perif´ ericos como: Puerto serie. img Image Name : Created : Image Type : Data S i z e : Load A d d r e s s : Entry Point : L i n u x K e r n e l Image F r i J u n 26 0 9 : 2 6 : 0 3 2009 ARM L i n u x K e r n e l Image ( g z i p c o m p r e s s e d ) 1550369 B y t e s = 1 5 1 4 . OK U n c o m p r e s s i n g K e r n e l Image . . . typedef struct uint32 uint32 uint32 image header { t ih magic . Esta informaci´ on es almacenada en el encabezado de la im´ agen y puede ser leido utilizando el comando: $mkimage − l / home / a t 9 1 / b i n a r i e s / e c b a t 9 1 . NAND.gz el archivo de entrada y ecb at91.2. Memorias Flash Paraleas. es importante hacer notar que el programa debe ser enlazado para que las secciones est´ en en la posici´ on de memoria donde ser´ an ejecutadas (0x20700000).X) Linux Kernel Image el nombre de la im´ agen linux. el punto de entrada. t ih hcrc .bin.

o : = $ ( SOBJS : . o = . $ ( COBJS ) ) : = $ ( a d d p r e f i x $ ( o b j ) . c ) : = $ ( a d d p r e f i x $ ( o b j ) . adicionando las siguientes l´ ıneas.58 uint32 uint32 uint32 uint32 uint8 t uint8 t uint8 t uint8 t uint8 t } image header t t t t ih ih ih ih ih ih ih ih ih size . /∗ comp . /∗ n a m e [ IH NMLEN ] .3. el archivo de reglas de Configuraci´ on se muestra a continuaci´ on: i n c l u d e $ ( TOPDIR ) / c o n f i g . o = . /∗ load . /∗ ep . mk LIB COBJS SRCS OBJS SOBJS = $ ( o b j ) l i b $ (BOARD ) . o f l a s h .5. Portando U-boot a la familia de plataformas ECB AT91 Es necesario modificar varios archivos para que u-boot soporte la familia de plataformas ECB AT91: Makefile Se le debe indicar a las herramientas de compilaci´ on la nueva plataforma. ecb at91 config : unconfig @$(MKCONFIG) $ (@: c o n f i g = ) arm a r m 9 2 0 t e c b a t 9 1 NULL a t 9 1 r m 9 2 0 0 MAKEALL Se debe agregar la siguiente entrada en el archivo MAKEALL: LIST ARM9=” \ − − − − − a t 9 1 r m 9 2 0 0 d k cmc pu2 e c b a t 9 1 board/ecb at91/Makefile En el directorio board/ecb at91 se alojan los archivos que dan soporte a la nueva arquitectura. S ) $ ( COBJS : . 1. /∗ type . /∗ arch . $ ( SOBJS ) ) $ ( LIB ) : $ ( o b j ) . a : = $ (BOARD ) . /∗ os . d e p e n d $ ( OBJS ) $ ( SOBJS ) $ (AR) $ (ARFLAGS) $@ $ ( OBJS ) $ ( SOBJS ) clean : rm − f $ ( SOBJS ) $ ( OBJS ) . Image Data S i z e Data Load A d d r e s s Entry Point Address Image Data CRC Checksum Operating System CPU a r c h i t e c t u r e Image Type C o m p r e s s i o n Type / ∗ Image Name Sistemas Embebidos ∗/ ∗/ ∗/ ∗/ ∗/ ∗/ ∗/ ∗/ ∗/ t. o a t 4 5 . /∗ dcrc .

la interfaz de red y la memoria DataFlash. d e p e n d # d e f i n e s $ ( obj ) . inicializa la SDRAM. la parte importante se encuentra en la definici´ on de la variable COBJS. gd− >bd− >b i d r a m [ 0 ] . bak . } 28 Estos archivos ecbat91.arhuaco.1.patch pueden ser descargados de: http://svn. h> < a t 9 1 r m 9 2 0 0 n e t .org/svn/src/emqbit/ECB AT91 V2/u-boot/u-boot-1. (PHYS SDRAM = 0x20000000 est´ a definido en include/configs/ecb at91.o: soporte gen´ erico para dispositivos flash28 .c Este archivo contiene toda la configuraci´ on espec´ ıfica de la plataforma.o: archivo de la plataforma at45. h> <asm / a r c h / AT91RM9200 .0: soporte a las memorias DataFlash AT45 y flash. board/ecb at91/board. return 0. return 0.h). en la que se incluyen los archivos ecb at91. fija el n´ umero de la plataforma a: MACH TYPE ECBAT91 (1072 definida en include/asmarm/mach-types.h) y los par´ ametros del boot en: PHYS SDRAM + 0x100. } i n t d r a m i n i t ( void ) { gd− >bd− >b i d r a m [ 0 ] . mk s i n c l u d e $ ( obj ) . /∗ ∗ Miscelaneous platform dependant i n i t i a l i s a t i o n s ∗/ void l o w l e v e l i n i t ( void ) { / ∗ R e q u i r e d by a s s e m b l y f u n c t i o n s − do n o t h i n g ∗ / } i n t b o a r d i n i t ( void ) { /∗ Enable C t r l c ∗/ console init f (). y como se puede ver en el siguiente listado. depend t a r g e t i n c l u d e $ ( SRCTREE ) / r u l e s . / ∗ a r c h number o f ECB AT91 b o a r d ∗ / gd− >bd− >b i a r c h n u m b e r = MACH TYPE ECBAT91 . # include # include # include # include <common . s i z e = PHYS SDRAM SIZE . /∗ adress of boot parameters ∗/ gd− >bd− > b i b o o t p a r a m s = PHYS SDRAM + 0 x100 .Carlos Iv´ an Camargo Bare˜ no 59 distclean : clean rm − f $ ( LIB ) c o r e ∗ . depend Este es el formato utilizado para todas las plataformas. h> DECLARE GLOBAL DATA PTR . s t a r t = PHYS SDRAM . h> < l x t 9 7 2 . Adicionalmente.6- .

” D a r r e l l l o a d e r ” } . } # endif include/configs/ecb at91. s t a t i c d a t a f l a s h p r o t e c t t a r e a l i s t [ NB DATAFLASH AREA ] = { /∗ define the dataflash o f f s e t s ∗/ {DATAFLASH LOADER BASE / ∗ 0 ∗ / . FLAG PROTECT SET . DATAFLASH ENV UBOOT BASE − 1 . p phyops− >I s P h y C o n n e c t e d = l x t 9 7 2 I s P h y C o n n e c t e d . controlador de memorias SDRAM y memorias Flash. DATAFLASH FILESYSTEM BASE − 1 . a r e a l i s t ) . FLAG PROTECT SET . DATAFLASH UBOOT BASE − 1 . algunas de estas ellas definen el valor de registros de configuraci´ on de perif´ ericos como: El controlador del reloj del sistema. FLAG PROTECT CLEAR . h> void AT91F DataflashMapInit ( void ) { s t a t i c i n t c s [ ] [ CFG MAX DATAFLASH BANKS] = { / ∗ L o g i c a l a d r e s s . {DATAFLASH ENV UBOOT BASE . FLAG PROTECT CLEAR . FLAG PROTECT SET . ” K e r n e l ” } . 0 x 1 f f f f f . . 0 } . ” F i l e s y s t e m ” } . ” E n v i r o n m e n t ” } . }. ”U−b o o t ” } . } # e n d i f / ∗ CONFIG COMMANDS & CFG CMD NET ∗ / # e n d i f / ∗ CONFIG DRIVER ETHER ∗ / # i f d e f CONFIG HAS DATAFLASH # i n c l u d e < d a t a f l a s h . {DATAFLASH KERNEL BASE . DATAFLASH KERNEL BASE − 1 . CS ∗ / {CFG DATAFLASH LOGIC ADDR CS0 .h Este archivo contiene variables que son utilizadas para la inicializaci´ on de la plataforma. AT91F MapInit ( cs . p phyops− >A u t o N e g o t i a t e = l x t 9 7 2 A u t o N e g o t i a t e . p phyops− >G e t L i n k S p e e d = l x t 9 7 2 G e t L i n k S p e e d . {DATAFLASH FILESYSTEM BASE . }.60 Sistemas Embebidos # i f d e f CONFIG DRIVER ETHER # i f (CONFIG COMMANDS & CFG CMD NET ) /∗ ∗ Name : ∗ at91rm9200 GetPhyInterface ∗ Description : ∗ I n i t i a l i s e t h e i n t e r f a c e f u n c t i o n s t o t h e PHY ∗ Arguments : ∗ None ∗ Return value : ∗ None ∗/ v o i d a t 9 1 r m 9 2 0 0 G e t P h y I n t e r f a c e ( AT91PS PhyOps p p h y o p s ) { p phyops− >I n i t = l x t 9 7 2 I n i t P h y . {DATAFLASH UBOOT BASE .

255. y en este ejemplo fija la memoria RAM en 32 Mbytes. El comando bootm C0021840 (bootcmd) es utilizado para iniciar la im´ agen almacenada en la direcci´ on de memoria 0xC0021840 (direcci´ on donde almacena el loader de Darrel la im´ agen del kernel). la consola es el dispositivo serial /dev/ttyS0 configurado a una velocidad de 115200 baudios.168. Las variables ethaddr. netmask. # d e f i n e CONFIG COMMANDS \ ( ( CONFIG CMD DFL | CFG CMD NET | CFG CMD PING | CFG CMD DHCP ) & \ ˜ ( CFG CMD BDI | CFG CMD FPGA | CFG CMD MISC ) ) / ∗ Remember t h a t you m u s t h a v e t h e same mapping i n t h e D a r r e l l l o a d e r ∗ / # d e f i n e NB DATAFLASH AREA 5 / ∗ p r o t e c t e d a r e a s ( 4 + u−b o o t e n v ) ∗ / # d e f i n e DATAFLASH MAX PAGESIZE 1056 # d e f i n e DATAFLASH LOADER BASE ( 0 ∗ DATAFLASH MAX PAGESIZE ) . ipaddr.Carlos Iv´ an Camargo Bare˜ no A continuaci´ on se muestra un segmento de este archivo. bit de paridad y 8 bits de datos y que debe esperar 1 segundo para montar el sistema de archivos. 1 1 5 2 0 0 n8 r o o t d e l a y =1 ” CONFIG ETHADDR 00:00:00:00:00:5 b CONFIG NETMASK 255.255.128 CONFIG BOOTDELAY 2 CONFIG BOOTCOMMAND ” bootm C0021840 ” CONFIG BOOTFILE ” e c b a t 9 1 .0.0 CONFIG IPADDR 192. este conteo puede detenerse para interactuar con u-boot. almacenarlo en la direcci´ on requerida y pasarle los par´ ametros almacenados en bootcmd. indica que el sistema de archivos se encuentra en el dispositivo /dev/mmcblk0p1 y utiliza el sistema de archivos ext3. bootm utiliza la informaci´ on almacenada en el encabezado de la im´ agen para utilizar el m´ etodo de descompresi´ on adecuado. img ” CONFIG ROOTPATH ” / home / a t 9 1 / r o o t f s ” CONFIG LOADADDR 0 x20200000 La variable bootargs son par´ ametros pasados al kernel en su inicializaci´ on.0.168. serverip configuran la interfaz de red y las direcciones IP de la plataforma y de un servidor de donde puede descargarse la im´ agen del kernel. La variable bootdelay fija el n´ umero de segundos que esperar´ a u-boot para ejecutar el comando almacenado en bootcmd.135 CONFIG SERVERIP 192. en el que se define la arquitectura: / ∗ ARM a s y n c h r o n o u s c l o c k ∗ / # d e f i n e AT91C MAIN CLOCK # d e f i n e AT91C MASTER CLOCK # d e f i n e AT91 SLOW CLOCK # define # define # define # undef # define CONFIG ARM920T CONFIG AT91RM9200 CONFIG ECB AT91 CONFIG USE IRQ USE 920T MMU 1 1 1 1 / ∗ e n a b l e p a s s i n g o f ATAGs ∗/ 61 180000000 60000000 32768 /∗ /∗ /∗ /∗ /∗ slow c l o c k ∗/ ∗/ ∗/ ∗/ ∗/ T h i s i s an ARM920T Core I t ’ s an A t m e l AT91RM9200 SoC on an AT91RM9200DK Board we don ’ t n e e d IRQ / FIQ s t u f f # d e f i n e CONFIG CMDLINE TAG 1 # d e f i n e CONFIG SETUP MEMORY TAGS 1 # d e f i n e CONFIG INITRD TAG 1 # i f n d e f CONFIG SKIP LOWLEVEL INIT # d e f i n e CFG LONGHELP Este archivo tambi´ en incluye el valor predeterminado de las variables de entorno utilizadas por uboot: # define # define # define # define # define # define # define # define # define # define CONFIG BOOTARGS ”mem=32M r o o t = / dev / mmcblk0p1 r o o t f s t y p e = e x t 3 c o n s o l e = t t y S 0 .

6 de http://sourceforge. p a t c h $ t a r x j f u−b o o t − 1 . 6 ( J u l 29 2007 − 1 2 : 1 2 : 3 8 ) DRAM: 32 MB Atmel : F l a s h : 0 kB D a t a F l a s h : AT45DB161 Nb p a g e s : 4096 Page S i z e : 528 S i z e = 2162688 b y t e s . El primer paso es obviamente descargar el c´ odigo fuente de la versi´ on 1. o r g / s v n / s r c / e m q b i t / ECB AT91 V2 / u−b o o t / u−b o o t − 1. t a r . 6 Aplicamos el patch $ cat .1. p a t c h | p a t c h −p1 Configuramos y generamos las herramientas utilizadas por u-boot (entre ellas mkimage). $ make t o o l s ( E s t e e s un c o m e n t a r i o ) ´ ltimo compilamos u-boot: Por u $ make ARCH=arm CROSS COMPILE=arm−none −e a b i − o ´ definido ) crossmake ( s i e l a l i a s crossmake e s t a Si el proceso se sigui´ o correctamente y no se presentan errores al final del proceso obtenemos el mensaje: arm−none −e a b i −o b j c o p y −−gap− f i l l =0 x f f −O s r e c u−b o o t u−b o o t . / u−b o o t − 1.net/projects/uboot/. . b i n Lo que nos indica que se gener´ o exitosamente el archivo u-boot. como se mencion´ o anteriormente esta opci´ on copia el archivo u-boot desde la DataFlash a la memoria SDRAM y es ejecutado desde alli. $ make e c b a t 9 1 c o n f i g Configuring for ecb at91 board . despu´ es debemos descargar el patch que da soporte a la familia de plataformas ECB AT91: $ wget h t t p : / / s v n . con lo que se desplegar´ a el siguiente mensaje: D a t a f l a s h r e a d s u c c e s s f u l : S t a r t i n g U−b o o t U−Boot 1 .62 # define # define # define # define DATAFLASH UBOOT BASE DATAFLASH ENV UBOOT BASE DATAFLASH KERNEL BASE DATAFLASH FILESYSTEM BASE ( 1 2 ∗ DATAFLASH ( 1 2 2 ∗ DATAFLASH ( 1 3 0 ∗ DATAFLASH ( 1 6 6 4 ∗ DATAFLASH MAX MAX MAX MAX PAGESIZE ) PAGESIZE ) PAGESIZE ) PAGESIZE ) Sistemas Embebidos Compilaci´ on de U-boot en la familia de plataformas ECB AT91 A continuaci´ on se indican los pasos necesarios para generar el archivo u-boot.6 − e c b a t 9 1 . 1 . a r h u a c o . s r e c arm−none −e a b i −o b j c o p y −−gap− f i l l =0 x f f −O b i n a r y u−b o o t u−b o o t .1. que puede ser descargado utilizando la opci´ on 2 del men´ u del loader de Darrel (Upload u-boot to Dataflash) y el protocolo xmodem.6 − e c b a t 9 1 . bz2 $ cd u−b o o t − 1 .bin. 1 . Podemos verificar que el archivo fu´ e generado y almacenado en la Dataflash podemos ejecutar la opci´ on n´ umero 4 del men´ u del loader de Darrel (Start u-boot). . . 1 .1. 6 .bin que ser´ a almacenado en la memoria DataFlash por el loader de Darrel.

1 2 8 : / home / a t 9 1 / r o o t f s .128 r o o t p a t h =” / home / a t 9 1 / r o o t f s ” netmask =255.168.0 b o o t f i l e =” e c b a t 9 1 . Almacenamiento de la im´ agen del kernel Una vez creada la im´ agen del kernel (ecb at91. r e t r a n s =500 i p = : : : : : e t h 0 : on ecb at91> save 1. 1 6 8 . 0 . 1 1 5 2 0 0 n8 r o o t = / dev / n f s n f s r o o t = 1 9 2 . esto lo podemos hacer de dos formas: Almacenandola directamente en una memoria no vol´ atil o carg´ andola en la memoria RAM y ejecut´ andola desde all´ ı. s Podemos generar una nueva variable de entorno.135 serverip =192.Carlos Iv´ an Camargo Bare˜ no L o g i c a l a d d r e s s : 0 xC0000000 Area 0 : C0000000 t o C000317F (RO) Area 1 : C0003180 t o C001F73F (RO) Area 2 : C001F740 t o C002183F Area 3 : C0021840 t o C01ACFFF Area 4 : C01AD000 t o C020FFFF (RO) In : serial Out : serial Err : serial PHY n o t c o n n e c t e d ! ! H i t any key t o s t o p a u t o b o o t : 2 63 Darrell loader U−b o o t Environment Kernel Filesystem Si se presiona cualquier tecla antes de que el contador llegue a 0. podemos interactuar con u-boot.255.4. 1 1 5 2 0 0 n8 r o o t d e l a y =1 stdin=serial stdout= serial stderr=serial Environment s i z e : 345/8188 Podemos cambiar el valor predeterminado de la variable bootdelay a 1: ecb at91> setenv bootdelay 1 Y almacenamos los cambios realizados en una secci´ on de la flash reservada para este fin con el comando: ecb at91> save Saving Environment to d a t a f l a s h .img) con el formato de U-boot debemos probar su correcto funcionamiento. .5.255. img ” l o a d a d d r =0 x20200000 b o o t a r g s =mem=32M r o o t = / dev / mmcblk0p2 r o o t f s t y p e = e x t 3 c o n s o l e = t t y S 0 . si ejecutamos el comando print (Despliega en pantalla las variables de entorno definidas): bootcmd =bootm C0021840 b o o t d e l a y =2 b a u d r a t e =115200 ethaddr =00:00:00:00:00:5 b ipaddr =192. .168. .0. almacenarla en la DataFlash e c b a t 9 1 > s e t e n v n f s a r g s =mem=32M c o n s o l e = t t y S 0 . t i m e o =200 .0.

debemos esperar a que la informaci´ on sea almacenada en la memoria DataFlash. se recomienda esta opci´ on cuando ya se cuente con una im´ agen estable o cuando no existan otros medios (como en el caso de la plataforma ECBOT). La plataforma ECB AT91 posee una interfaz de red que puede ser controlada por u-boot. debe contactarse con el administrador de su equipo para permitir el acceso a e . Una vez finalizada la escritura observaremos el mensaje: %%%%%%%%%%%%%%%%%%%%% Almacenamiento en la memoria RAM El proceso de grabaci´ on en la memoria DataFlash puede tomar alrededor de 6 minutos. t f t p d / srv / t f t p Debe asegurarse que el protocolo tftp utiliza el puerto UDP 69 $ cat / etc / s e r v i c e s | grep t f t p tftp 6 9 / udp ´ l: Ahora creamos el directorio /srv/tftp29 y colocamos la imagen en e 29 Este ´l directorio tiene restricciones de seguridad. sin embargo. debemos tener presente que los ciclos de borrado y escritura de este toman un tiempo mucho mayor que en el caso de las memorias no vol´ atiles. facilitando de esta forma el proceso de desarrollo. esto se hace presionando el pulsador de Rees de observar el set disponible en todas las plataformas de la familia ECB AT91. lo que no lo hace conveniente cuando se est´ a tratando de crear una imagen propia o se est´ an realizando cambios a la misma. mientras se completa la escritura la consola no mostrar´ a ninguna actividad. Seleccionando la opci´ on del men´ u: 3: Upload linux to Dataflash. ese proceso se realiza en segundos. por esto.img utilizando el protocolo xmodem. eso es normal y no se debe reiniciar la board. podemos iniciar la transferencia de la im´ agen a la memoria SDRAM de nuestra plataforma: P l e a s e t r a n s f e r l i n u x v i a Xmodem R e c e i v i n g Xmodem t r a n s f e r Cuando aparezca este mensaje se debe transmitir el archivo ecb at91. Cuando necesitamos modificar esta im´ agen ya sea porque queremos hacerlo nosotros mismos o porque deseamos una versi´ on de kernel m´ as moderna. Unos minutos despu´ es la transferencia finaliza.64 Almacenamiento en la memoria DataFlash Sistemas Embebidos Cuando almacenamos la im´ agen del kernel de Linux a un medio de almacenamiento no vol´ atil. Inicialmente debemos ejecutar el loader de Darrel. A continuaci´ on se desciben los pasos que deben seguirse para realizar esta operaci´ on: Primero debemos instalar y configurar el servidor tftp en el computador donde se tiene las herramientas de desarrollo: $ aptitude install tftpd tftp . Inmediatamente despu´ men´ u del loader debemos oprimir cualquier tecla para interrumpir la ejecuci´ on autom´ atica del u-boot. Se debe agregar la siguiente l´ ınea al archivo /etc/inetd.conf tftp dgram udp wait nobody / usr / sbin / tcpd / usr / sbin / in . es preferible utilizar un m´ etodo de transferencia m´ as r´ apido. Utilizando el protocolo tftp U-boot puede descargar la im´ agen desde un servidor a la memoria SDRAM y ejecutarla desde all´ ı.

30 Direcci´ on IP del PC donde est´ an las herramientas de desarrollo . como vimos anteriormente tanto u-boot como Linux fijan este valor a 1072.0. 2 F i l e n a m e ’ e c b a t 9 1 .5.0 serverip =192.255. img ’ .img.168.128 Estas variables fijan la direcci´ on IP de: la plataforma a 192. 2 s e c o n d s tftp > quit Ahora se deben configurar algunas variables de entorno en nuestra plataforma para indicarle a u-boot la direcci´ on IP. Load a d d r e s s : 0 x20200000 L o a d i n g : ################################################################# ################################################################# ################################################################# ################################################################# ################ done B y t e s t r a n s f e r r e d = 1409031 ( 1 5 8 0 0 7 hex ) ecb at91 > 1.5. del gateway a 192. podemos utilizar un cliente tftp: $ cd / tmp / $ t f t p l o c a l h o s t # from t h e s e r v e r t f t p > g e t e c b a t 9 1 . o u r I P a d d r e s s i s 1 9 2 . Inicializaci´ on del Kernel En general los cargadores de Linux como el u-boot realizan las siguientes funciones: Configurar e inicializar la RAM Inicializar un puerto serial Detectar el tipo de m´ aquina: El boot loader debe proporcionar un valor MACH TYPE XXX al kernel. 1 . 1 6 8 . img ” f i l e a d d r =20200000 gatewayip =192.168.2.12830 . 1 6 8 . 0 . Adicionalmente define el nombre de la im´ agen del kernel a ecb at91.168.168. el nombre y la ubicaci´ on de la im´ agen del kernel. Una vez configurado U-boot podemos descargar la im´ agen a la direcci´ on de memoria 0x20200000: ecb at91 >t f t p TFTP from s e r v e r 1 9 2 . img / s r v / t f t p / Para verificar la correcta configuraci´ on del servidor. la del servidor tftp a 192. Estas variables deben ser modificadas para que contengan los siguientes valores: l o a d a d d r =0 x20200000 b o o t d e l a y =1 b o o t f i l e =” e c b a t 9 1 . img R e c e i v e d 1319525 b y t e s i n 0 .0.Carlos Iv´ an Camargo Bare˜ no 65 $ mkdir / s r v / t f t p / $ chown myuser . 0 .1.0.255. / s r v / t f t p / $ cp e c b a t 9 1 .168.0.1 netmask =255.0.

ARTOS. u-boot ejecuta las instrucciones almacenadas en la variable de entorno bootcmd. Se recomienda colocarlo en los primeros 16kBytes de la RAM. analizando este archivo podemos descubrir el proceso que realiza u-boot al hacer el llamado a la im´ agen del kernel (la que almacenamos utilizando la opci´ on 3 del loader de Darrel). en una regi´ on que no pueda ser modificada por el descompresor del kernel o por el programa initrd. Si no se encuentra este n´ umero se desplegar´ a el mensaje: Bad Magic Number Verifica la integridad del encabezado de la im´ agen. QNX. VXWORKS.26)) se almacena la im´ agen del kernel. El campo size del tag ATAG NONE debe fijarse en 0. De no pasar esta prueba se mostrar´ a el mensaje: Bad Header Checksum. El c´ odigo que implementa el comando bootm se encuentra en el archivo common/cmd bootm. Transferir el control a Linux en la funci´ on do bootm linuxU-boot es un loader que permite trabajar con: LYNXOS. r1 = t´ ıpo de m´ aquina. El tag ATAG CORE puede o no estar desocupado. Si no se supera esta prueba. que para la familia de plataformas ECB AT91 almacena el comando bootm C0021840. se desplegar´ a el mensaje: Bad Data CRC Comprueba que la arquitectura est´ a soportada por u-boot. • Fijar los registros de la CPU: r0 = 0. Descomprime la im´ agen almacenada en la direcci´ on load address (la cual se pasa como par´ ametro en el momento de la creaci´ on de la im´ agen).66 Sistemas Embebidos Configurar la kernel tagged list: El boot loader debe crear e inicializar una estructura llamada kernel tagged list. la cache de datos debe estar desactivada. Llamado a la Im´ agen del kernel Como mencionamos anteriormente. pero se deben definir por lo menos el tama˜ no y la localizaci´ on de la memoria del sistema. directamente desde la flash o en en cualquier posici´ on de la RAM. al cual comienza con ATAG CORE y finaliza con ATAG NONE. en la que (como mencionamos anteriormente (Figura 1. La funci´ on do bootm realiza las siguientes operaciones: Verificar la existencia de un n´ umero m´ agico en los primeros 4 bytes de la im´ agen (0x27051956). r2 = direcci´ on f´ ısica de la tagged list en RAM. Esta tagged list debe ser almacenada en RAM. si se encuentra desocupado debe fijar el campo size en ’2’. RTEMS. MMU: Debe estar desactivada la MMU. • Modo de la CPU: Deshabilitar todas las interrupcione (IRQs y FIQs) y colocar a la CPU en modo SVC • Caches. NETBSD . aparecer´ a algo como: C´ alcula el CRC del archivo almacenado y lo compara con el almacenado en la cabecera de la im´ agen. Imprime el encabezado de la im´ agen. y la localizaci´ on del sistema de archivos. Hacer un llamado a la im´ agen del kernel: Existen dos formas de hacer este llamado. Se pueden definir cualquier n´ umero de tags. La cache de instrucci´ ones puede estar activada o desactivada. Los dos m´ etodos deben cumplir las siguientes condiciones: • Desactiva los dispositivos que tienen capacidad de DMA. esta instrucci´ on le indica a u-boot que ejecute el comando bootm con una im´ agen almacenada en la posici´ on de memoria 0xC0021840.c. de tal forma que la memoria no se corrompa.

/ ∗ b o o t params ∗ / struct / ∗ RAM c o n f i g u r a t i o n ∗ / { ulong s t a r t . el acceso a las memorias vol´ atiles es mucho menor.Carlos Iv´ an Camargo Bare˜ no 67 La funci´ on do bootm linux hace el llamado a la imagen del kernel utilizando el siguiente comando: ( ∗ k e r n e l ) ( kbd .115200n8 rootdelay=1) En este punto termina el trabajo de u-boot y el control es pasado al kernel. el procesador corre un un modo real. en el que las direcciones corresponden a direcciones reales de los dispositivos conectados f´ ısicamente al procesador. Antes de pasar el control al kernel. /∗ Ethernet adress ∗/ struct environment s ∗bi env . ulong s i z e . memorias SD y su capacidad para manejar interfaces de red y permitir utilizarlas para al carga de im´ agenes del kernel. Verificar que la arquitectura y el procesador sean v´ alidos. 3. i n i t r d e n d .o. c m d s t a r t . si la plataforma no corresponde se genera un error y se imprimir´ a una “a” en la consola. el sistema es almacenado en alg´ un medio no vol´ atil y despu´ es es descomprimido en la RAM. Se genera una estructura de datos (page table) que almacena el mapeo entre las direcciones de memoria virtual y la memoria f´ ısica. . } b i d r a m [ CONFIG NR DRAM BANKS ] . esto acelera la ejecuci´ on ya que como se mencion´ o anteriormente. Cuando se activa la MMU el esquema de memoria f´ ısico se remplaza por un direccionamiento virtual determinado por los desarrolladores del kernel. ulong b i a r c h n u m b e r .o Como puede verse en 1. Si el procesador no es v´ alido se generar´ a un error y en la consola aparecer´ a una “p”. este archivo ejecuta las siguientes funciones: 1. Punto de Entrada del Kernel head. 2. en donde: kbd Informaci´ on de la plataforma de desarrollo: typedef struct bd info { int bi baudrate . cmd end ) .initrd end: Linux permite que el sistema de archivos sea almacenado en la memoria RAM. initrd start . y corresponde al punto de entrada del kernel de Linux. } b d t .cmd end: Posici´ on de memoria donde se almacenan los par´ ametros pasados al kernel (mem=32M root=/dev/mmcblk0p2 rootfstype=ext3 console=ttyS0.25 el primer archivo encadenado en la im´ agen del kernel es arch/arm/kernel/head.initrd end indican el inicio y fin de este archivo cmd start . /∗ s e r i a l baudrate ∗/ unsigned long bi ip addr . \ end { i t e m i z e } initrd start . /∗ i d f o r t h i s board ∗/ ulong b i b o o t p a r a m s . i n i t r d s t a r t . Como pudimos darnos cuenta lo m´ as atractivo de u-boot es su capacidad para manejar diferentes dispositivos de almacenamiento no vol´ atiles como Memorias Flash. Activa la unidad de manejo de memoria (MMU) del procesador. / ∗ IP A d d r e s s ∗ / u n s i g n e d char bi enetaddr [ 6 ] .

proc root init (). i f ( s y s o p e n ( ( c o n s t char u s e r ∗ ) ” / dev / c o n s o l e ” . Sistemas Embebidos ´ ltimos pasos en el proceso de arranque de Linux. console init ().c s e t u p a r c h (& c o m m a n d l i n e ) . v f s c a c h e s i n i t ( num physpages ) . 5. se libera la memoria que ser´ En los u a utilizada por los procesos de inicializaci´ on. ( void ) sys dup ( 0 ) . i f ( ramdisk execute command ) { r u n i n i t p r o c e s s ( ramdisk execute command ) . mark rodata ro ( ) . pidmap init ( ) . preempt disable ( ) . Establece un limitado mecanismo de detecci´ on y reporte de errores. calibrate delay (). acpi early init (). El siguiente listado ´ ltima fase del proceso de arranque. taskstats init early (). 0 ) < 0 ) p r i n t k (KERN WARNING ” Warning : u n a b l e t o open an i n i t i a l c o n s o l e . setup per cpu pageset (). preempt disable ( ) . schedule ( ) . f o r k i n i t ( num physpages ) . numa policy init (). . buffer init (). cgroup init (). mem init ( ) . radix tree init (). numa default policy ( ) . unnamed dev init ( ) . muestra el c´ odigo que implementa esta u s t a t i c i n t n o i n l i n e i n i t p o s t ( void ) { free initmem ( ) . proc caches init (). unlock kernel ( ) . O RDWR. anon vma init ( ) . page writeback init (). cpuset init (). delayacct init (). \ n ” ) . abre un dispositivo que permita la interacci´ on con el usuario /dev/console (consola serial en nuestro caso) y ejecuta el primer proceso en espacio de usuario init. page alloc init (). s y s t e m s t a t e = SYSTEM RUNNING . p r i n t k (KERN WARNING ” F a i l e d t o e x e c u t e % s \n ” . prio tree init (). Hace un llamado a la funci´ on start kernel en init/main. security init (). sched init (). pgtable cache init (). setup command line ( command line ) . kmem cache init ( ) . signals init (). key init (). ( void ) sys dup ( 0 ) .68 4.

en la secci´ on anterior se estudi´ o la inicializaci´ on del kernel de Linux. e indicamos que est´ a se encuentra en una determinada memoria no vol´ atil. 1. execute command ) . cargar drivers (m´ odulos) de dispositivos y montar sistemas de archivos adicionales. el cual se denota como “/”.1. y superbloques para definir los par´ ametros del sistema de archivos y su estado general. Try passing init= option to kernel. r u n i n i t p r o c e s s ( ” / bin / sh ” ) . Third Extended File System (ext3): ext3 es una extensi´ on del sistema de archivos ext2 con capacidades de journaling. El Journaling es utilizado para seguir cambios de archivos y tiene como . De no encontrarse se desplegar´ a el mensaje No init found. } Try p a s s i n g i n i t = o p t i o n t o k e r n e l . En esta secci´ on se realizar´ a una descripci´ on del sistema de archivos que contiene aplicaciones que Linux requiere para inicializar servicios como los de red y la consola. } run init process ( ” / sbin / i n i t ” ) . run init process ( ” / etc / i n i t ” ). . r u n i n i t p r o c e s s ( ” / bin / i n i t ” ) . 69 ´ ltimo p´ Como podemos obsever el u aso consiste en el llamado a un archivo en espacio de usuario llamado init o sh. estamos indicando donde se encuentra el nivel m´ as alto del sistema de archivos.6. Adicionalmente posee la capacidad de crear enlaces simb´ olicos. grupos de bloques para dividir l´ ogicamente el disco en secciones m´ as menejables.6. Inicializaci´ on del Sistema En esta secci´ on describiremos el proceso de inicializaci´ on de la plataforma embebida. } /∗ ∗ We t r y e a c h o f t h e s e u n t i l one s u c c e e d s . bloques y mapas de bits (bitmap) de bloques e inodes para mantener un seguimiento de bloques e inodes asignados. ∗/ i f ( execute command ) { r u n i n i t p r o c e s s ( execute command ) . inodes como medio para mentener un seguimiento de archivos y objetos de sistema. ” ) .Carlos Iv´ an Camargo Bare˜ no ramdisk execute command ) . \ n” . p a n i c ( ”No i n i t f o u n d . en la siguiente subsecci´ on se describir´ a las acciones que se realizan cuando se ejecuta este archivo. Sistema de Archivos Anteriormente hemos hecho referencia a la localizaci´ on de la ra´ ız del sistema de archivos (root). Attempting ” ” d e f a u l t s . Existen varias opciones entre las que se encuentran: Second Extended File System (ext2) : Este sistema de archivos utiliza bloques como unidad de almacenamiento b´ asico. p r i n t k (KERN WARNING ” F a i l e d t o e x e c u t e % s. un tipo especial de archivo que contiene la referencia a otro archivo o directorio. . directorios para proporcionar una organizaci´ on jer´ arquica de archivos. y la plataforma pasar´ a a un estado de inactividad. ∗ ∗ The Bourne s h e l l can be u s e d i n s t e a d o f i n i t i f we a r e ∗ t r y i n g t o r e c o v e r a r e a l l y broken machine . 1.

Los archivos /proc/cpuinfo. y mejora el manejo de grandes directorios. opt 9. Pseudo File System Este sistema de archivos es utilizado por Linux para representar el estado actual ´ l podemos endel kernel. 5. 4. sbin Ejecutables esenciales del sistema. mnt Punto de montaje temporal. Journalling FIle FLash System 2 (JFFS2): Sistema creado para trabajar con dispositivos Flash. media Punto de montaje para sispositivos removibles. dev Archivos de dispositivos. adicionalmente permite arreglar da˜ nos en el sistema de archivos originados por una falla en la fuente de alimentaci´ on de la plataforma.70 Sistemas Embebidos prop´ osito asegurar que las transacciones sean procesadas de forma adecuada. 3. /proc/interrupt. reduce el tiempo de desarrollo ya que no es necesario transferir archivos entre el sitio donde se encuentran las herramientas de desarrollo y la plataforma. 31 . bin Ejecutables esenciales. Compresed ROM file system (cramfs): Sistema de solo lectura. /proc/devices. 7. Adicionalmente algunos archivos pueden ser manipulados para informar al kernel cambios en la configuraci´ on. Este sistema de archivos est´ a montado en el directorio /proc. 8. Los archivos en este sistema de archivos se encuentran comprimidos. Network File System: Permite montar particiones de disco o directorios de sistemas remotos como un sistema de archivos local. los cuales son utilizados ampliamente en aplicaciones embebidas. esto permite compartir recursos como unidades de CDs. Fu´ e creado con el f´ ın de aumentar el desempe˜ no frente al sistema ext2. y dentro de e contrar informaci´ on detallada del hardware del sistema. etc Configuraci´ on espec´ ıfica del host. Por otro lado. 2. /proc/mounts Proporcionan informaci´ on sobre los dispositivos Hardware de la plataforma Estructura del Sistema de Archivos Todas las distribuciones de linux se basan en el standard Filesystem Hierarchy Standard 31 utilizado en los sistemas operativos UNIX. lib Librer´ ıas esenciales y m´ odulos de kernel. 6. DVDs u otro medio de almacenamiento masivo. El m´ aximo tama˜ no de cramfs es de 256MB. Este sistema de archivos es virtual y es constantemente actualizado por el kernel. Los siguientes directorios o links simb´ olicos son de uso obligatorio: 1. ReiserFS: Este sistema de archivos al igual que ext3 utiliza journaling. es un sistema eficiente en espacio. es utilizado cuando se dispone de una peque˜ na memoria flash NOR. boot Archivos est´ aticos del boot loader. Este standard permite que los programas y los usuarios conozcan de antemano la localizaci´ on de los archivos instalados.

la primera aplicaci´ on en espacio de usuario que ejecuta el kernel es ´ l y es /sbin/init. usr Segunda jerarqu´ ıa. y la interfaz de red no est´ a configurada[20]. 13. var Datos variables. cuando Linux inicia en este modo se ejecutan los siguientes procesos: Se revisa el estado del sistema de archivos con fsck. Inicializa los demonios. Modo multi-usuario sin red remota. no existen procesos demonios32 en ejecuci´ on. 2. en el primero ´ nico usuario que puede utilizarla es el super-usuario root. En este nivel de ejecuci´ on. srv Datos de servicios suministrados por el sistema. 2.2. es solo se activa una l´ ınea de comandos y el u utilizado para sistemas en mantenimiento y normalmente se le asigna el nivel de ejecuci´ on 1. 11. Primer Programa en Espacio de Usuario init Como vimos anteriormente. la mayor´ ıa de las distribuciones utilizan los siguientes niveles de ejecuci´ on[20]: 1. init analiza el archivo /etc/inittab y • Determina el nivel de ejecuci´ on • Ejecuta los scripts asociados con este nivel de ejecuci´ on. 3. tmp Archivos temporales. Niveles de ejecuci´ on Un nivel de ejecuci´ on puede entenderse como un estado del sistema Hoy d´ ıa.Carlos Iv´ an Camargo Bare˜ no 10. 0. Se monta en sistema de archivos. Su papel m´ as importante es generar procesos adicionales bajo la direcci´ on de un archivo de configraci´ on especial /etc/inittab Modos de operaci´ on Existen dos modos de operaci´ on en Linux: Modo usuario simple y Multi-usuario. 32 Proceso que se ejecuta de forma discreta sin intervenci´ on del usuario y es activado por la ocurrencia de una condici´ on espec´ ıfica .6. Modo usuario simple para configuraci´ on del sistema y mantenimiento. 12. 71 1. Cierre o detenci´ on del sistema (halt). Permite el acceso a usuarios. El modo multi-usuario es el modo normal de ejecuci´ on del sistema Linux. todos los procesos que no sean del kernel son generados de forma directa o indirecta por e responsable de la inicializaci´ on de los scripts y terminales. 1.

El Archivo /etc/inittab Como se mencion´ o anteriormente el programa init est´ a encargado de montar el sistema de archivos y de analizar el archivo /etc/inittab. # T h i s i s r u n f i r s t e x c e p t when b o o t i n g i n e m e r g e n c y (− b ) mode . ◦ sysinit El proceso debe ejecutarse durante la inicializaci´ on del sistema. Este archivo contiene: Una entrada para el nivel de ejecuci´ on por defecto. En el siguiente listado se muestra un archivo inittab t´ ıpico: # The d e f a u l t r u n l e v e l . ◦ initdefault Especifica el nivel de ejecuci´ on al que se ingresa despu´ es de la inicializaci´ on del sistema. Modo multi-usuario con red. 6. 5. 5. d e x e c u t e s t h e S and K s c r i p t s upon c h a n g e # of r u n l e v e l . • action Acci´ on a tomar: ◦ respawn El proceso debe ser re-iniciado una vez finalice. • runlevels Puede ser un n´ umero o lista de n´ umeros de 0 a 6. ◦ wait start Ejecuta el proceso cuando se ingresa al nivel de ejecuci´ on y espera por su terminaci´ on. Nivel de ejecuci´ on en que inicia el sistema a menos que especifique otra cosa en el boot loader. 7. . ˜ ˜ : S : wait : / sbin / sulogin # / e t c / i n i t . Re-inicializaci´ on del sistema (reboot). Debe ejecutarse antes de cualquier entrada boot o bootinit • process Programa o script a ser ejecutado. Modo multi-usuario con interf´ az gr´ afica. El nivel de ejecuci´ on pude ser cambiado por el super-usuario (root) en cualquier momento utilizando el comando init n. donde n es el nivel de ejecuci´ on deseado.72 Sistemas Embebidos 4.Definido por el usuario. 4. No utilizado . ◦ bootwait El proceso debe ser ejecutado durante la incializaci´ on del sistema. 6. su sint´ axis es: id:runlevels:action:process [arguments] • id Cualquier cosa. Este es el modo de operaci´ on normal de un usuario de un sistema sin capacidades gr´ aficas. Entradas que deben ser ejecutadas en todos o en un espec´ ıfico nivel de ejecuci´ on. 3. id : 5 : i n i t d e f a u l t : # Boot −t i m e s y s t e m c o n f i g u r a t i o n / i n i t i a l i z a t i o n s c r i p t . d / rcS # What t o do i n s i n g l e − u s e r mode . s i : : s y s i n i t : / e t c / i n i t .

S[09][0-9]. el nombre de ellos en este directorio no incluyen . stop ) e c h o ” S t o p p i n g $DESC : ” s t a r t −s t o p −daemon −K −p $PIDFILE . el nombre de los archivos localizados en estos directorios deben comenzar con el caracter “S” (para iniciar procesos) o “K” (para “matar” procesos). Un script t´ ıpico de inicializaci´ on del demonio del servidor web cherokee se muestra en el siguiente listado (/etc/rc5. Luego se ingresa al nivel de ejecuci´ on 5 y se ejecuta el script /etc/init.. p i d NAME=” c h e r o k e e ” DESC=” C h e r o k e e h t t p s e r v e r ” t e s t − r / e t c / d e f a u l t / c h e r o k e e && . but f a l l t h r o u g h i n case of emergency . / e t c / d e f a u l t / c h e r o k e e t e s t −x ”$DAEMON” | | e x i t 0 t e s t ! − r ”$CONFIG” && e x i t 0 c a s e ” $1 ” i n start ) e c h o ” S t a r t i n g $DESC : ” s t a r t −s t o p −daemon −−oknodo −S −x $DAEMON −− −b −C $CONFIG . d / rc 6 # Normally not reached .d/S91cherokee): # ! / bin / sh DAEMON= / u s r / s b i n / c h e r o k e e CONFIG = / e t c / c h e r o k e e / c h e r o k e e .. restart ) $0 s t o p >/ dev / n u l l 2>&1 $0 s t a r t .Carlos Iv´ an Camargo Bare˜ no l0 : 0 : wait : / etc / i n i t . c o n f PIDFILE = / v a r / r u n / c h e r o k e e .. stop y restart. El directorio /etc/init. cuyas acciones son iniciar. El primer script en ejecutarse es /etc/init. d / rc 3 l4 : 4 : wait : / etc / i n i t . y dos caracteres num´ ericos: S[0-9][0-9]. detener y reiniciar el demonio respectivamente. ∗) e c h o ” Usage : $0 { s t a r t | s t o p | r e s t a r t } ” exit 0 .d/rc ejecuta los scripts localizados en directorios individuales para cada nivel: /etc/rcX. 1 : 2 3 4 5 : r e s p a w n : / s b i n / g e t t y 38400 t t y 1 73 En este archivo se define el nivel de ejecuci´ on 5 como el nivel por defecto. /etc/init. esac Como podemos ver existen tres par´ ametros que podemos pasar al script: start. d / rc 0 l1 : 1 : wait : / etc / i n i t . z6 : 6 : r e s p a w n : / s b i n / s u l o g i n S : 2 3 4 5 : r e s p a w n : / s b i n / g e t t y 115200 t t y S 0 # / sbin / getty invocations for the r u n l e v e l s .d contiene todos los scripts utilizados en los diferentes niveles de ejecuci´ on..d (X un entero de 0 a 6).d/rcS (ya que su acci´ on es del tipo sysinit).d/rc pas´ andole el argumento “5” y espera hasta que el script se complete. d / rc 5 l6 : 6 : wait : / etc / i n i t . d / rc 2 l3 : 3 : wait : / etc / i n i t . d / rc 4 l5 : 5 : wait : / etc / i n i t . d / rc 1 l2 : 2 : wait : / etc / i n i t .

bunzip2. sync. utiliza busybox para generar la utilidades b´ asicas de Linux y permite adaptar software adicional de forma f´ acil 35 . fdflush. logread. getopt.org/ 35 http://buildroot. rmdir. grep. mkfifo. pwd. tftp. dentro de las m´ as utilizadas se encuentran: Busybox Dise˜ nado para optimizar el tama˜ no y rendimiento de aplicaciones embebidas. mkfs. Busybox hace parte de la mayor´ ıa de distribuciones de Linux para sistemas embebidos y en la actualidad proporciona las siguientes funciones: addgroup. poweroff. tail. chgrp. fsck. 33 http://www. dado que permite sustituir la gran mayor´ ıa de utilidades que se suelen localizar en los paquetes GNU fileutils. rm. bzcat. uniq. getty. yes. cal. adduser.uclibc. logname. nslookup. time. cp. sleep. swapoff. df. crond. ln. dumpleases. uptime.org/buildroot. du. tar. awk. which. more. ls. zcat. sh. modutils. busybox. ifconfig. ifup. ps. ip. printf. vlock. cat. cuando el nivel de ejecucion sea 2. realpath.html#add software . init. ftpget. clear. no es nada pr´ actico ya que es una tarea tediosa que requiere cierto nivel de experiencia. dc. Finalmente se crea una terminal virtual para los niveles de ejecuci´ on multi-usuario. length. iproute. unzip. renice. nc. openvt. fdisk. id. hostname. fbset. rpm2cpio. nievel anterior son terminados y los procesos u 1. ifdown. deluser. losetup. wc. en sus versiones ligeras.uclibc. nameif. expr.net/ 34 http://buildroot. Sistemas Embebidos La l´ ınea S:2345:respawn:/sbin/getty 115200 ttyS0 inicia una consola por el puerto serial /dev/ttyS0 con una velocidad de 9200 baudios. dmesg. ipaddr. test. tr. sulogin. dos2unix. grep. iplink. watch. iptunnel. rdate. md5sum. usleep. 3. od. mknod. fold. true. BusyBox es considerada la navaja suiza de los sistema embebidos. ping. httpd. env. xargs. tty. mkswap. arping. mt. tee. vi. freeramdisk. 4 o 5. head. makedevs. patch. reset. adjtimex. gunzip. hexdump. uudecode. whoami. dumpkmap. setkeycodes. traceroute. syslogd. wget. tar.3. chroot. cmp. free. who. BusyBox 33 combina en un solo ejecutable m´ as de 70 utilidades est´ andares UNIX. ipcalc. ftpput. fgrep. textutils. linuxrc. ´ nicos al Cuando el super-usuario cambia el nivel de ejecuci´ on con el comando init. date. start-stop-daemon. Distribuciones Linux Aunque es posible construir el sistema de atchivos nosotros mismos. chmod. umount. netstat. rpm. logger. En la actualidad. chvt. delgroup. etc. ping6. pidof. ar. strings. login. touch. pivot root. run-parts. mktemp. watchdog. klogd. mount. halt. false. gzip. sort. los procesos u ´ nicos del nuevo nivel son iniciados. findutils. hostid.6. passwd. shellutils. kill. route. Posee una interfaz que permite realizar de forma f´ acil la configuraci´ on. basename. top. sha1sum. echo. udhcpd. readlink. swapon. killall. crontab. uncompress. Buildroot Buildroot34 Es un grupo de Makefiles y patches que facilita la generaci´ on de la cadena de herramientas y el sistema de archivos para un sistema embebido que usa Linux. existen varias distribuciones que realizan estas tareas por nosotros. reboot. dpkg-deb. egrep. mkdir. ash. uuencode. find.minix. dd. unix2dos. hwclock. chown. mesg. cut. dirname. loadfont.74 los caracteres S[0-9][0-9] o K[0-9][0-9]. telnetd.busybox. deallocvt. mv. dpkg. cpio. stty. last. udhcpc. gzip. uname. sed. su. loadkmap. telnet.minix.

1. no puede acceder directamente al a ´ rea del kernel. 1. Por ejemplo. 0 1 2 64 65 Nov Nov Nov Nov Nov 27 27 27 27 27 hda hda1 hda2 ttyS0 ttyS1 Los archivos tipo caracter est´ an identificados por una “c” en la primera columna. sin la necesidad de reiniciar el sistema y recompilar el kernel. 4. Este tipo de m´ odulos ser´ an estudiados en esta secci´ on. esto es. M´ odulos del kernel Los m´ odulos son peque˜ nas piezas de c´ odigo que pueden ser cargadas y descargadas en el kernel en el momento que sea necesario. Existen tres tipos de dispositivos en Linux [22]: Tipo Caracter: Puede accederse de forma similar a un archivo.7.1. Red: Toda transacci´ on de red se realiza a trav´ es de una interfaz.7. Recuerde que una aplicaci´ on en el a los dispositivos se acceden a trav´ es de archivos de dispositivos.emqbit. A continuaci´ on se muestra la salida del comando ls -l /dev/ brw−rw− − − − brw−rw− − − − brw−rw− − − − crw−rw− − − − crw−rw− − − − 1 1 1 1 1 root root root root root disk disk disk uucp uucp 3. lo que permite la instalaci´ on de paquetes de forma similar a la distribuci´ on debian. mientras que los dispositivos tipo bloque por una “b”. un dispositivo hardware (/dev/eth0) o software (loopback) capaz de intercambiar datos con otros hosts. normalmente realiza ´ nicamente. Ejemplos de este tipo de dispositivo son el puerto serie (/dev/ttyS0) y la consola (/dev/console) Tipo Bloque: Este tipo de dispositivo puede hospedar un sistema de archivos.com/mediawiki/index.28). close. el proyecto openembedded proporciona un entorno que permite generar la cadena de herramientas y el sistema de atchivos para un sistema embebido. Podemos observar que existen dos n´ umeros (5ta y 6ta columna) que identifican al driver. localizados en /dev (ver figura 1. Adicionalmente openembedded crea archivos de instalaci´ on con un formato derivado del proyecto handhelds 36 ipk. 3. un ejemplo de este tipo de dispositivo es el disco duro operaci´ ones de bloques de datos u (/dev/hda).org . read.Carlos Iv´ an Camargo Bare˜ no Openembedded 75 Al igual que Buildroot. Ellos extienden la funcionalidad del kernel. La informaci´ on necesaria para generar una distribuci´ on utilizando las herramientas de Openembedded se encuentra en http://www. el cual permite al kernel acceder a un dispositivo hardware conectado al sistema.php/Main Page/ecb at91/OE. 3. utiliza busybox y permite la creaci´ on de archivos que permiten compilar software que no se incluya en la distribuci´ on original. el n´ umero de la 5ta columna recibe el nombre de major number y el de la sexta minor 36 http://handhelds. 4. Ejemplo de un driver tipo caracter ´ rea de usario. un tipo de m´ odulo es el controlador de dispositivo. este tipo de dispositivos permite por lo menos las operaciones open.

las cuales son manejadas por el mismo driver. hda posee dos particiones hda1 y hda2.com/en/HDK concepts/ddT majmin.27: Interacci´ on entre el a number. Figura 1. estos n´ umeros son utilizados por el sistema operativo para determinar el dispositivo y el driver que deben ser accesados ante una solicitud a nivel de usuario.html El kernel de linux permite que los drivers compartan el n´ umero mayor. Fuente: [?] Figura 1. el LED se encender´ a. Este ejemplo fue implementado en un procesador PXA255 de Intel y realiza las siguientes operaciones: init: Se ejecuta cuando se carga el m´ odulo. open: Se ejecuta cuando se realiza una operaci´ on de lectura o escritura al dispositivo.76 Sistemas Embebidos ´ rea de usuario y el driver del dispositivo. mientras que el minor number se utiliza para identificar sub-dispositivos (Ver Figura ??). . como el caso del disco duro. lo mismo sucede con el puerto serie. El major number identifica la clase o grupo del dispositivo. close: Se ejecuta cuando se descarga el m´ odulo.28: major y minor footnotehttp://uw713doc. n´ umero menor u Implementaci´ on del driver de un LED A continuaci´ on se realizar´ a la descripci´ on de un driver tipo caracter para un dispositivo muy sencillo. el LED se apagar´ a. pero se asigna un ´ nico a cada una.sco. un LED [?].

p x a g p i o m o d e ( GPIO LED MD ) . DEVICE NAME ) . \ n ” ) . p x a g p i o m o d e ( GPIO LED OFF ) . MODULE DESCRIPTION ( ”BLINKER LED d r i v e r ” ) . Major ) . DEVICE NAME . Major ) . Las funciones module init module exit deben ser declaradas como static ya que no ser´ an visibles fuera del archivo. r e t u r n Major . \ n ” ) . } module init ( blink init ). r e t ) . return 0. La informaci´ on sobre el m´ odulo aparece en las l´ ıneas 87-90. p r i n t k ( KERN ALERT ” t h e d r i v e r . module exit ( b l i n k e x i t ) . c r e a t e a dev f i l e w i t h \n ” ) . } / ∗ Turn LED OFF ∗ / s t a t i c void { int ret . MODULE LICENSE ( ”GPL” ) . . To t a l k t o \ n ” . release = device release . e x i t b l i n k e x i t ( void ) r e t = u n r e g i s t e r c h r d e v ( Major . p r i n t k ( KERN ALERT ” ’ mknod / dev/ %s c % d 0 ’. }. struct f i l e o p e r a t i o n s fops = { . Major = r e g i s t e r c h r d e v ( 0 . . p r i n t k ( KERN INFO ”BLINK d r i v e r i s down . static int i n i t b l i n k i n i t ( void ) { p r i n t k ( KERN INFO ”BLINK module i s Up . MODULE VERSION( ” 1 : 0 . } p r i n t k ( KERN ALERT ” I was a s s i g n e d m a j o r number % d.\ n” . DEVICE NAME . if ( ret < 0 ) p r i n t k ( KERN ALERT ” E r r o r i n u n r e g i s t e r c h r d e v : % d\n ” . Major ) . Como puede observarse en la l´ ınea 83 se hace la definici´ on de las funciones que deben ejecutarse al cargar y descargar el m´ odulo en nuestro caso blink init y blink exit respectivamente. .Carlos Iv´ an Camargo Bare˜ no 77 Existen dos funciones que deben estar presentes en todo tipo de m´ odulo. &f o p s ) . i f ( Major < 0 ) { p r i n t k ( KERN ALERT ” R e g i s t e r i n g c h a r d e v i c e f a i l e d with % d \ n ” . 1 ” ) . MODULE AUTHOR( ” C a r l o s Camargo UNAL” ) . . open = device open . estas son: module init y module exit las cuales se ejecutan cuando se carga y descarga el m´ odulo respectivamente.

la cual ser´ a definida m´ as adelante. mdelay ( 0 x0080 ) . De esta forma.ko. podr´ ıa causar conflictos con otros dispositivos. esto sucede en operaciones de lectura o escritura. i ++ ) { p x a g p i o m o d e ( GPIO LED ON ) . To t a l k t o t h e d r i v e r . c r e a t e a dev f i l e w i t h ’ mknod / dev / b l i n k c 253 0 ’ .ko.78 Sistemas Embebidos En la l´ ınea 40 se define la estructura de operaciones de archivo del m´ odulo. \ struct f i l e ∗ f i l e ) { unsigned i n t i . En nuestro caso solo existe una funci´ on open. } t r y m o d u l e g e t ( THIS MODULE ) . lo primero que se debe hacer ınea 49) podemos observar la forma en que se realiza es obtener este n´ umero. is device open = 1. el LED se apagar´ a y aparecer´ a el siguiente mensaje en la consola: BLINK module i s Up . el que a su vez hace que se encienda el LED y se imprima en la consola el mensaje: BLINK d r i v e r i s down . la cual se ejecuta cuando se lanza el comando: rmmod blinker. I was a s s i g n e d m a j o r number 2 5 3 . cerrar. i < 5. En la funci´ on blink init (l´ umero mayor asignado de forma el registro de nuestro dispositivo. s t a t i c i n t device open ( s t r u c t inode ∗ inode . p x a g p i o m o d e ( GPIO LED OFF ) . if ( is device open ) r e t u r n −EBUSY .28 es necesario que el kernel sepa que driver est´ a encargado del dispositivo. Es decir si se utilizan los siguientes comandos: more / dev / b l i n k c a t f i l e > / dev / b l i n k cp f i l e / dev / b l i n k Con cada uno de estos comandos el LED se encender´ a y apagar´ a y en la consola se despliega el mensaje: Open BLINKER C l o s e BLINKER 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 . mdelay ( 0 x0080 ) . este archivo debe contener una entrada para blink de la forma: 253 blink. La funci´ on register chrdev retorna el n´ din´ amica. } Esta secci´ on de c´ odigo se ejecuta cada vez que el archivo de dispositivo /dev/blink es abierto. r e t u r n SUCCESS . cada campo de la estructura corresponde a la direcci´ on de una funci´ on definida por el driver para manejar una solicitud determinada. En la funci´ on blink exit se realiza la liberaci´ on del dispositivo ( la funci´ on unregister chrdev. escribir en o leer del dispositivo. nuestro dispositivo es registrado y se le asigna el n´ umero 253 como major number. esto es. esto es recomendable ya que si se fijara un n´ umero de forma arbitaria. Como se mencion´ o anteriormente es posible manejar un archivo tipo caracter como si fuera un archivo de texto. es posible adicionar funciones a las acciones de abrir. el major number del driver que lo maneja. en el archivo /proc/devices aparecen los dispositivos que actualmente est´ an siendo utilizados por el kernel. Como se puede ver en la figura 1. por lo tanto. Con lo anterior. f o r ( i = 0 . al cargar el m´ odulo con el comando: insmod blinker. por esto. p r i n t k ( KERN INFO ” Open BLINKER\ n ” ) . . l´ ınea 75). .

En esta secci´ on realizaremos una explicaci´ on detallada del proceso de comunicaci´ on entre el procesador y un perif´ erico implementado en una FPGA. por lo que es necesario que mientras el procesador no se comunique con ellos permanezcan en estadp de alta impedancia.Software. Por lo tanto. esto lo hace activando la se˜ nal CSX. las comunicaciones siempre son iniciadas por el procesador y se selecciona uno y solo un perif´ erico.29: Arquitectura b´ asica Hardware/Software Todos los perif´ ericos que requieren intercambio de informaci´ on con el procesador comparten el mismo bus de datos. El decodificador de direcciones.29 muestra una arquitectura b´ asica para la comunicaci´ on de tareas Hardware . como su nombre lo indica utiliza como entradas el bus de direcciones y activa solo una se˜ nal de selecci´ on de Chip (CSx). 1. Comunicaci´ on Procesador . es necesario crear tareas Hardware que ayuden a las tareas software a cumplir con las restricciones de dise˜ no. Bus de control: Se˜ nales necesarias para indicarle a los perif´ ericos el tipo de comunicaci´ on (Lectura o escritura). accesado por la unidad de procesamiento recibe el nombre de mapa de memoria y puede ser u Cuando la unidad de procesamiento necesite comunicarse con un determinado perif´ erico. bas´ andose en un rango de direcciones asignado a cada perif´ erico. Para esto es necesario implementar algunas funciones en perif´ ericos externos al procesador. Si la tarea no se encuentra implementada en un dispositivo comercial es necesario implementarlas en un Dispositivo L´ ogico Programable (PLD) o en un Circuito Integrado de Aplicaci´ on Espec´ ıfica (ASIC).8. si se encuentra en estado l´ ogico bajo el perif´ erica escribe o lee el bus de datos.1. dependiendo de la activaci´ on de las se˜ nales del bus de control RD y WR. Este rango de direcciones que se asigna a cada dispositivo que puede ser ´ nico para cada plataforma. El decodificador de direcciones es el encargado de habilitar un determinado perif´ erico ante una solicitud del procesador (mediante una direcci´ on de memoria). este rango de direcciones no debe traslaparse para asegurar que solo un chip es seleccionado. Bus de Direcciones: Bis controlado por el procesador y es utilizado para direccionar un determinado perif´ erico o una detrminada funcionalidad del mismo. cuando esta se˜ nal se encuentra en estado l´ ogico alto el perif´ erico coloca su bus de datos en alta impedancia.8. colocar´ a en el bus de direcciones una valor que se encuentre en el rango de direcciones asignado para ese perif´ erico. esto hace que el decodificador de direcciones active . Interfaz con Perif´ ericos dedicados Es com´ un que algunas aplicaciones requieran ciertos perif´ ericos especiales que les permitan cumplir las restricciones temporales.Carlos Iv´ an Camargo Bare˜ no 79 1. en ella podemos observar que el procesador maneja tres buses: Bus de Datos: Bus bidireccional por donde se realiza el intercambio de informaci´ on. Figura 1. esto es necesario para evitar corto .Perif´ erico La figura 1.circuitos originados por diferentes niveles l´ ogicos en el bus. es decir.

El bus de datos es bidireccional. la se˜ nal de activaci´ on cambia del estado l´ ogico alto al bajo.32. mientras que los de salida deben ser manejados por un dispositivo de salida. El bus de entrada es com´ un a todos los perif´ ericos mientra que es necesario utilizar un esquema de multiplexaci´ on entre los buses de salida. La Figura 1. si esto no se hace las se˜ nales fuera de fase pueden originar un estado de metaestabilidad en los Flip-Flops internos y por lo tanto el mal-funcionamiento del sistema. La figura 1. El decodificador de direcciones selecciona un determinado perif´ erico dependiendo del rango especificado para cado uno. para este u ericos coloquen el bus de datos en “0” cuando no est´ en seleccionados.30: Ciclo de lectura y escritura para la arquitectura de la Figura 1. Como mencionamos anteriormente.80 Sistemas Embebidos la se˜ nal de selecci´ on adecuada para informarle al perif´ erico que el procesador va a iniciar una transferencia de informaci´ on.31 muestra el diagrama de bloques de la interfaz necesaria para poder comunicar un grupo de perif´ ericos o tareas Hardware con el bus de datos. ncs y solo se activa cuando nwe = 1. Finalmente es necesario colocar un buffer tri-estado en los pines de la FPGA. si solo se tiene en cuenta el estado bajo de la se˜ nal CSX el perif´ erico puede ejecutar la tarea varias veces en el mismo ciclo de activaci´ on. ncs = 0. los buses de entrada de datos son comunes. . Figura 1. noe = 0. transacciones las inicia u Implementaci´ on de Perif´ ericos en una FPGA Es importante tener en cuenta los siguientes items cuando se implemente una tarea Hardware en una FPGA: La frecuencia del reloj de la FPGA es mucho mayor que la de las se˜ nales del bus de control. por lo que es necesario sincronizar las se˜ nales del procesador con el reloj de la FPGA. lo que puede llevar a resultados incorrectos. El bloque SYNC se encarga de sincronizar las se˜ nales provenientes de la FPGA con el reloj interno de la misma. las FPGAs no permiten implementar buffers tri-estado internamente . por lo que es necesario que la FPGA lo coloque en alta impedancia cuando no se est´ e habilitando un perif´ erico. La fase de los relojes del procesador y la FPGA no es la misma.29 De lo anterior podemos concluir que un perif´ erico es visto por el procesador como una posici´ on de memoria m´ as y las ´ nicamente el procesador. cuando se selecciona el rango de memoria de la FPGA y el procesador inicia una operaci´ on de lectura. La FPGA no permite implementar buffers tri-estado internamente por lo que es necesario separar los buses de entrada y salida a cada perif´ erico. por lo que es necesario asegurarse que cada vez que el procesador realiza una solicitud de lectura o escritura. este buffer est´ a controlado por las se˜ nales nwe.30 muestra el diagrama de tiempos para un ciclo de lectura y escritura del procesador. El m´ odulo Write Pulse generator genera un pulso cuando las se˜ nales sncs y snwe son activadas como se indica en la figura 1. el cual puede ser un multiplexor controlado por el decodificador de direcciones o una ´ ltimo caso es necesario que los perif´ compuerta OR. por lo que cada perif´ erico debe tener un bus de entrada y uno de salida de datos. noe. direcci´ on y control de un procesador. es decir.

Si se especifica addr. Linux implementa la llamada de sistema mmap() para mapear objetos en memoria. El argumento flasgs describe el tipo de mapeo.32: Generaci´ on del pulso de escritura Programa en Espacio de Usuario para la comunicaci´ on El kernel de Linux proporciona una interfaz que permite a una aplicaci´ on mapear un archivo en memoria. s i z e t len . int flags . i n t fd . se utiliza este valor como la direcci´ on inicial en la memoria.Carlos Iv´ an Camargo Bare˜ no 81 Figura 1.31: Diagrama de Bloques para la comunicaci´ on de tareas HW-SW 1. Un llamado a mmap() le pide al kernel hacer un mapeo en la memoria de len bytes del objeto representado por el descriptor de archivo fd. y algunos elementos de su comportamiento y puede . PROT WRITE habilita escritura y PROT EXEC habilita la ejecuci´ on. comenzando a offset bytes dentro del archivo. int prot . h> v o i d ∗ mmap ( v o i d ∗ a d d r . Los permisos de acceso son determinados por prot. off t offset ).[23] # i n c l u d e < s y s / mman . lo que hace que exista una correspondencia uno a uno entre las direcciones de memoria y el contenido del archivo.29 Figura 1. PROT READ habilita la lectura.

82
tomar los valores:

Sistemas Embebidos

MAP FIXED: hace que addr sea un requerimiento, si el kernel es incapaz de hacer el mapeo en esta direcci´ on el llamado falla, ´ reas que se traslapan y se remplazan si los par´ ametros de direcci´ on y longitud traslapan un mapeo existente se descartan las a por el nuevo mapeo. MAP PRIVATE: Establece que el mapeo no es compartido. Los cambios realizados a la memoria por este proceso no se reflejan en el archivo actual o en el mapeo de los otros procesos. MAP SHARED: Comparte el mapeo con otros procesos que usan el mismo archivo. Escribir en el mapeo equivale a escribir en el archivo. A continuaci´ on se lista un ejemplo de la utilizaci´ on del llamado mmap # d e f i n e MAP SIZE 0 x 2 0 0 0 0 0 0 l / / ECBOT USE A11 t o A25 # d e f i n e MAP MASK ( MAP SIZE − 1 ) in t fd ; unsigned long i , j ; void ∗ base ; v o l a t i l e unsigned short ∗ v i r t a d d r ; i o m a p ( 0 xFFFFFF7C ) ; o f f t a d d r e s s = 0 x40000000 ; / / C o n f i g u r e CS3 a s 16 b i t Memory and 0 W a i t S t a t e s / / CS3 Base A d d r e s s

i f ( ( f d = open ( ” / dev / mem” , O RDWR | O SYNC ) ) == − 1) { p r i n t f ( ” C a n n o t open / dev / mem. \ n ” ) ; r e t u r n − 1; } p r i n t f ( ” / dev / mem o p e n e d . \ n ” ) ; b a s e = mmap ( 0 , MAP SIZE , PROT READ | PROT WRITE , MAP SHARED, fd , a d d r e s s ) ; i f ( b a s e == ( v o i d ∗ ) − 1) { p r i n t f ( ” C a n n o t mmap . \ n ” ) ; r e t u r n − 1; } p r i n t f ( ” Memory mapped a t a d d r e s s % p .\ n” , base ) ; v i r t a d d r = base ; En este ejemplo utilizamos el llamado mmap para hacer un mapeo de la direcci´ on de memoria correspondiente al CS3 (0x40000000). El descriptor del archvio utilizado es el dispositivo /dev/mem el cual permite operaciones de lectura y escritura a la memoria virtual. Adicionalmente permitimos operaciones de lectura/escritura (PROT READ — PROT WRITE) y permitimos el acceso a otros proceso. Finalmente podemos usar la variable virt addres para escribir en cualquier posici´ on de memoria desde 0x40000000 hasta 0x40000000 + MAP SIZE. El siguiente listado muestra un ejemplo de la forma de hacer estas operaciones. p r i n t f ( ” W r i t i n g Memory . . \ n ” ) ; f o r ( i = 0 ; i < 32; i ++) { v i r t a d d r [ i <<10] = i ∗ 3 ; }

/ / ECBOT u s e A11 t o A25

p r i n t f ( ” R e a d i n g Memory . . \ n ” ) ; f o r ( i = 0 ; i < 3 2 ; i ++) { j = v i r t a d d r [ i << 10]; printf ( ” % X = % X\ n ” , i , j ) ; } i f ( munmap ( b a s e , MAP SIZE ) == −1) { p r i n t f ( ” C a n n o t munmap . \ n ” ) ; r e t u r n − 1; }

Carlos Iv´ an Camargo Bare˜ no

83

1.8.2.

Comunicaci´ on Perif´ erico - Procesador

Cuando un perif´ erico requiere atenci´ on por parte de la CPU debido a que termin´ o de realizar un proceso o porque requiere nuevas instrucciones para seguir operando, o un evento originado por un usuario necesita ser atendido, se debe iniciar un proceso para ´ l. Como se mencion´ que la unidad de procesamiento se comunique con e o anteriormente la unidad de procesamiento est´ a encargada de forma exclusiva de iniciar las operaciones de lectura/ecritura con los perif´ ericos, por esta raz´ on, el perif´ erico utiliza una se˜ nal (IRQ) para informarle al procesador que requiere ser atendido. Algunas arquitecturas poseen un mecanismo que permite el acceso a la memoria por parte de los perif´ ericos sin utilizar el procesador, esto permite que perif´ ericos de diferentes velocidades se comuniquen sin someter al procesador a una carga excesiva. En esta secci´ on hablaremos de la forma de definir las interrupciones en un driver de Linux.

Manejo de Interrupciones
A continuaci´ on se describir´ a la forma de manejar las interrupciones utilizando un driver de Linux. Analicemos la funci´ on qem init static int { int res ; p r i n t k ( KERN INFO ”FPGA module i s Up . \ n ” ) ; Major = r e g i s t e r c h r d e v ( 0 , DEVICE NAME , &f o p s ) ; i f ( Major < 0 ) { r e t u r n Major ; } / ∗ S e t up t h e FGPA i r q l i n e ∗ / a t 9 1 s e t g p i o i n p u t ( FPGA IRQ PIN , 0 ) ; a t 9 1 s e t d e g l i t c h ( FPGA IRQ PIN , 1 ) ; r e s = r e q u e s t i r q ( FPGA IRQ PIN , i r q h a n d l e r , IRQF DISABLED , ”FPGA − IRQ” , NULL ) ; s e t i r q t y p e ( FPGA IRQ , IRQT RISING ) ; i o a d d r e s s = i o r e m a p ( FPGA BASE , 0 x4000 ) ; return 0; } Esta rutina es similar a la presentada anteriormente, solo se agrega un par de comandos para definir un pin del procesador como entrada, para poder utilizarlo como se˜ nal IRQ, en la l´ ınea: r e s = r e q u e s t i r q ( FPGA IRQ PIN , i r q h a n d l e r , IRQF DISABLED , ”FPGA − IRQ” , NULL ) ; r e q u e s t i r q ( i n t i r q , h a n d l e r , i r q f l a g s , devname , d e v i d ) ; Se hace un llamado a la funci´ on request irq que asigna recursos a la interrupci´ on, habilita el manejador y la l´ ınea de interrupci´ on. En nuestro caso define el pin FPGA IRQ PIN como la l´ ınea de interrupci´ on, la rutina irq handler ser´ a ejecutada cuando se presente una interrupci´ on, el flag IRQF DISABLED deshabilita las interrupciones locales mientras se procesa, el nombre del dispositivo que realiza la interrupci´ on es FPGA - IRQ. La funci´ on ioremap(offset, size), una secuencia de operaciones que permiten que la memoria de la CPU se pueda acceder con las funciones readb/readw/readl/writeb/writew/write, utilizando la variable ioaddress. Finalmente se define el tipo de interrupci´ on del pin FPGA IRQ PIN como IRQT RISING. La funci´ on que se ejecuta cuando se presenta la interrupci´ on, se define en el siguiente listado: i r q r e t u r n t i r q h a n d l e r ( i n t irq , void ∗ dev id , s t r u c t p t r e g s ∗ r e gs ) { if ( irq enabled ) { i n t e r r u p t c o u n t e r ++; i n i t q e m i n i t ( void )

84
p r i n t k ( KERN INFO ” i n t e r r u p t c o u n t e r= %d \ n ” , i n t e r r u p t c o u n t e r ) ; p r i n t k ( ” \ n k e r n e l : IREG LP: %X \ n ” , r e a d b ( &i o a d d r e s s [ 0 x40 ] ) ) ; w a k e u p i n t e r r u p t i b l e (&wq ) ; } r e t u r n IRQ HANDLED ; }

Sistemas Embebidos

Cada vez que se produce una interrupci´ on y si la variable global irq enabled es igual a 1, se aumenta en 1 el valor de interrupt counter, se imprime su valor y el de un registro interno del perif´ erico. En este driver utilizaremos la funci´ on device read para enviar informaci´ on a un programa en espacio de usuario. s t a t i c s s i z e t device read ( struct f i l e ∗ filp , /∗ see include / linux / f s . h ∗/ char ∗ b u f f e r , /∗ b u f f e r to f i l l with data ∗/ s i z e t count , /∗ l e n g t h of t he b u f f e r ∗/ loff t ∗ offset ) { i f ( i r q e n a b l e d ){ w a i t e v e n t i n t e r r u p t i b l e ( wq , i n t e r r u p t c o u n t e r ! = 0 ) ; c o p y t o u s e r ( b u f f e r , &i n t e r r u p t c o u n t e r , s i z e o f ( i n t e r r u p t c o u n t e r ) ) ; i n t e r r u p t c o u n t e r =0; } else{ i n t e r r u p t c o u n t e r = − 1; c o p y t o u s e r ( b u f f e r , &i n t e r r u p t c o u n t e r , s i z e o f ( i n t e r r u p t c o u n t e r ) ) ; } return s i z e o f ( i n t e r r u p t c o u n t e r ) ; } Cuando se realice una operaci´ on de lectura desde espacio de usuario, el proceso quedar´ a bloqueado por la funci´ on wait event interruptible hasta que la rutina de atenci´ on a la interrupci´ on ejecute la funci´ on wake up interruptible, pero es necesario que se cumpla la condici´ on evaluada por wait event interruptible para que se ejecute la tarea. Para este ejemplo: w a i t \ e v e n t \ i n t e r r u p t i b l e ( wq , i n t e r r u p t \ c o u n t e r ! = 0 ) ; Por lo que irq handler debe hacer: i n t e r r u p t c o u n t e r ++; w a k e u p i n t e r r u p t i b l e (&wq ) ; Si no se hace esto el proceso nunca se despertar´ a y el proceso de lectura quedar´ a bloqueado. En la l´ ınea: c o p y t o u s e r ( b u f f e r , &i n t e r r u p t c o u n t e r , s i z e o f ( i n t e r r u p t c o u n t e r ) ) ; c o p y t o u s e r ( t o , from , l o n g n ) ; Se utiliza la funci´ on copy to user para intercambiar informaci´ on con el programa que se ejecuta en espacio de usuario. En este caso se copia a char *buffer, la variable interrupt counter. Existe una funci´ on an´ aloga que recibe informaci´ on proveniente del espacio de usuario copy from user En la Figura 1.33 se muestran estas operaciones. En la funci´ on qem exit se liberan los recursos de la interrupci´ on y la variable ioaddress. s t a t i c void e x i t qem exit ( void ) { int ret ; / ∗ Tho o r d e r f o r f r e e i r q , iounmap & u n r e g i s t e r i s v e r y i m p o r t a n t ∗ / f r e e i r q ( FPGA IRQ PIN , NULL ) ; iounmap ( i o a d d r e s s ) ; u n r e g i s t e r c h r d e v ( Major , DEVICE NAME ) ; p r i n t k ( KERN INFO ”FPGA d r i v e r i s down . . . \ n ” ) ; }

Carlos Iv´ an Camargo Bare˜ no

85

Figura 1.33: Intercambio de informaci´ on entre los espacios de kernel y usuario
Finalmente el programa en espacion de usuario es: i n t main ( v o i d ) { int char fileNum , b y t e s ; data [40];

f i l e N u m = open ( ” / dev / f p g a ” , O RDWR ) ; i f ( fileNum < 0) { p r i n t f ( ” U n a b l e t o open f i l e \ n ” ) ; exit (1); } p r i n t f ( ” Opened d e v i c e \ n ” ) ; b y t e s = r e a d ( fileNum , d a t a , s i z e o f ( d a t a ) ) ; i f ( bytes > 0) printf ( ” % x\n ” , d a t a ) ; c l o s e ( fileNum ) ; return ( 0 ) ; } En este programa se abre el dispositivo /dev/fpga que corresponde a nuestro driver y se utiliza la funci´ on read para leer la informaci´ on suministrada por el driver.

86 Sistemas Embebidos .

New Analysis. http://www. Rubini. Special issue of the Annals of the American Academy of Political and Social Science. Corbet. 1981. [15] Michael L. Embedded Linux Premiere A Practical Real-World Approach. Concrete http://docs. S.com/linux/kernel/a2/index. Princeton University Press. [22] J. 2007. PhD thesis.. and J Medina. S Campos. [6] D Teece. Technical report.Universidad Nacional de Colombia. L Land´ ınez. 2005. O’Reilly. Link¨ opings universitet Institute of Technology. Inc. [19] Karim Yaghmour. ECBOT y ECB AT91 Plataformas Abiertas para el Dise˜ no de Sistemas Embebidos y Co-Dise˜ no HW/SW. http://docs. 2008. R Rodr´ ıguez. IEEE Std 1149. Duque and A. [7] Naushad Forbes and David Wield. [9] VDC corp. Building Embedded Linux Systems. 21 September 1998. 18 September 2006.huihoo. The Linux startup process. [2] I. El caso de los contratos de importaci´ on de tecnolog´ ıa. [18] Dominic Rath. Bowman. Gilad Ben-Yossef. [5] Kenneth Arrow. J S´ anchez. Revista de la Facultad de Minas .edu/ haungs/paper/node1. Architecture of the Linux Kernel. Camargo. 2007. 2005. http://www. Hallinan. 87 . O’REILLY. December 1999. 12 February 1998. Informe de Vigilancia Tecnol´ ogica: Aplicaciones de la Electr´ onica en el Sector Agr´ ıcola. Third Edition. Building the Toolchain. and M. September 2000. 1962. [16] C. 1990. [17] Texas Instruments. PROSPECTIVA Y VIGILANCIA TECNOLOGICA DE LA ELECTRONICA EN COLOMBIA. A. [4] Joel Mokyr. [20] J Feldman. Siddiqi. COLCIENCIAS. Technological Creativity and Economic Progress. The Linux Expertise Center. 1996. 2009. Rodr´ ıguez. Prentice Hall. 2008. and Philippe Gerum.cs.com/linux/kernel/a1/. Universidad Nacional de Colombia. Strategic Research Agenda 2009. O’Reilly Media. 1998. Master’s thesis. Economic Welfare and the Allocation of Resources for Invention. 1997 Semiconductor Group.aleph1. The Market for Know-how. ´ ´ [10] M. Conceptual Architecture of the Linux Kernel. The Executable and Linking Format (ELF).ucdavis. Managing R&D in technology-followers. Verification and Scheduling Techniques for Real-Time Embedded Systems.html. Oxford University Press. [11] D Zuluaga.Bibliograf´ ıa [1] I.co. VDC Research Group. Research Policy. Linux Device Drivers. Tovar and R. and G. Apropiaci´ on de conocimiento en Colombia. PhD thesis.html. [23] R Love. Haungs. The Lever of Riches. Gauthier. [14] Aleph 1. Formaci´ on de Inegnieros para la Innovaci´ on y el Desarrollo Tecnol´ ogico en Colombia. Technical report. Revista Cuadernos de Econom´ ıa. Hewlett-Packard Company. [13] Luis Alejandro Cort´ es. [3] H´ ector Mart´ ınez. Kroah-Hartman. 2005. Technology Transfer: New Issues. Embedded Software 2008 Market Intelligence System. 2007. University of Applied Sciences Augsburg.huihoo. A Aguilera. [12] M. Bowman. September 2008. Linux System Programming. M Tovar. Open On-Chip Debugger. 2004. [21] C. [8] European Technology Platform on Smart Sistem Integration (EPoSS). VIII Jornadas de Computaci´ on Reconfigurable y Aplicaciones. Jon Masters.1 (JTAG) Testability. European Technology Platform on Smart Systems Integration.uk/node/279. Tanuan.