viernes, 20 de enero de 2012

rtai 3.8.1 y ubuntu 10.04 LTS con kernel 2.6.32 en Atom

 A continuación voy a mostrar como compilar e instalar rtai 3.8.1 con un kernel 2.6.32 en una distribución de ubuntu 10.04 LTS.

El kernel se ha configurado para correr en un PC industrial con un Atom dual core. Si se requiere otra CPU solo hay que cambiar la selección en el paso de configuración del kernel.

Nota: Por cuestiones de velocidad y espacio en disco (nuestro PC tiene una compact flash de 8GB), la compilación del kernel se puede realizar en cualquier máquina (a ser posible con la misma distribución que la maquina de destino y luego solo hará falta compilar el rtai en la máquina de destino).

Paquetes necesarios:
    
      linux-2.6.32.11.tar.gz
      rtai-3.8.1.tar.bz2

Pasos a realizar:

---  En cualquier maquina potente ---

 0- cd /usr/src/

 1-  tar zxvf linux-2.6.31.11.tar.gz

 2-  ln -s linux-2.6.31.11 linux 
     
 3-  tar xvf rtai-3.8.1.tar.bz2

 4-  cd  /usr/src/linux

            (parcheamos el kernel con el patch de rtai)

 5-  patch -p1 -b < ../rtai-3.8/base/arch/x86/patches/hal-linux-2.6.32.11-x86-2.6-03.patch
        
       (instalamos los paquetes necesarios para compilar y crear paquetes .deb)

 6- aptitude update && apt-get install kernel-package libncurses5 libncurses5-dev zlib1g zlib1g-dev build-essential 

 7- cd /usr/src/linux  

                      
            (copiamos el fichero de configuración base) 

 8- cp /boot/config-2.6.32-24-generic .config


 9- make oldconfig 


            (damos al enter para que tome opciones por defecto hasta que finalize) 

            (configuramos el kernel)

 10- make menuconfig


 Enable loadable module support ---> enabled [*]
 Loadable module support ---> Module versioning support ---> disabled
 Loadable module support ---> Source checksum for all modules ---> disabled
 Processor type and features ---> Support sparse irq numbering ---> disabled
 Processor type and features ---> HPET Timer Support ---> disabled
 Processor type and features ---> Interrupt pipeline ---> enabled [*]
 Power management and ACPI options ---> ACPI (Advanced Configuration and Power Interface) Support ---> enabled [*]
 Power management and ACPI options ---> ACPI (Advanced Configuration and Power Interface) Support ---> Deprecated /proc/acpi files ---> disabled
 Power management and ACPI options ---> ACPI (Advanced Configuration and Power Interface) Support ---> Deprecated power /proc/acpi directories ---> disabled
 Power management and ACPI options ---> ACPI (Advanced Configuration and Power Interface) Support ---> Future power /sys interface ---> disabled
 Power management and ACPI options ---> ACPI (Advanced Configuration and Power Interface) Support ---> Deprecated /proc/acpi/event support ---> disabled
 Power management and ACPI options ---> ACPI (Advanced Configuration and Power Interface) Support ---> AC Adapter ---> disabled
 Power management and ACPI options ---> ACPI (Advanced Configuration and Power Interface) Support ---> Battery ---> disabled
 Power management and ACPI options ---> ACPI (Advanced Configuration and Power Interface) Support ---> Button ---> disabled
 Power management and ACPI options ---> ACPI (Advanced Configuration and Power Interface) Support ---> Video ---> module [M]
 Power management and ACPI options ---> ACPI (Advanced Configuration and Power Interface) Support ---> Fan ---> disabled
 Power management and ACPI options ---> ACPI (Advanced Configuration and Power Interface) Support ---> Dock ---> enabled [*]
 Power management and ACPI options ---> ACPI (Advanced Configuration and Power Interface) Support ---> Processor ---> disabled
 Power management and ACPI options ---> ACPI (Advanced Configuration and Power Interface) Support ---> Disable ACPI for systems before Jan 1st this year ---> 0
 Power management and ACPI options ---> ACPI (Advanced Configuration and Power Interface) Support ---> Debug Statements ---> disabled
 Power management and ACPI options ---> ACPI (Advanced Configuration and Power Interface) Support ---> PCI slot detection driver ---> disabled
 Power management and ACPI options ---> ACPI (Advanced Configuration and Power Interface) Support ---> Container and Module Devices ---> disabled
 Power management and ACPI options ---> ACPI (Advanced Configuration and Power Interface) Support ---> Smart Battery System ---> disabled
 Power management and ACPI options ---> APM (Advanced Power Management) BIOS support ---> disabled
 Power management and ACPI options ---> CPU Frequency scaling ---> disabled


      En nuestro caso:  
                  Processor type and features ---> Processor family --> Atom

11- make-kpkg --initrd --revision=rtaiAtom386 kernel_image kernel_headers modules_image


12- Cafe....

-- Pasos en la maquina destino--

13- cd /usr/src

14- dpkg -i linux-image-2.6.32.11_rtaiAtom386_i386.deb

15- dpkg -i linux-headers-2.6.32.11_rtai386_i386.deb

16- reboot
           (arranca directamente con el kernel recién instalado,
            para acceder al menú grub: ctrl+shift).

            (enlazamos las cabeceras que se necesitarán para compilar rtai)

17- ln -s linux-headers-2.6.32.11 linux

18- cd /usr/src/rtai-3.8

            (configuramos rtai de acuerdo a nuestras necesidades) 

19- make menuconfig
 
               Parámetros RTAI para nuestras necesidades especificas:
                   Base system --> Supported services --> Use RTNet --> enable 
                   Base system --> Other features --> Mathfuns support in kernel --> enabled
                   Add-ons --> Real-Time Driver Model over RTAI --> enabled 
                   Add-ons --> Enable select multiplexing for RTDM services 
                   Add-ons --> Shared interrups   
                   Add-ons --> Drivers --> RTDM based 16550A driver support --> enabled


20- make
21- make install
22- reboot


               (Reboot porque sino, da error al ejecutar /usr/realtime/testsuite/user/).

En principio con esto ya estaría, salvo que se quieran añadir los módulos rtai al árbol de módulos del kernel y así poder usar modprobe, en vez de:

    insmod /usr/realtime/modules/rtai_hal.ko 
    insmod /usr/realtime/modules/rtai_sched.ko

y al terminar la aplicación: 

    rmmod /usr/realtime/modules/rtai_sched.ko 
    rmmod /usr/realtime/modules/rtai_hal.ko

Nota: Al ejecutar los test se cargan y descargan los módulos necesarios sin necesidad de hacer insmod/rmmod.

4 comentarios:

  1. Muy buen Post David. Gracias. Lo único es que a la hora de tratar de hacer el insmod /usr/realtime/modules/rtai_hal.ko me aparece -1 Operation not permitted. Ya intente "lapic" en el grub pero aun asi no funciona. Tienes algún remedio para esto. Saludos.

    ResponderEliminar
  2. Hola, perdona que tarde tanto en contestar.

    ¿Podrías mirar con dmesg para ver si optienes mas información?

    A lo mejor se debe a que la configuración de la CPU no es la c orrecta.

    ResponderEliminar
  3. a mi tambien

    mk@mk-laptop:/usr$ sudo insmod /usr/realtime/modules/rtai_hal.ko
    insmod: error inserting '/usr/realtime/modules/rtai_hal.ko': -1 Invalid module format
    alguna idea amigo? gracias como pruebo los programas real time?

    ResponderEliminar
  4. Hola estoy compilando un kernel pero no me deja aparecen algunos errores, ya trate varias cosas instale librerias, entro como usuario root y nada, llevo varios dias compilandolo y nada, ayudame por favor
    Mira estos son los errores
    make[2]: *** [arch/x86/kernel/irq_32.o] Error 1
    make[1]: *** [arch/x86/kernel] Error 2
    make[1]: se sale del directorio «/usr/src/linux-build-2.6.24-rtai-3.6.1»
    make: *** [debian/stamp/build/kernel] Error 2

    ResponderEliminar