Adicionando módulo LTSP4.2 à árvore do kernel

Publicado por Rogério Tomassoni em 28/09/2011

[ Hits: 5.485 ]

 


Adicionando módulo LTSP4.2 à árvore do kernel



Quando existe problema com módulos no LTSP 4.2, temos a opção de adicionar novos módulos, para isso, faça o download do kernel em www.kernel.org. A versão que utilizei no momento foi a 2.6.25 (linux-2.6.25.tar.bz2). Um detalhe que nas versões 2.6.26 já não encontrei a opção do NFS file system support, requisito para funcionamento do LTSP.

Após o download, salve o kernel em /usr/src, descompacte e desempacote o kernel e crie um link simbólico chamado "linux".

# tar -jxvf linux-2.6.25.tar.bz2
# ln -s linux-2.6.25 linux
# cd linux


Neste ponto temos o código fonte do kernel, vamos alterar alguma opções de identificação do mesmo editando o arquivo Makefile, alterando as opções como segue abaixo:

VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 25
EXTRAVERSION = -ltsp-1
NAME = LTSP kernel

Explicando:
  • EXTRAVERSION é quem irá adicionar/identificar o nosso kernel dentro do tftpboot (Ex.: 2.6.25-ltsp-1).
  • Em NAME podemos usar o que for necessário, ele não é exibido explicitamente para nós.

Agora vem os passos mais importantes para adicionar os novos módulos à nossa árvore do kernel. De posse do código fonte do novo módulo, ou seja, os arquivos .c e .h, vamos copiá-los para o local adequado referente ao módulo.

Salve o ltsp_kernel_kit no local de sua preferência e rode o script build_initramfs, ele irá construir o initramfs para nós e já deixá-lo disponível em "/tftpboot/lts" (/tftpboot/lts/2.6.25-ltsp-1).

Lembrando que esse procedimento foi usado para módulos para placas de rede, não sei até o momento se funciona para outros hardwares, pois ainda não precisei.

Nesse exemplo vamos adicionar o módulo r8168, que serve para placas:
  • RTL8111B
  • RTL8168B
  • RTL8111
  • RTL8168
  • RTL8111C
  • RTL8111CP
  • RTL8111D(L)
  • RTL8168C
  • RTL8111DP
  • RTL8111E
  • RTL8168E
  • RTL8111F

Esse módulo pode ser encontrado em:
Com o código fonte do módulo em mãos, descompacte-o dentro de /usr/src/linux-2.6.25/drivers/net, será criado um diretório chamado r8168-8.024.00, renomei-o para r8168, entre dentro do diretório.

# cd r8168

Só iremos precisar dos arquivos que estão dentro de src, com exceção do Makefile_linux24x, então podemos removê-lo.

Já o Makefile, precisamos alterá-lo, edite-o, ou crie um novo com seguinte conteúdo.

obj-$(CONFIG_R8168) += r8168.o
r8168-objs := r8168_n.o r8168_asf.o rtl_eeprom.o rtltool.o

Note que o arquivo Makefile é o responsável por construir os objetos .o do nosso módulo no momento em que usarmos o comando make && make install_module mais adiante.

Após editado, vamos editar outro arquivo Makefile, só que desta vez o que está localizado em /usr/src/linux-2.6.25/drivers/net, nele vamos adicionar a seguinte linha:

obj-$(CONFIG_R8168) += r8168/

Esta linha indica ao comando make, que deve adicionar na compilação os arquivos localizados em /usr/src/linux- 2.6.25/drivers/net/r8168, referente ao nosso módulo.

Agora precisamos editar outro arquivo localizado também em /usr/src/linux-2.6.25/drivers/net chamado kconfig, este é responsável por exibir a opção na janela do make menuconfig, sem ele, não será adicionado o módulo na compilação, pois ele quem gera o arquivo .config usado pelo comando make, para saber quais opções serão usadas no novo kernel.

Vamos adicionar antes do final do arquivo, antes do fechamento do bloco (endif # NETDEVICES), o conteúdo:

config R8168
tristate "Driver r8168 PCIe"
---help---
  r8168 is the Linux device driver released for RealTek RTL8168B/8111B,
  RTL8168C/8111C, RTL8168CP/8111CP, RTL8168D/8111D, and RTL8168DP/8111DP, and
  RTL8168E/8111E Gigabit Ethernet controllers with PCI-Express interface.
  Criado por Tomassoni

Detalhe, note sempre que estamos nos referenciando ao mesmo módulo, com as mesmas informações (config R8168), que faz referência às configurações feitas nos arquivos anteriores CONFIG_R8168.

Pronto, módulo adicionado, vamos configurar o novo kernel, para isso entre no diretório /usr/src/linux e execute o comando:

# make menuconfig

Não entrarei em detalhes para cada opção, por já existir muitas explicações na internet, vou apenas apontar o que deve ser feito.

Na janela de menu, selecione:

General Setup:
   [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
      Processor type and features:
         Processor family (386)

Caso utilize máquinas virtuais como cliente ltsp, desmarque a opção:

     High Memory Support

E habilite a opção:

     PAE ([*]PAE (Physical Address Extension Support)

   Device Drivers
      <M> Parallel port support
      <M> PC-style hardware
      <M> Multi-IO cards (parallel and serial)
      [*] Block devices
      <*> RAM block device support

Selecione como módulo todas as placas 10,100,1000 e 10000 Mbit. Note que módulo que adicionamos vai estar no final da lista dos drivers (veja Figura 1).

   [*] Network device support
   Input device support
   [*] Provide legacy /dev/psaux
   File systems
      <*> Ext3 journalling file system support
      <*> Reiserfs support
      <*> Kernel automounter version 4 support (also supports v3)

Neste ponto é onde falhou os kernels a partir da versão 2.6.25, ou seja, da 2.6.26 em diante, pois não existe a opção NFS file system support.

   [*] Network File Systems
      <*> NFS file system support
      <*> NFS server support

Figura 1. Novo módulo adicionado.
Selecionado as opções, saia do menuconfig pelo exit, salve saia. E execute o comando:

# make && make install_modules

Os símbolos && dizem que o comando a direita (make install_modules) só deve ser executado se o comando da esquerda (make) for executado com sucesso, se o módulo tiver qualquer tipo de erro no seu código fonte (.c e .h), o comando make que faz a compilação irá falhar.

Note que não instalamos o módulos, pois quem irá usá-lo é o script de construção do initramfs, do ltsp_kernel_kit (explicação mais adiante).

Se tudo ocorrer bem será exibida no shell algo semelhante a figura 2:

Figura 2. Módulos compilados com sucesso.
Para verificar se realmente tudo ocorreu bem e os módulos foram construídos, verifique no diretório /lib/modules/2.6.25-ltsp- 1/kernel/drivers/net (lembrando que uso Red Hat el5, pode ser que na sua distro esteja em local diferente) se o módulo se encontra (/r8168/r8168.ko).

Pronto, agora vamos gerar o novo initramfs, irei disponibilizar o ltsp_kernel_kit, ele quem constrói a estrutura localizada em /tftpboot/lts.

Toda vez que o script build_initramfs for executado, ele irá confirmar a localização da estrutura de diretórios do LTSP com a finalidade de mover os arquivos e diretórios para o local correto.

Salve o ltsp_kernel_kit no local de sua preferência e rode o script build_initramfs, ele irá construir o initramfs para nós e já deixá-lo disponível em /tftpboot/lts (/tftpboot/lts/2.6.25-ltsp-1).

Se tudo ocorreu bem será exibido algo parecido com a figura 3.

Figura 3. Processo finalizado com sucesso.
Neste ponto temos então os novos módulos no kernel para os LTSP.

Outras dicas deste autor

Bloqueando tráfego via MAC com iptables

Criando plugin para Nagios

Acertando permissão do nagios.cmd

Plugin NFe 2.00 Nagios

JPykotaGUI - controle de impressão

Leitura recomendada

Too much work for irq17

Kernel patch de Con Kolivas (otimização para desktops)

Man e less não funcionam com kernel 2.6.9

Instalação da placa de rede Attansic no Slackware Linux 12.1

Solução para erro ao boot: CouId not find kerneI image

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts