Para os meus colegas que já estavam cobrando a um tempo, aqui vai o resumo dos procedimentos de compilação do RTAI no Ubuntu. Basicamente são os mesmos passos que o Debian. Lembrar que a compilação do RTAI NÃO funciona no gcc 4.3, então você DEVE usar a versão 3.4.
Aqui descreve-se os procedimentos básicos para a compilação de um
kernel vanilla no ambiente Ubuntu. A versão utilizada no Ubuntu é a versão 7.10. Povavelmente 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.
Procedimento de Compilação do Kernel de Tempo RealOs 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>
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
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
- Prompt for development and/or incomplete code/drivers:
Y - Local version - append to kernel release:
-rtai
- Enable loadable module support:
Y
- Module versioning support:
N
- Processor Type and Features
- Interrupt Pipeline:
Y - Timer frequence:
1000 Hz - Preemption model:
Low Latency Desktop
- Kernel hacking
- Compile the kernel with debug info:
N - 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:
- Processor Type and Features
--> Processor Family: Core 2/newer Xeon
--> Hyperthreading: N
- Device Drivers -> Sound -> Advanced Linux Sound Architecture -> PCI Devices
--> Intel HD Audio: N
- 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:
$ sudo dpkg -i *.deb
- Reiniciar com o kernel novo.
Compilando o RTAI- Apagar qualquer versão anterior
$ rm -rf /usr/realtime
- Ir ao diretorio do RTAI:
$ cd /usr/src/rtai
- Configurar RTAI
$ make menuconfig
- Compilar RTAI
$ make
$ make installs
- Reboot
$ reboot
- Ir ao diretorio do testsuit:
$ cd /usr/realtime/testsuit/user
- Testar a instalação
$ cd latency
$ ./run
$ cd ../preempt
$ ./run
$ cd ../switch
$ ./run
Testando o RTAIPara 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: o
testsuit para os testes. 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.
O resultado dos testes realizados em minha máquina após todo o procedimento de instalação está mostrado abaixo, as quais mostram respectivamente o resultado do teste de latência, preempção e troca. Note que o número de
overruns é zero. Os testes foram executados com carga, isto é, no momento do teste, a interface gráfica estava ativa e rodando várias aplicações de usuário, em especial, em um terminal estava sendo rodado o programa
flops.

