downloadDownload FAQFAQ
Site Navigation:
 
 

8. Kernel Linux

Esta seção cobre as mudanças e informações importantes sobre o kernel no Fedora Core 6 baseado na versão 2.6.18. O kernel 2.6.18 inclui:

8.1. Versão

O Fedora Core pode incluir patches adicionais do kernel para melhorias, correções de erros e funcionalidades adicionais. Por esta razão, o kernel do Fedora Core pode não ser totalmente equivalente ao chamado kernel vanilla do site kernel.org:

http://www.kernel.org/

Para obter uma lista destes patches, efetue download do pacote fonte RPM e execute o seguinte comando nele:

rpm -qpl kernel-<versão>.src.rpm

8.2. Log de Mudanças

Para obter um log de mudanças do pacote, execute o seguinte comando:

rpm -q --changelog kernel-<versão>

Se você precisar de uma versão amigável para o log de mudanças, visite http://wiki.kernelnewbies.org/LinuxChanges. Um arquivo de diferenças curto e completo está disponível em http://kernel.org/git. A versão do kernel do Fedora é baseada na árvore do Linus.

Personalizações feitas para a versão do Fedora estão disponíveis através do endereço http://cvs.fedora.redhat.com.

8.3. Tipos de Kernel

O Fedora Core 6 inclui as seguintes construções de kernel:

  • Kernel nativo, para uso na maioria dos sistemas. Os fontes configurados estão disponíveis no pacote kernel-devel-<versão>.<arquitetura>.rpm.

  • kernel-PAE, para uso em sistemas 32-bit x86 com mais de 4GB de RAM, ou com CPUs que têm a funcionalidade 'NX (No eXecute). Este kernel suporta ambos sistemas de um processador e múltiplos processadores.

  • Kernel de virtualização para ser usado no pacote do emulador Xen. Fontes configurados estão disponíveis no pacote kernel-xen-devel-<versão>.<arquitetura>.rpm.

  • Kernel Kdump para uso com as funcionalidades kexec/kdump. Os fontes configurados estão disponíveis no pacote kernel-kdump-devel-<versão>.<arquitetura>.rpm.

Você pode instalar os cabeçalhos de todos os tipos de kernel ao mesmo tempo. Os arquivos são instalados na árvore /usr/src/kernels/<versão>-[xen|kdump]-<arquitetura>/. Use o seguinte comando:

su -c 'yum install kernel-{PAE,xen,kdump}-devel'

Selecione um ou mais destes tipos, separados por vírgula e sem espaços, como apropriado. Digite a senha de root quando solicitada.

[Nota]Kernel Padrão Fornece SMP

Não há um kernel separado de SMP para o Fedora Core 6 no i386, x86_64 e ppc64, Suporte a múltiplos processadores é fornecido através do kernel nativo.

[Nota]Suporte PowerPC do Kernel

Não há suporte para Xen ou kdump na arquitetura PowerPC no Fedora Core 6. O PowerPC 32-bits ainda tem um kernel SMP separado.

8.4. Relatando Bugs

Visite http://kernel.org/pub/linux/docs/lkml/reporting-bugs.html para informações sobre como relatar bugs no kernel do Linux. Você também pode usar http://bugzilla.redhat.com para relatar bugs que são específicos para o Fedora.

8.5. Seguindo Textos Genéricos

Muitos dos tutoriais, exemplos e textos sobre desenvolvimento do kernel Linux assumem que os códigos-fonte do kernel são instalados no diretório /usr/src/linux/. Se você fizer um link simbólico, como mostrado abaixo, você poderá usar estes materiais de aprendizado com os pacotes do Fedora Core. Instale os códigos-fonte apropriados do kernel, como mostrado anteriormente e então execute o seguinte comando:

su -c 'ln -s /usr/src/kernels/<versão>.<versão>-<arquitetura> /usr/src/linux'

Digite a senha de root quando solicitada.

8.6. Preparando para o Desenvolvimento do Kernel

O Fedora Core 6 não inclui o pacote kernel-source fornecido em versões passadas, uma vez que agora apenas o pacote kernel-devel é necessário para compilar módulos externos do kernel. Os fontes configurados estão disponíveis, conforme descrição contida nesta seção de tipos de kernel.

[Nota]Instruções Referentes ao Kernel Atual

Para simplificar as instruções, assumimos que você quer configurar os códigos-fonte do kernel para combinar com o seu kernel atual. Nos passos abaixo, a expressão <versão> se refere à versão do kernel mostrada pelo comando: uname -r.

Usuários que necessitam acessar os códigos-fonte originais do kernel do Fedora Core podem achá-los no pacote do kernel com extensão .src.rpm. Para criar e extrair o código deste arquivo, siga os seguintes passos:

[Nota]Não Construa Pacotes como Super-usuário (root)

Construir pacotes como super-usuário pode ser perigoso e não é necessário, mesmo para o kernel. Estas instruções permitem você instalar o código-fonte do kernel como um usuário normal. Muitos sites de informações gerais referenciam o diretório /usr/src/linux em suas instruções de kernel. Se você usa estas instruções, simplesmente substitua por ~/rpmbuild/BUILD/kernel-<versão>/linux-<versão>.

  1. Prepare um ambiente de construção de pacotes RPM em seu diretório home. Execute os seguintes comandos:

    su -c 'yum install rpmdevtools yum-utils' 
    rpmdev-setuptree
  2. Digite a senha de root quando solicitada.

  3. Efetue download do arquivo kernel-<versão>.src.rpm. Habilite os repositórios de código-fonte apropriados, como os do Core, Updates ou Testing, com o parâmetro -e:

    yumdownloader -e core-source -e updates-source --source kernel
  4. Digite a senha de root quando solicitada.

  5. Instale o pacote kernel-<versão>.src.rpm usando o seguinte comando:

    rpm -Uvh kernel-<versão>.src.rpm
  6. Este comando escreve o conteúdo do RPM nos diretórios ${HOME}/rpmbuild/SOURCES e ${HOME}/rpmbuild/SPECS, onde ${HOME} é o seu diretório home.

    [Nota]Espaço Necessário

    Todo o processo de construção do kernel pode necessitar de alguns gigabytes de espaço extra no sistema de arquivos em que seu diretório home está localizado.

  7. Prepare os códigos-fonte do kernel usando os comandos:

    cd ~/rpmbuild/SPECS 
    rpmbuild -bp --target $(uname -m) kernel-2.6.spec
  8. A árvore do código-fonte do kernel está localizada no diretório ~/rpmbuild/BUILD/kernel-<versão>/linux-<versão>.<arquitetura>.

    Configurações para kernels específicos distribuídos no Fedora Core 6 estão no diretório ~/rpmbuild/BUILD/kernel-<versão>/linux-<versão>.<arquitetura>/configs. Por exemplo, o arquivo de configuração para i686 é o ~/rpmbuild/BUILD/kernel-<versão>/linux-<versão>.<arquitetura>/configs/kernel-<versão>-i686.config. Execute o seguinte comando para colocar a configuração desejada no lugar apropriado para a construção:

    cp configs/<arquivo-config> .config
  9. Todo kernel tem um nome baseado em seu número de versão. Este número é o valor que o comando uname -r mostra. O nome do kernel é definido pelas primeiras quatro linhas do Makefile do kernel. O Makefile foi modificado para gerar um kernel com um nome diferente do atual kernel. Para ser aceito pelo kernel atual, um módulo precisa ser compilado para um kernel com o nome correto. Para fazer isso, você precisa editar o Makefile do kernel.

    Por exemplo, se o uname -r retorna 2.6.17-1.2345_FC6, mude a definição EXTRAVERSION disto:

    EXTRAVERSION = -prep 

    para isto:

    EXTRAVERSION = -1.2345_FC6

    Ou seja, substitua tudo depois do hífen.

  10. Execute o seguinte comando:

    make oldconfig

    Você pode proceder como de costume.

[Nota]Construindo RPMs Binários do Kernel

Normalmente, os kernels do Fedora são construídos utilizando o utilitário rpmbuild e um arquivo spec. Os resultados podem variar se você usar o alvo make rpm, embutido no kernel.

8.7. Construindo Apenas Módulos do Kernel

Uma árvore expandida do código-fonte não é necessária para construir um módulo de kernel, como por exemplo seu próprio driver de dispositivo, para o seu kernel atualmente em uso. Apenas o pacote kernel-devel é necessário para construir módulos externos. Se você não o selecionou durante a instalação, use o Pirut para instalá-lo, indo em AplicaçõesAdicionar/Remover Programas, ou use o yum para instalá-lo. Execute o seguinte comando para instalar o pacote kernel-devel usando o yum.

su -c 'yum install kernel-devel' 

Por exemplo, para construir um módulo foo.ko, crie o seguinte arquivo Makefile no diretório contendo o arquivo foo.c:

obj-m := foo.o 

KDIR  := /lib/modules/$(shell uname -r)/build
PWD   := $(shell pwd)

default:
    $(MAKE) -C $(KDIR) M=$(PWD) modules

Execute o comando make para construir o módulo foo.ko.