Como compilar o kernel do Ubuntu 9.04 para um kernel-rt

Iniciado por B_Silva, 15 de Julho de 2009, 11:01

tópico anterior - próximo tópico

B_Silva

Olá a todos,

     Gostaria de saber um forma de compilar o kernel-rt (Real Time) no Ubuntu 9.04, pois pois preciso utiliza-lo de maneira otimizada para aplicações de multimidia (audio, video, entre outros).

Desde então,
Grato.

ErickSantos

#1
esse rt e uma opçao do kernel?

Veja na area para iniciantes > dicas e truques > tem um topico fixo do hqxhiven sobre o kernel omnislash. a instalaçao vai ser bem parecida


so uma dica.. se vc tem um driver da nvidia, desinstale-o antes de instalar o kernel personalizado, senao ele nao vai funcionar

Joseph


B_Silva

Olá A todos,

    Gostaria de dizer que depois de muito pesquisar consegui uma solução e um material muito legal sobre RTLinux,
assim esta é a solução: Basta que seu Ubuntu estaja completamente atualizado, logo, no gerenciador synaptic,
digite Linux-rt e logo de cara aparecera uma opção linux-rt onde, sua descrição diz: "Complete LInux RT Kernel",
selecionando ela, todos os pacotes dependentes virão juntos e ai é só instalar, e ao reiniciar o sistema vc terá
no grub o opção com kernel RT.
   Quanto ao material que consegui, estou colocando logo abaixo é muito legal para entender o que é RTLinux
me ajudou muito com várias coisas que não sabia:

RTLinux - Sistema Operacional de Tempo Real baseado em Linux

por

Denisângelo de Moura Rabelo
Jorge Fabrício Lopes

Seminário de Sistemas de Tempo Real
Mestrado em Mecatrônica

Universidade Federal da Bahia
Salvador-Ba

10 de agosto de 2005

SUMÁRIO


1 Introdução
2 Arquitetura
3 Implementação
   3.1 Emulando interrupções
   3.2 Escalonamento
   3.3 Comunicação entre processos
4 Aplicações
5 Como instalar o RTLinux
6 Conclusão
7 Bibliografia

1 INTRODUÇÃO

O RTLinux é um sistema operacional de tempo real crítico. Seu kernel é uma extensão do Linux que se propõe a suportar tarefas com restrições temporais. Neste documento não serão abordados conceitos sobre sistemas de tempo real como também sobre o SO Linux. O seu desenvolvimento foi iniciado no Departamento de Ciência da Computação do Instituto Tecnológico do Novo México, por Michael Barabanov e Victor Yodaiken. Atualmente, o seu desenvolvimento e suporte técnico estão por conta da empresa FSM Labs, que recentemente patenteou uma arquitetura original no qual é baseado o RTLinux.


2 ARQUITETURA

É importante não confundir a versão do RTLinux com a versão do kernel do Linux. RTLinux não é um código independente, isto é, não é uma nova versão de Linux. Parte da distribuição do RTLinux é um "patch" sobre o kernel do Linux e a outra parte são módulos carregáveis. Cada versão do RTLinux está moldada para funcionar sobre uma versão  do  kernel do Linux.

O RTLinux é um sistema operacional no qual um kernel de tempo real coexiste com o kernel do Linux. O objetivo deste modelo é permitir e facilitar que aplicações utilizem os serviços do Linux (comunicação com a rede, sistema de arquivos, controle de processos etc.). O Linux é responsável até mesmo pela inicialização do RTLinux e pelos drivers.

O kernel de tempo real situa-se entre o kernel do Linux padrão e o hardware (figura 1.2). Além disso, o kernel de tempo real executa o kernel convencional como sua tarefa de mais baixa prioridade (tarefa Linux), usando o conceito de máquina virtual para tornar o kernel convencional e todas as suas aplicações completamente interrompíveis.

Na Figura 1.1 é mostrado o Kernel básico do Linux sem suporte de tempo real. Pode-se observar que o Kernel do Linux separa o hardware das tarefas de nível de usuário. O Kernel tem a função de gerenciar todas as tarefas de nível de usuário. Por exemplo, a tarefa de controle de um braço robótico. O Kernel padrão do Linux poderá interromper a tarefa e dar o processador a uma tarefa de menor prioridade. Conseqüentemente, o braço não irá funcionar pela falta de sincronismo. Assim, ao tentar ser "justo" (compartilhando o uso da CPU) a todas as tarefas, o Kernel pode impedir que os eventos de maior prioridade ocorram.

Na Figura 1.2 é mostrado o kernel do Linux modificado para suportar tempo real. É introduzida uma camada adicional de abstração – denominada "máquina virtual" - entre o kernel padrão do Linux e o hardware do computador. Isso é muito importante, pois esta nova camada introduz seu próprio escalonamento de prioridades fixas. Este escalonamento atribui prioridade mais baixa para o kernel padrão de Linux, que funciona então como uma tarefa independente.

A camada de abstração introduzida pelo RTLinux trabalha interceptando todas as interrupções de hardware. As interrupções de hardware não relacionadas às tarefas de tempo real, como interrupção de software, são passadas então ao kernel do Linux para serem executadas. Caso a tarefa seja de tempo real, a rotina de serviço de tempo real apropriada é executada. As tarefas de tempo real têm dois atributos especiais: são "privilegiadas" (isto é, têm o acesso direto ao hardware), e não usam a memória virtual. As tarefas de tempo real são escritas como os módulos que podem ser dinamicamente carregados na memória. As tarefas de tempo real não esperam para executar as chamadas de sistema Linux. Quando um módulo é carregado, os atributos das tarefas de tempo real (deadline, período, e restrições temporais) são informados ao RTLinux. As tarefas não-periódicas são suportadas através do uso de interrupções.


3 IMPLEMENTAÇÃO

3.1 Emulando Interrupções

Um dos problemas de tempo real crítico em sistemas Linux é o fato de que o kernel desabilita as interrupções temporariamente como forma de sincronização ou controle de acesso a regiões críticas. Ao desabilitar as interrupções, o relógio de interrupções fica bloqueado e conseqüentemente há uma perda de precisão temporal. O RTLinux implementa  uma camada de emulação entre o Kernel do Linux e o controlador de interrupções de hardware. Todas a chamadas para cli, sti, iret (chamadas assembler que modificam o estado das interrupções) são repassadas pelas macros S_CLI, S_STI e S_IRET que emulam as chamadas cli, sti e iret respectivamente. Desta forma o Linux nunca poderá desabilitar as interrupções.

Sempre quando surge uma interrupção o emulador checa suas variáveis. Se a interrupção for ativada pelo Linux, o controlador de interrupção do Linux é invocado imediatamente. Se, por outro lado, as interrupções de Linux são desabilitadas, o controlador não é invocado. Ao invés disto, um bit é ajustado na variável que contém a informação de todas as interrupções pendentes. Quando o Linux reabilita as interrupções o controlador executa as interrupções pendentes. Cada interrupção simulada é chamada de interrupção de software.

Desde que o Linux não tenha controle sobre o controlador de interrupções isto não influencia no processamento das interrupções de tempo real que não passam através do emulador.

Todas as macros são escritas em assembler. A macro S_CLI  simplesmente reinicia a variável que contém o estado das interrupções Linux. A macro S_STI  atualiza a pilha como se uma interrupção estivesse sendo manipulada, e então usa a macro S_IRET para emular o retorno. Esse trabalho é devido à macro S_IRET habilitar as interrupções de software somente quando a iret é invocada.

3.2 Escalonamento

A principal função de um escalonador de tempo real é satisfazer os requisitos temporais das tarefas. Existem muitas formas de garantir as restrições temporais e há também muitas políticas de escalonamento, sendo que, uma política dificilmente é apropriada para todas as aplicações.

O RTLinux permite a possibilidade de um programador escrever o seu próprio escalonador (Figura 1.3). Os escalonadores podem ser implementados e carregados como módulos de kernel. Isto torna possível o programador testar facilmente diferentes políticas e algoritmos de escalonamento a fim de escolher o melhor para a sua aplicação.

Dois escalonadores podem ser bem implementados. Um deles é baseado em prioridade fixa, onde cada tarefa é determinada com uma única prioridade. Se houver diversas tarefas que estão prontas para executar, a tarefa com maior prioridade é executada. Sempre que as tarefas se tornam prontas para serem executadas então a tarefa em execução é interrompida se esta for de baixa prioridade.

O escalonador suporta diretamente tarefas periódicas. O período e o tempo de ativação são especificados para cada tarefa. Uma tarefa esporádica pode ser implementada definindo uma interrupção para ativá-la quando necessário.

Para tarefas periódicas com os fins do prazo iguais aos períodos uma maneira natural de atribuir prioridades é dada pelo algoritmo de escalonamento rate monotonic. Este algoritmo diz que as tarefas com períodos mais curtos têm maior prioridade.

As tarefas Linux são tratadas como tarefas de baixa prioridade. Assim o Linux funciona somente quando o sistema do tempo do real não tem nada para fazer.

Outro escalonador é o que foi implementado por Ismael Ripoll, onde ele usa o algoritmo Earliest Deadline First (EDF). Neste algoritmo as tarefas não têm prioridade. Assim, as tarefas com menor deadline possuem maior prioridade.
   
3.3 Comunicação entre processos

Desde que o Linux possa ser preemptado por qualquer tarefa de tempo real a qualquer momento, nenhuma rotina Linux pode ser chamada de forma segura a partir de uma tarefa de tempo real. Porém, alguns mecanismos de comunicação devem estar presentes. Filas FIFO são usados pelo RTLinux para manipular informações entre processos Linux ou entre o kernel do Linux e processos de tempo real.

As filas RT-FIFO são alocados no nível do kernel e são referenciadas por números inteiros. Existe um limite estático para o número de filas FIFOs que podem ser mudadas durante a recompilação do kernel.
Contudo, processos Linux enxergam as filas FIFOs como arquivos especiais de caracteres. Normalmente estão no diretório /dev/rtf0, dev/rtf1, etc.

As FIFOs são utilizadas como se fossem arquivos normais (open read/write close). Para poder utilizá-las, elas devem ter sido criadas antes que um processo normal do Linux possa fazer um open sobre ela.

4 APLICAÇÕES
O campo de aplicação de RTLinux é muito amplo, com ele podemos tomar o controle total do PC. Em uma tarefa de tempo real, podemos acessar  todas as portas do PC, instalar controladores de interrupções, desabilitar temporariamente as interrupções, ou seja, pode-se deixar a máquina em suspenso, como se tratasse de um Windows.

Atualmente é utilizado em plantas industriais, na forma de controle e automatização, onde um simples erro pode provocar um desastre. Também é utilizado como componentes na fabricação de produtos tais como roteadores, receptores GPS e sistemas embarcados, no caso da automação e controle industrial.

O RTLinux se integra facilmente com os sistemas corporativos, tais como acesso à base de dados como Oracle e o DB2 e servidores Web. Muitas empresas utilizam o RTLinux em suas instalações e atividades tais como: a  Agencia Espacial Norte Americana (NASA), utiliza RT Linux para  controle de mísseis, a Fujitsu  utiliza-o em controle de robôs, telescópios e outros projetos científicos, a Siemens automatizou sua fábrica com RTLinux.



5 COMO INSTALAR O RT LINUX

Antes de tudo é necessário fazer o download dos arquivos prepatched_linux_kernel-2.4.29-rtl.tgz , que é o kernel do linux já com os patchs instalados para rodar o RTLinux, e o do arquivo rtlinux-3.2-rc1.tgz, que é kernel do RT-Linux, seus módulos e alguns exemplos de aplicações em tempo-real. A seguir os passos desde a recompilação do novo kernel até a instalação do RT-Linux. Todos os comandos devem ser usados como root.

Antes de qualquer coisa dentro de /usr/src digitar os comandos:

   tar -zxvf  prepatched_linux_kernel-2.4.29-rtl.tgz
   tar -zxvf  rtlinux-3.1-rc1.tgz

1 – Dentro de /usr/src criar um link simbólico para o arquivo do kernel:
   ln -s linux-2.4.29-rtl linux-2.4-rtl

2 – Dentro da pasta linux-2.4.29-rtl digitar:
   make mrproper

3 –  Copiar a configuração atual do Kernel usando:
   cp /boot/config-2.4.xxx /usr/src/linux-2.4.29-rtl/.config

4 – Dentro de /usr/src/linux-2.4.29-rtl executar o comando:
   make xconfig

Escolher a opção "Load Configuration from File", depois escolher  "/usr/src/linux-2.4.29-rtl/.config" e apertar ENTER. Em "Processor types and features", marcar MTRR como "n", depois ir em "Processor family" e selecionar "386". Marcar "RTLinuxHall" com "y".

Em "General Support" marcar "n" tanto para "APM BIOS" quanto para "Power Management Support". Por fim, Selecionar EXIT, clicar em ENTER novamente e quando aparecer a mensagem "Do you wish to save your new kernel configuration?", selecionar "YES" e ENTER mais uma vez.

5 – Executar em /usr/src/linux-2.4.29-rtl os comandos:
   make clean
   make dep

6 – Para compilar e gerar a imagem do kernel digitar:
   make bzImage

Obs. em bzImage, o "i" é maiúsculo "I".

7 – Executar o comando:
   make modules

Assim que o mesmo terminar executar:
   make modules_install

Correspondem respectivamente a compilação e instalação dos módulos. A instalação é feita no diretório /lib/modules/2.4.29-rtl-3.1.

8 – Bem, aqui são feitas cópias de 2 arquivos que serão necessários para a inicialização do sistema:
cp /usr/src/linux-2.4.29-rtl/arch/i386/boot/bzImage /boot/vmlinux-2.4.29-rtl
cp /usr/src/linux-2.4.29-rtl/System.map /boot/System.map-2.4.29-rtl

9 – Em /boot, criar um link simbólico para o arquivo System.map-2.4.29-rtl assim:
ln -s System.map-2.4.29-rtl System.map-rtl


10 – Dentro de /boot, criar o arquivo initrd-2.4.29-rtl.img que irá carregar os módulos do kernel durante a inicialização, com o comando:
mkinitrd /boot/initrd-2.4.29-rtl.img 2.4.29-rtl-3.1

11 – Configurar o gerenciador de boot, /boot/grub/menu.lst. É só acrescentar as linhas:

title RT - Linux
        root (hd0,0)
        kernel /vmlinux-2.4.29-rtl
        initrd /initrd-2.4.29-rtl.img

12 – Reiniciar o sistema e testar o novo kernel.

13 – Caso o sistema reinicie normalmente com o novo kernel, pode -se então instalar o RTLinux. Entrar no diretório com os fontes do RTLinux:
cd /usr/src/rtlinux-3.2-rc1

14 – Configurar o RTLinux:
make xconfig

Não há necessidade de nenhuma alteração.

15 - Checar dependências (opcional, normalmente o comando "make" realizará este procedimento se for pulado. Aconselha-se então a pular):
make dep

16 – Gerar o kernel RTLinux e seus módulos:
       make

17 – Gerar dispositivos e instalar o RTLinux:
       make install
18 –  Testar o RTLinux e seus módulos:
       make regression

Isto verificará se o kernel do linux ou o RTLinux foi mal configurado ou mal recompilado. Todos os resultados devem aparecer [OK].

19 – Para iniciar o RTLinux:
       rtlinux start

Esse comando fará exibir algumas mensagens como estas, dependendo da configuração do RTLinux.
       (+)rtl.o
       (+)rtl_fifo.o
       (+)mbuff.o
       ...
(+) significa que o módulo foi carregado com sucesso e (-), que não foi carregado.

20 – Verificar o estado do RTLinux:
       rtlinux status

Exibe os módulos carregados e descarregados (+/-) com o comando "rtlinux start".

21 – Parar o RTLinux:
     rtlinux stop

Descarrega todos os módulos:
       (-)rtl.o
       (-)rtl_fifo.o
       (-)mbuff.o
       ...
6 CONCLUSÃO
Este documento procurou mostrar como o sistema operacional linux  trabalha em tempo real, tendo em vista que o mesmo não foi desenvolvido com  esse fim específico, no entanto algumas modificações em seu Kernel pode habilitá-lo a  tratar questões dessa magnitude.

O texto tratou sobre o RTLinux, sistema operacional de tempo real critico onde seu kernel suporta tarefas com restrições temporais criticas, tornando o  Linux utilizável para situações que envolva tempo real.

Foi feito um estudo minucioso acerca da arquitetura do RTLinux, evidenciando o tratamento das tarefas entre o mesmo e o Linux, onde é introduzida o conceito de camada de abstração entre o kernel do Linux e o hardware do computador. Também foi assinalado como é realizado as interrupções e o escalonamento, já que o RTLinux coexiste com o kernel do Linux. Por fim foi mostrado algumas necessidades da utilização  de sistemas de tempo real Linux, bem como as suas infinitas possibilidades de aplicações.

A mensagem central que esse documento procura transmitir é que sistemas de tempo real são cada vez mais requisitados e que um melhor aproveitamento de sistemas operacionais como Linux pode ajudar no tratamento a essas questões.




7 BIBLIOGRAFIA
[1] M. Barabanov; A Linux-based Real-Time Operanting System, M.S. Thesis, New Mexico Institute of Technology, 1997.
[2] V. Yodaikien; The RTLinux Manifesto, New Mexico intitute of    Technology, 1999.
[3] RTLinuxFree documentation. Disponível em www.rtlinuxfree.com.


Desde já,
Grato.

gpr

Citação de: ErickSantos online 15 de Julho de 2009, 11:30
esse rt e uma opçao do kernel?

Veja na area para iniciantes > dicas e truques > tem um topico fixo do hqxhiven sobre o kernel omnislash. a instalaçao vai ser bem parecida


so uma dica.. se vc tem um driver da nvidia, desinstale-o antes de instalar o kernel personalizado, senao ele nao vai funcionar

como desinstalo o driver da nvidia e do som? (são os dois que não funcionam aqui depois de compilar)
Ubuntu Studio