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



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
d) 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.