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 Real
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>
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
- Prompt for development and/or incomplete code/drivers:
- Enable loadable module support:
Y
- Module versioning support:
N
- Module versioning support:
- Processor Type and Features
- Interrupt Pipeline:
Y
- Timer frequence:
1000 Hz
- Preemption model:
Low Latency Desktop
- Interrupt Pipeline:
- Kernel hacking
- Compile the kernel with debug info:
N
- Compile kernel with frame poiters:
N
- Compile the kernel with debug info:
- 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.
- General Setup
- 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
- Processor Type and Features
- 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 install
s - 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
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: 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
.
obrigado pelo tutorial! enxuto e preciso, me ajudou bastante.
ResponderExcluirAlguns problemas que eu tive:
- ao instalar o gcc-3.4 o comando no terminal muda de "gcc" para "gcc-3.4". daí, tive que fazer
CC=gcc-3.4
export CC
(solução encontrada pela comunidade do UBUNTU no orkut)
- Durante a compilação tive alguns erros relativos a "getnstimeofday", e foi resolvido adicionando "asm("" : "+r"(ns));" depois de "while (unlikely(ns>=NSEC_PER_SEC)){" no arquivo /usr/src/linux/include/linux/time.h".
Nathan.