Blogia
abondu

Proyecto

Modulos y Bottom-half, aquellos maravillosos años..

Me encuentro totalmente inmerso en el desarrollo de una rutina de atención a interrupciones por el método bottom-half(Froid version upgrade).

Este método consiste en gestionar la rutina de atención en dos partes:

1 primera (top-half)que atenderá a la interrupción(en mi caso no existe tal interrupción) y bloqueará el resto de posibles interrupciones que se puedan afectar a la respuesta por parte de la rutina y que cargará una tarea (task) del planificador(scheduler) en la cola de tareas para ser atendida cuando ya se puedan producir interrupciones.

La segunda (bottom-half) es esa tarea que atenderá a los datos que le sean indicados por la primera.

Más luss

He finalizado con relativo éxito la primera prueba con el lxrt:

Creé dos programas gemelos que se dedicaba a escribir en un fichero tiempos.dat el número de ciclos transcurridos desde el arranque del SO.

Uno de los programas corría sobre el núcleo Linux y el otro sobre el LXRT.

Como era de esperar el que corría sobre LXRT funcionaba mucho más rápido que el que corría sobre linux.

Aunque la diferencia de velocidad es más del doble, es de esperar que al portar ese mismo programa como módulo del rtai, esta(la diferencia) aumente considerablemente. Esto se debe a que el LXRT es sólo una api que corre encima del kernel y que no tiene control absoluto sobre él. Se trata de tiempo real flexible (soft Real Time) mientras que el RTAI es tiempo real duro o estricto (Hard real time). De todas formas, se pueden hacer algunas llamadas desde el LXRT a funciones que se ejecuten en tiempo real estricto, pero eso lo dejaremos para otro capítulo.

Notas a tener en cuenta:

Para iniciar un programa que corra bajo LXRT es necesario cargar antes los módulos rtai, rtai_sched y rtai_lxrt, por lo tanto será acosejable un script que los cargue antes de ejecutar el programa en si (Propia experiencia)

Las opciones de compilación de un programa que cargue las librerías de rtai son las comunes, pero hay que añadir una línea "-I/usr/src/rtai/include" para incluir las librerías del rtai que usemos. Generalmente estarán en ese directorio.

La luz al final del túnel

Ya voy viendo la luz al final del tunel, bueno, al menos eso es lo que parece.

He conseguido instalar los módulos del lxrt y todas esas cosas, y al parecer funcionan.

El método, no hacerle ni puñetero caso a los manuales de instalación que vienen con el código fuente y si al mítico how-to de recompilar el kernel de linux:

Ordenes
En el kernel
Una vez parcheado el kernel
make menuconfig
make modules
make modules_install (casca)
make bzImage

modificar lilo

en el rtai

make dep && make
make modules
make install

Al final los módulos que tenemos que instalar, son
rtai
rtai_sched
rtai_lxrt /* no lxrt a secas, no lo encuentra y si lo encuentra no funciona ni patrás*/

En las funciones que usen el lxrt tendremos que llamar también a la librería porque si sólo ponemos da muchos errores del tipo unfefined y first time use variable y cosas por el estilo....

La cosa avanza, lenta, pero avanza....

Odio el lxrt

Pues al parecer, ñoras y ñores, mi queridísimo ordenador del aula de informática ha decidido no tragarse el lxrt de primeras, y de segundas darme unos errores de dependencias que levantarían dolor de cabeza al más intrépido, con lo cual, yo que soy muy listo paso de ello.... al menos hasta mañana, si se tuercen las cosas, o el lunes si no...

La cuestión:

No encuentro el modulo lxrt por ningún lado, y eso que que he compilado todos los módulos del rtai, ¿será hora de pasar a una versión superior? ¿Qué llevan los curas bajo la sotana? Grandes preguntas de ayer, hoy y siempre....

Aparte de todo eso, cuando compilo me hace gracia, porque me marca unos undefineds en el código de los .h que te giñas por la patilla pa bajo...

Objetivos

El objetivo ahora es jugar con el RTAI:

Crearé varios programas que adaptaré al rtai para comprobar la diferencia de funcionamiento trabajando con el kernel normal y con el rtai

Ya sé programar

Bueno, es broma, lo único que sé,e s que tras una semana de pegarme con los syscalls he conseguido saber el tiempo que lleva encendido el ordenador, ya sé que parecerá una perogrullada, pero..... es lo que hay y mi tiempo me ha costado....

Primero encontrar la llamada a sistema correcta, patadas contra esta web he tenido que dar todos los dias.

Finalmente he conseguido hacer funcionar esta llamada times(struct tms *buf);

la llamada en cuestión me devuelve el número de ticks(ciclos??) que han pasado desde el encendido del ordenador.

Tengo que crear una struct tms ciclos; le paso a la función la dirección de ciclos (&ciclos) y me devuelve un clock_t con los ciclos. Eso que me devuelve lo puedo interpretar como int o como long sin ningún problema.

Noticias sorprendentes

ERC propone que la Generalitat y Defensa dirijan el ejército en Cataluña

ERC propone que el nuevo Estatuto contemple la creación de un Consejo de Defensa de Cataluña para así poder coordinar el ejército en territorio catalán. El nuevo organismo estaría dirigido por el presidente de la Generalitat y en ningún caso implicaría disponer "de efectivos propios ni de soldados", según explicó ayer el portavoz de ERC en el Parlamento catalán, Joan Ridao.

*

Maragall compara su Gobierno con la criatura "que cuesta mucho que nazca y después no hay quien acabe con ella" (Agencias)

*

El Ejecutivo de Zapatero es el de menos actividad legislativa de toda la democracia al cumplir su primer año (ABC, 1, 16)

Un puñado de aciertos y muchas rectificaciones en el primer año socialista. Zapatero: La obsesión por cumplir la palabra dada. María Teresa Fernández de la Vega: La mejor apuesta. Miguel Ángel Moratinos: Un año a la deriva (LA RAZÓN, 18-26)

El no a la Constitución europea se afianza en Francia a seis meses de la consulta (EL PAÍS, 11. ABC, 42. LA RAZÓN, 29)

Instalación del LTT

Tras mucho pelear con el jodido kernel 2.4.16 he decidido instalarlo a pelo e ir añadiéndole opciones poco a poco salvando los cambios y comprobando que compilaba ferpectamente....

El resultado final, un kernel 2.4.16 sin USB, Scsi, con discos de RAM pero no capacidad para instalar memorias flash y de ese tio (MTD se llaman, me parece..) Instalado, y sólo instalado, urge un arranque mañanaero para comprobar si funciona y si soy capaz a poder ver internet con él y si chuta el sonido...Uno necesita divertimento, vaya.

El propósito del nuevo kernel es utilizar el LTT (Linux Trace Toolkit)(Lo pide por imperativo legal, la versión 0.9.5, última estable es el último kernel que se traga), esto es, una utilidad que funciona en tiempo real y que me da todos los procesos, el /proc, los /dev y todo lo imaginable para poder comprobar así el funcionamiento de mis programas...Ralentiza un tanto el uso de mis módulos, pero es una excelente herramienta, eso espero, a la hora de comenzar a programar y depurar.

Objetivo para mañana:

Instalar el tiempo real en el nuevo kernel y comprobar que funciona ejecutando un par de ejemplos de el libro gordo de Petete, RTAI Progamming guide. Una vez hecho esto, enchufar el LTT y comprobar que funciona. Con esto se da por medianamente completado el dia.

Mejora.....

Ejecutar ejemplos de RPG(RTAI Programing Guide) y ver como se "mueve" el sistema bajo presión (las X afectan mucho a los tiempos de funcionamiento que nos dá el LTT, ya se sabe, carga del sistema)

Más mejora, imposible, no creo que pueda hacer nada más en un dia.....

La asamblea de Majaras ha decidido......

Mañana proyecto....

Aviso a navegantes....

Aprovechando la oportunidad que me proporciona mi proveedor de espacio Blogia he decidido usar parte de este para llevar el libro de guardia de las cochinaditas que hago en el poryecto, que uno es muy desmemoriado y conviene tenerlo todo bien apuntadito.

Así que si alguien comienza a ver apuntes extraños y gccs por la web que no se asuste, no me estoy volviendo más loco de lo normal.