Tendo um tempinho de sobra resolvi compilar da maneira tradicional o último kernel estável, o 3.18.7 no Debian, isto é, sem gerar os .debs com o kernel-package.
Era uma vez?, ops!
Baixe o último kernel estável:
$ wget -c http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.18.7.tar.xz
Mas, se quiser a última versão (no momento o kernel 3.19), execute:
$ wget --no-check-certificate https://www.kernel.org/$(wget -qO- --no-check-certificate https://www.kernel.org | grep tar | head -n1 | cut -d" -f2)
Descompacte-o em /usr/src e torne-se root:
$ sudo tar xf linux-3.18.7.tar.xz -C /usr/src/ $ su -
Entre no diretório de trabalho:
# cd /usr/src/linux-3.18.7
Execute um dos comandos abaixo:
# cp -av /boot/config-3[tecle TAB para autocompletar] /usr/src/linux-3.18.7/.config
ou:
# make oldconfig ### use esta!!!
ou ainda:
# make localmodconfig ### usei esta! que carrega apenas os módulos específicos para a máquina corrente, e é uma compilação rápida.
E se desejar alterar alguma coisa (habilitar|desabilitar), como no exemplo abaixo, onde eu acrescentei um patch que dá suporte ao sistema de arquivos reiserfs4:
# gzip -dc ../reiser4-for-3.18.6.patch.gz | patch -p1 # make menuconfig
Daí habilito o suporte ao sistema de arquivos na aba filesystems e salvo a nova config.
Prossiga então com a criação da imagem do kernel com:
# make -j2 bzImage
* onde se vê -j2, usa-se o nº de cores do processador+1, logo, um amd64 singlecore = -j2
E a seguir prosseguimos com a compilação e instalação dos módulos:
# make -j2 modules # make -j2 modules_install
Kernel instalado, passemos para criação da initrd (RAMDISK) com:
# mkinitramfs -o /boot/initrd.img-3.18.7 /lib/modules/3.18.7
Seguida da cópia da imagem do kernel para /boot:
# cp -av arch/x86/boot/bzImage /boot/vmlinuz-3.18.7
Daí, veja se o Grub reconhecerá o novo kernel com (provavelmente vai):
# update-grub
* por via das dúvidas, antes de rodar o comando acima, certifique-se que o pacote os-prober esteja instalado.
Se não reconhecer, você pode copiar a configuração do kernel atual presente em /boot/grub/grub.cfg e acrescentá-la ao final do arquivo /etc/grub.d/40_custom, algo como isto:
#!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. menuentry 'Debian GNU/Linux, with Linux 3.18.7' --class debian --class gnu-linux --class gnu --class os { load_video set gfxpayload=keep insmod gzio insmod part_msdos insmod ext2 set root='(hd1,msdos3)' search --no-floppy --fs-uuid --set=root 52d9b106-3ee5-4bcb-b433-ee597926272a echo 'Loading Linux 3.18.7 ...' linux /boot/vmlinuz-3.18.7 root=UUID=52d9b106-3ee5-4bcb-b433-ee597926272a ro quiet echo 'Loading initial ramdisk ...' initrd /boot/initrd.img-3.18.7 } menuentry 'Debian GNU/Linux, with Linux 3.18.7 (recovery mode)' --class debian --class gnu-linux --class gnu --class os { load_video set gfxpayload=keep insmod gzio insmod part_msdos insmod ext2 set root='(hd1,msdos3)' search --no-floppy --fs-uuid --set=root 52d9b106-3ee5-4bcb-b433-ee597926272a echo 'Loading Linux 3.18.7 ...' linux /boot/vmlinuz-3.18.7 root=UUID=52d9b106-3ee5-4bcb-b433-ee597926272a ro single echo 'Loading initial ramdisk ...' initrd /boot/initrd.img-3.18.7 }
* no modelo acima (que já está pronto pro meu caso) devem ser modificados a versão do kernel e a UUID da partição.
Após salvar o arquivo, execute novamente:
# update-grub
Mas se ainda assim não reconhecer (vc tá com uma zaca das brabas!), então, só lhe resta copiar a configuração do kernel atual presente em /boot/grub/grub.cfg e adicioná-la neste mesmo arquivo antes da linha ### END /etc/grub.d/40_custom ### e NÃO EXECUTE update-grub, pois se o fizer estas alterações serão perdidas.
E por fim reinicie o sistema:
# reboot
Drivers
Se usas drivers da Nvidia e o VirtualBox, de nada adiantará tentar criar os módulos para o novo kernel usando um outro, inicie o mesmo na opção recovery-mode do Grub, insira a senha do root e prossiga assim pro caso da Nvidia:
# dpkg-reconfigure nvidia-kernel-dkms
* ou remova e reinstale como eu fiz aqui:
# apt-get --purge remove nvidia* # apt-get install nvidia-driver nvidia-settings nvidia-xconfig ### caso das placas mais atuais
E pro caso do VirtualBox (realizado já dentro do ambiente gráfico, ou seja, após o passo anterior), dependendo de qual versão você usa, se a disponível nos repos Debian ou os da Oracle:
# dpkg-reconfigure virtualbox-dkms ou # /etc/init.d/vboxdrv setup
Observação
Provavelmente o kernel 3.19 irá funcionar compilando deste modo ou via kernel-package, inclusive, eu já o tinha compilado mas devido a esse erro em não criar os módulos da Nvidia no ambiente gráfico usando o kernel atual, pensei que fosse algum bug e o removi, talvez se tivesse seguido os passos que propus acima (o de reiniciar pelo recovery-mode) tivesse funcionado.
Usuários de outras distros poderão seguir este how-to até a parte de instalação dos módulos, a partir da podem seguir o how-to abaixo, principalmente se usarem o LILO como bootloader:
KERNEL 3.8.4 NO SLACKWARE CURRENT
IntÉ!
não sei se faço certo, mais sempre usei esse método.
sudo apt-get install gcc libncurses5-dev dpkg-dev
make menuconfig
make -j (numero de nucleos + 1) KDEB_PKGVERSION=1.minhaversao deb-pkg
sudo dpkg -i *.deb
mais é sempre bom aprender um novo método, assim que tiver um pouco mais de coragem, vou tentar fazer isso, mais meu debian tá tao bonito e funcional, que acho que vou esperar a versão 8…
grande abraço.
CurtirCurtir
Desse jeito eu nunca usei:
# make -j (numero de nucleos + 1) KDEB_PKGVERSION=1.minhaversao deb-pkg
Geralmente faço uso do kernel-package:
# INSTALL_MOD_STRIP=1 CONCURRENCY_LEVEL=5 fakeroot make-kpkg --initrd --append-to-version=-edps --revision=+1.0 kernel_image kernel_headers
Como visto nesses meu antigo artigo:
http://www.vivaolinux.com.br/dica/Debian-Squeeze-com-kernel-304/
CurtirCurtir
Desse jeito eu nunca usei:
# make -j (numero de nucleos + 1) KDEB_PKGVERSION=1.minhaversao deb-pkg
Geralmente faço uso do kernel-package:
# INSTALL_MOD_STRIP=1 CONCURRENCY_LEVEL=5 fakeroot make-kpkg --initrd --append-to-version=-edps --revision=+1.0 kernel_image kernel_headers
Como visto nesses meu antigo artigo:
http://www.vivaolinux.com.br/dica/Debian-Squeeze-com-kernel-304/
* onde CONCURRENCY_LEVEL=5 é a mesma coisa das jobs do comando make (nº de cores do processador + 1), na época usava um QuadCore, que já foi pro saco a muito tempo! rs
CurtirCurtir
Boa tarde Edps, Excelente artigo e melhoras para seu nobre pc.
Estou seguindo seus passos, porém possuo uma placa ATI 6870, gostaria de saber se a parte que cabe aos drivers da placa deve ser seguida removendo assim os drivers da ati instaldos?
CurtirCurtir
É difícil falar sobre coisas que não nos afetam, no caso, não tenho placas da ATI, então, na pior das hipóteses o ambiente gráfico não iniciará, daí vc dá um Ctrl+Alt+F1 loga-se como root e tenta resolver, se usa driver dos repos Debian:
# fglrx-modules-dkms
Ou tenta reinstalar:
# apt-get install --reinstall fglrx-driver fglrx-modules-dkms fglrx-atieventsd fglrx-control glx-alternative-fglrx libfglrx libfglrx-amdxvba1 libgl1-fglrx-glx
Ou remove e reinstala:
# apt-get --purge remove fglrx*
# apt-get install fglrx-driver fglrx-modules-dkms fglrx-atieventsd fglrx-control glx-alternative-fglrx libfglrx libfglrx-amdxvba1 libgl1-fglrx-glx
Isso é apenas uma suposição de uns testes que fiz aqui, o fglrx-driver é o pacote para as placas mais novas da ATI, tem também o fglrx-legacy-driver
Ou siga o meio que conheça.
Pro meu caso, mesmo que o driver Nvidia tivesse dado piti no começo, bastaria remover todos os traços dos pacotes Nvidia e reiniciar com o Nouveau.
Boa sorte!
CurtirCurtir
Gostei do Artigo mto completo parabens :D. Caso eu precise compilar os headers deveria usar o make headers_install ?
CurtirCurtir
Não é preciso, aí já vai o pacote completo, basta manter o diretório linux-3.18.7 lá em /usr/src.
CurtirCurtir
Este é o melhor artigo sobre compilação que já li. Sinceramente muito bom. Como sou iniciante gostaria caso possível que me explicasse algumas coisas.
Em uma compilação preciso criar a imagem do kernel bzimage, o initrd.img que seria uma compilação dos módulos necessários para boot e tb compilar e instalar os módulos seriam estes os passos básicos?
Não é necessário criar o arquivo System.map tb?
Qual a diferença deste método em relação ao método que gera o .deb?
Agradeço por compartilhar.
CurtirCurtir
É faltou o System.map, mas basta:
# cp -av System.map /boot/System.map-3.18.7
Vou atualizar a dica.
Já com o kernel package veja essa minha antiga dica:
http://www.vivaolinux.com.br/dica/Debian-Squeeze-com-kernel-304/
CurtirCurtir
Agradeço aqui o comentário do Jonas Galo, pois ao executar o make headers_install e os comandos subsequentes, o tamanho da initrd foi reduzido drasticamente devido a cópia dos arquivos para /usr/include.
E também agradeço ao colega Marcos Butch pelo seu comentário que junto ao do Jonas Galo deixaram este artigo bem mais completo, resta agora atualizá-lo.
[]’s
CurtirCurtir
Por que quando executo o comando: make localmodconfig ele não cria meu .config? ele faz um monte de perguntas que enjoa responder.
CurtirCurtir
Basta segurar a tecla Y até sumir as perguntas, não precisa teclar Y pergunta por pergunta.
Lembro que usar localmodconfig é para compilação rápida, somente os módulos locais.
CurtirCurtir