Instalación de RTAI en Debian

Se podría "separar" lo que es específico de la distribución de linux de lo que corresponde a RTAI 

Due to "strange" and unexplained (at least for me) policies/changes  of this server, this page/site is out of date since Jun 2009. The new page/site with this content is

 

 

Instalación de RTAI
-------------------

La sucesión de pasos a realizar para instalar RTAI podría
dividirse en partes que son dependientes de la distribución de
Linux que se quiera utilizar y otros que son independientes de la
misma. En este "reporte" (por llamarlo de alguna manera) se
muestra inicialmente la instalación de Debian y luego lo que
sería independiente de Debian y, de hecho, de cualquier otra
distribución.


1.- Instalación de una Distribución de Linux: Debian
    ------------------------------------------------

Versión 4.0: Etch, kernel version:

1.1) Obtener de la página de Debian o algunos de sus mirrors una
imagen ISO para instalación de la distribución. Grabar el CD y
arrancar la PC.

1.2) Detalles de la instalación desde el CD elegidos. No
necesariamente son las mejores elecciones ni para Debian ni para
RTAI, solamente se documentan en este reporte las opciones
elegidas en la instalación:
            a) Language: English
            b) Keyboard layout: Spanish
            c) hostname: rtai
            d) Domain Name: (Enter)
            e) Partitioning method:
                 e.1) Guided use entire disk
                 e.2) All files in 1 partition
                 e.3) (ok)
                 e.4) write to disk
            f) Root passwd
            g) User and passwd (no root)
            h) Network mirror: yes
            i) Country: Argentina
            j) Mirror: debian.logiclinux.com
            k) Proxy: (enter, en blanco)... buscó para actualizar
            m) Software to install: (enter, en blanco)
            n) Install Grub
            o) Reboot

1.3) Detalles post-instalación de CD. Nuevamente, no
necesariamente son las mejores opciones, solamente se documenta
en este reporte lo hecho.
            a) Apuntar a un mirror de Debian "más directo"
accesible. Esto está en http://actualizaciones.linti.unlp.edu.ar/index.php?sid=debian
$> cd /etc/apt
$> editor sources.list
   Comentar lo que está apuntado como para ir a buscar al mirror
   Agregar
          deb http://debian.linti.unlp.edu.ar/debian stable main contrib non-free
          deb http://seguridad.debian.linti.unlp.edu.ar/debian stable/updates main

            b) Actualizar con
               apt-get update  --> ok
            c) Instalar herramientas de desarrollo
               apt-get install build-essential  --> ok a varios paquetes
            b) Instalar joe (sine qua non)
               apt-get install joe

1.4) Siguiendo algunas de las recomendaciones de
http://wiki.linuxcnc.org/cgi-bin/emcinfo.pl?Debian_Etch_Compile_RTAI
se instalaron paquetes que parecen ser útiles y/o necesarios para
los pasos siguientes de compilación de kernel e instalación y uso
de RTAI:
$> apt-get install dh-make
                   module-assistant
                   sharutils
                   libncurses5-dev

Dado que después faltó bzip2, hay que hacer también:
$> apt-get install bzip2


2.- Instalar los fuentes de kernel para RTAI
    ----------------------------------------

Es importante tener en cuenta que ninguna distribución (y Debian
no es la excepción) genera una versión con cada versión estable
de kernel. Por lo tanto, se debe tener en cuenta las siguientes
condiciones para el código fuente del kernel a utilizar:
            a) Versión de kernel usada por la distribución
               instalada. En este caso: 2.6.18-6-686
            b) Versión de kernel menor o igual a la instalada por
               la distribución de Linux para la cual hay un
               "patch" de RTAI. En este caso: 2.6.17, para la que
               hay un patch de RTAI: 3.5-cv
Hay más información sobre esto en
https://www.rtai.org/RTAILAB/RTAI-TARGET-HOWTO.txt
aunque es un poco complicado ver primero el contenido de lo que
se obtiene en rtai para luego saber qué kernel hay que utilizar.
Se corresponde con el contenido de base/arch/i386/patches/, donde
"i386" se "correspondería" con el procesador y binarios del kernel.

$> cd /usr/src
$> wget http://www.toptech.lkams.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.tar.bz2
$> tar-xjf linux-2.6.17.tar.bz2
$> ln -s linux-source-2.6.17 linux


3.- Obtención e instalación de fuentes de RTAI
    ------------------------------------------

$> cd
$> wget --no-check-certif https://www.rtai.org/RTAI/rtai-3.5-cv.tar.bz2
$> mkdir /usr/src/modules
$> tar -xjf rtai-3.5-cv.tar.bz2 -C /usr/src
$> chown root:src /usr/src/rtai-3.5-cv/ -R
$> cd /usr/src/modules
$> ln -s ../rtai-3.5-cv/ rtai (aparentemente éste ln no es necesario)
$> cd ..
$> ln -s rtai-3.5-cv rtai


4.- Aplicar patch de RTAI para el fuente del kernel de linux
    --------------------------------------------------------

$> cd /usr/src/linux
$> patch -p1 < ../rtai/base/arch/i386/patches/hal-linux-2.6.17-i386-1.5-02.patch


5.- Recompilar el kernel de linux
    -----------------------------

No está muy claro si son estrictamente necesarios:
  $> cp /boot/config-2.6.18-6-686 .config (el wd es /usr/src/linux)
  $> make oldconfig (todo enter...)

A partir de este punto, es más o menos tradicional de la
compilación de un kernel:

$> make menuconfig
   Processor type and features
      Sacar symmetric multiprocessing si se tiene 1 sola CPU
      Processor family (PIII, poner la que sea que se tiene)
      Preemption model --> preemptible
      High memory support --> off
   Loadable module support
      Sacar Module versioning support
   Power management options
      Legacy --> Disabled
      Soft. suspend --> Disabled
      ACPI --> Disabled
      APM --> Disabled
      CPU --> Disabled
      Power Management support --> Disabled

$> make clean && make && make modules_install && make install


6.- Instalar el kernel de linux con el patch de rtai
    ------------------------------------------------

$> cd /boot
$> mkinitramfs -o initrd.img-2.7.17 2.6.17

   El último parámetro, 2.6.17, es la versión de kernel que tiene
sus módulos en el correspondiente subdirectorio de /lib/modules,
es decir en /lib/modules/2.6.17. No se puede evitar porque Debian
necesariamente arranca con un filesystem en RAM. Antes esto se
hacía con mkinitrd

$> cd grub
$> joe menu.lst
   title    RTAI GNU/linux, kernel 2.6.17
   root     (hd0, 0)
   kernel   /boot/vmlinuz-2.6.17 root=/dev/hda1 ro
   initrd   /boot/initrd.img-2.7.17
   savedefault

title: puede ser cualquiera, aparentemente
root: disco y partición, básicamente copiado de una de las
entradas anteriores del mismo menu.lst
kernel: el que se copia en el paso de recompilación del kernel de
linux
initrd: el que se crea con el comando mkinitramfs


7.- Instalación de rtai
    -------------------

$> cd /usr/src/rtai
$> make menuconfig
      machine(x86) -->
           (1) Number of CPUs (SMP-only)
$> make
$> make install

Esta versión de rtai no tiene los /dev/rtfi que luego usan los
ejemplos, así que es necesario poner el script /etc/rc.local con
el contenido que indica
http://www.captain.at/rtai-error-opening-dev-rtf.php

$> cd /etc
$> joe rc.local

#!/bin/bash
mknod -m 666 /dev/rtai_shm c 10 254
for n in `seq 0 9`
do
        f=/dev/rtf$n
        mknod -m 666 $f c 150 $n
done

Aparentemente, éste no es un problema para la versión de kernel 2.6.20 - patch de rtai correspondiente.