CompilandoRTAI

Por que este Wiki

Decidi escrever este Wiki porque vários colegas e alunos sempre me perguntam como fazer esta compilação no ambiente do Ubuntu. Há vários textos na Internet, mas estão em inglês, são espalhados, e a maioria é para distribuições derivadas do Red Hat. Este procedimento é uma adaptação de um procedimento para Debian e executado num Notebook Acer com Ubuntu 8.04. É claro, como se trata de um procedimento de compilação o ambiente hospedeiro acaba sendo mais um detalhes que o principal, mas é sempre bom termos um texto deste em bom português.

O que é o RTAI

RTAI é o acrônimo de Real Time Application Interface - é uma API de programação em tempo real. Na prática é um patch sobre o kernel Linux padrão (o vanilla) e que o transforma em um sistema de tempo real verdadeiro (hard real time). Para maiores detalhes sobre a arquitetura do RTAI, favor verificar o site: http://www.rtai.org.

Procedimento de Compilação do Kernel de Tempo Real

Esta sessão descreve os procedimentos básicos para a compilação de um kernel vanilla no ambiente Ubuntu, isto é, a versão padrão do kernel Linux e é apenas sobre a versão vanilla que o patch do RTAI pode ser aplicado. A versão utilizada no Ubuntu é a versão 8.04. Provavelmente o procedimento funcione com outras versões do Ubuntu, bem como outras distribuições baseadas no Debian. Utilizou-se o jeito Debian de se compilar e instalar o kernel do Linux.

Os procedimentos a seguir devem ser realizados como superusuário (root), inclusive os testes no RTAI.

Preparativos

  • Criar diretorio dos fontes:

    # mkdir /usr /usr/src 
  • Ir para o diretorio de fontes:

    # cd /usr/src
  • Baixar o linux e o rtai:

    # wget www.rtai.org/RTAI/rtai-3.6.bz2+
    # ftp ftp.kernel.org+
    login> anonymous
    pass> <enter>
    ftp> pass
    ftp> bin
    ftp> cd /pub/linux/kernel/v2.6/
    ftp> get linux-2.6.23
  • Descompactar os fontes:

    # tar xjf rtai-3.6.tar.bz2
    # tar xjf linux-2.6.23.tar.bz2
  • Criar os links simbólicos:

    # ln -s linux-2.6.23/ linux
    # ln -s rtai-3.6/ rtai

Obs.: Provavelmente o leitor que replicar estes procedimentos o fará somente uma vez enquanto que os demais procedimentos serão executados inúmeras vezes.

Compilando o Kernel

  • Linux mais recente suportado:  linux-2.6.23  Rtai mais recente:  rtai-3.6 

  • Ir ao diretorio do linux:

    # cd linux
  • Aplicar o patch do RTAI no Linux:

    # patch -p1 < ../rtai/base/arch/i386/patches/hal-linux-2.6.23-i386-1.12-00.patch
  • Copiar a configuração atual:

    # cp /boot/config-`uname -r` .config
  • Editar a configuração:

    # make menuconfig
  • Opções a serem editadas:
  • General Setup
    1. Prompt for development and/or incomplete code/drivers: Y

    2. Local version - append to kernel release: -rtai

  • Enable loadable module support: Y

    1. Module versioning support: N

  • Processor Type and Features
    1. Interrupt Pipeline: Y

    2. Timer frequence: 1000 Hz

    3. Preemption model: Low Latency Desktop

  • Kernel hacking
    1. Compile the kernel with debug info (Para diminuir o tamanho do kernel): N

    2. Compile kernel with frame poiters: N Obs.: Pode ser necessário, e é extremamente recomendável segundo o manual do RTAI, desabilitar as opções relacionadas ao Gerenciamento de Energia: ACPI, APM e Graduação da Freqüência da CPU.

  • Opções a serem editadas para o meu caso (Notebook Acer Centrino Duo):
    1. Processor Type and Features
      1. Processor Family: Core 2/newer Xeon

      2. Hyperthreading: N

      3. Device Drivers -> Sound -> Advanced Linux Sound Architecture -> PCI Devices -> Intel HD Audio: Y

    Obs. 1: Desabilitar todas as opções que não são relativas ao hardware diminui o tempo de compilação

    Obs. 2: Necessitei deixar as opções de Gerenciamento de Energia habilitada para a compilação, mas no boot do kernel utilizo as opções noacpi e noapm

  • Compilando:

    # make-kpkg --initrd kernel_image kernel_headers
  • Aguardar o término da compilação. Pode levar horas.
  • Ir para a pasta src:

    # cd ..
  • Criar a pasta de firmware para esta instalação
    • (Um bug no pacote criado gera uma mensagem de erro durante a posterior instalação do pacote, por isso a necessidade deste passo)

    # mkdir /lib/firmware/2.6.23-rtai
  • Instalar os pacotes Debian criados

    # dpkg -i *.deb
  • Reiniciar com o kernel novo

Se alguma coisa der errado

Se algo sair errado (e vai!) você DEVE começar tudo de novo:

  • Para limpar os produtos da compilação

    # make clean
  • Para deixar tudo limpo, inclusive arquivos de configuração

    # make mrproper
  • Para desinstalar algum pacote previamente instalado

    # dpkg -P nome-do-pacote-com-numero-de-versao
  • É sempre bom utilizar o purge neste caso.

Compilando o RTAI

Compilar o kernel vanilla é somente a metade do procedimento. Devemos agora, compilar o RTAI.

* Apagar qualquer versão anterior

    # rm -rf /usr/realtime

* Ir ao diretorio do RTAI

    # cd /usr/src/rtai

* Configurar RTAI

    # make menuconfig
  • Obs.: Seja coerente com as opções

* Compilar e instalar o RTAI

    # make
    # make install

* Reboot

    # reboot

Testando o RTAI

Para se saber se o sistema está aceitável ou não, a implementação do RTAI contém um conjunto de programas de teste e calibração. Em especial, utilizamos o testsuit para os testes.

* Ir ao diretorio do testsuit:

    # cd /usr/realtime/testsuit/user

* Testar a instalação

    # cd latency
    # ./run
    # cd ../preempt
    # ./run+
    # cd ../switch
    # ./run

O objetivo é que a latência seja baixa, sem overruns e valores de tempo de troca de contexto o menor e menos variante possível.

É isso aí!

André Cavalcante

CompilandoRTAI (last edited 2011-09-19 23:23:03 by localhost)