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.
Nenhum comentário foi encontrado.