Kernel/Atualização

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Kernel/Upgrade and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎italiano • ‎日本語 • ‎한국어 • ‎Nederlands • ‎português do Brasil • ‎русский • ‎中文(中国大陆)‎

Este artigo descreve as etapas para atualizar para um novo kernel.

Instalando e usando um novo kernel

Uma atualização do kernel pode ser uma boa ideia quando novas sources do kernel forem instaladas. Novas sources do kernel são às vezes instaladas durante a atualização do sistema, executando o seguinte comando:

root #emerge --ask --update --deep --with-bdeps=y --newuse @world

Claro, eles podem ser instalados diretamente usando o comando. (substitua gentoo-sources por hardened-sources caso utilize o perfil hardened):

root #emerge --ask --update --deep --with-bdeps=y --newuse sys-kernel/gentoo-sources

A instalação de novas sources do kernel não fornece ao usuário um novo kernel. É necessário compilar um novo kernel a partir das novas sources e, em seguida, reiniciar o sistema para realmente executar o novo kernel.

Fazer um novo kernel a partir das novas sources é basicamente o mesmo processo de quando instalou o sistema. A diferença é que pode utilizar a configuração do kernel antigo para criar uma configuração para o kernel novo. Usando a configuração antiga salva o usuário de passar por todas as opções do kernel (like make menuconfig) novamente.

A configuração do kernel é salva em um arquivo chamado .config No diretório que contém as sources do kernel. Um novo kernel pode ter opções ou recursos que o kernel antigo não possui, ou pode não ter mais um recurso ou opção que o kernel antigo ainda possua. A configuração do kernel especifica se os recursos e opções de um kernel devem ser ativados ou não, talvez incorporados ao kernel, ou talvez construídos como módulos que podem ser carregados no kernel em execução sob demanda. Assim, o arquivo de configuração do novo kernel pode ter novas entradas que o arquivo de configuração do kernel antigo não possui e pode não ter mais entradas que estejam presentes no arquivo de configuração do kernel antigo.

Para lidar com essas alterações do arquivo de configuração, o arquivo de configuração do kernel antigo precisa ser convertido em uma configuração que pode ser usada com o novo kernel. Este artigo mostra como fazer um novo kernel a partir de novas sources do kernel com a conversão do arquivo de configuração do kernel antigo.

Fazer um backup da configuração atual do kernel

É aconselhável fazer um backup da configuração do kernel para que as configurações anteriores não sejam perdidas. Afinal, muitos usuários dedicam um tempo considerável para descobrir a melhor configuração para o sistema, e perder essa informação é definitivamente desagradável.

É fácil fazer um backup da configuração atual do kernel:

root #cd /usr/src/linux
root #cp .config ~/kernel-config-`uname -r`

Desde que o symlink para as sources do kernel tenha sido definido corretamente, isso copia a configuração do kernel atualmente usado para o diretório home do root, renomeando a configuração para kernel-config- seguido pela versão do kernel atual em execução.

Definir symlink para novas sources do kernel

O symlink /usr/src/linux deve sempre apontar para o diretório que contém as sources do kernel que atualmente é executado. Isso pode ser feito de três maneiras:

  1. Instalando as sources do kernel com USE="symlink"
  2. Configurando o link com eselect
  3. Atualização manual do link simbólico

Instalando as fontes do kernel com o USE flag symlink

Isso fará com que o /usr/src/linux aponte para as fontes do kernel recém-instaladas.

Se necessário, ele ainda pode ser modificado posteriormente com um dos outros dois métodos.

Configurando o link com eselect

Para definir symlink com eselect:

root #eselect kernel list
Available kernel symlink targets:
 [1] linux-3.14.14-gentoo *
 [2] linux-3.16.3-gentoo

Isso fornece as sources de kernel disponíveis. O asterisco indica as sources escolhidas.

Para alterar as sources do kernel, e.g. Para a segunda entrada, faça:

root #eselect kernel set 2

Atualização manual do link simbólico

Para definir o link simbólico manualmente:

root #ln -sf /usr/src/linux-3.16.3 /usr/src/linux
root #ls -l /usr/src/linux
lrwxrwxrwx 1 root root 19 Oct  4 10:21 /usr/src/linux -> linux-3.16.3-gentoo

Copiar a configuração anterior do kernel

A configuração do kernel antigo precisa ser copiada para o novo. Pode ser encontrado em vários lugares:

  • Em procfs, se a opção do kernel Habilitar acesso ao .config através de /proc/config.gz foi ativada no kernel presente:
root #zcat /proc/config.gz > /usr/src/linux/.config
  • Do kernel antigo. Isso só funcionará se o kernel antigo tiver sido compilado com CONFIG_IKCONFIG:
root #/usr/src/linux/scripts/extract-ikconfig /path/to/old/kernel >/usr/src/linux/.config
  • No diretório /boot, se a configuração foi instalada lá:
root #cp /boot/config-3.14.14-gentoo /usr/src/linux/.config
  • No diretório do kernel atualmente em execução:
root #cp /usr/src/linux-3.14.14-gentoo/.config /usr/src/linux/
  • No diretório /etc/kernels/, embora SAVE_CONFIG="yes" é definido em /etc/genkernel.conf e genkernel for utilizado anteriormente:
root #cp /etc/kernels/kernel-config-x86_64-3.14.14-gentoo /usr/src/linux/.config

Configurando o novo kernel

Para usar a configuração do kernel antigo com o novo kernel, ele precisa ser convertido. A conversão pode ser feita executando make silentoldconfig ou make olddefconfig. Use um ou outro, não ambos.

make silentoldconfig

A configuração a seguir é como a configuração baseada em texto com make config. Para novas opções de configuração, o usuário é solicitado a tomar uma decisão. Por exemplo:

root #cd /usr/src/linux
root #make silentoldconfig
Anticipatory I/O scheduler (IOSCHED_AS) [Y/n/m/?] (NEW)

A string (NEW) no final da linha está marcado a opção como nova. Da esquerda para a direita, em colchetes, são as possíveis respostas: Sim, Não, Módulos ou ? para mostrar a ajuda. É recomendado (i.e. padrão) a resposta capitalizada (aqui é S). A ajuda esclarece a opção ou driver.

Infelizmente make silentoldconfig não mostra muito mais informações para cada opção, como o contexto, por isso às vezes é difícil dar a resposta certa. Neste caso, o melhor caminho a seguir é lembrar o nome da opção e revê-lo depois através de uma das graphical kernel ferramentas de configuração do kernel.

make olddefconfig

Todas as novas opções de configuração devem ser definidas (i.e. padrão) usando make olddefconfig:

root #cd /usr/src/linux
root #make olddefconfig

make help

Use make help para ver outros métodos de conversão disponíveis:

root #make help

Compilação

Important
Quando módulos externos do kernel são instalados (como nvidia ou zfs), pode ser necessário executar make modules_prepare como descrito abaixo antes de compilar o kernel. Alguns módulos não podem ser instalados ou preparados antes que o kernel tenha sido construído.
Important
Não esqueça de reconfigurar o bootloader para os novos arquivos do kernel, e reconstruir o initramfs caso seja utilizado.

Nesta etapa, siga o procedimento deste artigo: configuração manual.

Reinstalando módulos externos do kernel

Qualquer módulo externo do kernel, como módulos binários do kernel, precisam ser reconstruídos em cada novo kernel. Se o kernel ainda não foi construído, ele deve primeiro ser preparado para a construção dos módulos externos do kernel:

root #make modules_prepare

Os pacotes que contêm módulos do kernel podem ser reconstruídos com @module-rebuild

root #emerge --ask @module-rebuild

Solução de problemas de compilação

Ao presenciar problemas de compilação durante a reconstrução do kernel atual, uma ajuda seria a limpeza das sources do kernel. Certifique-se de fazer backup do arquivo .config, pois a operação irá removê-lo. Certifique-se de não usar .bak ou ~ de sufixo no backup pois make distclean irá limpar também.

root #cp .config /usr/src/kernel_config_bk
root #make distclean
root #mv /usr/src/kernel_config_bk .config

Removendo kernel antigo

Veja em remoção do kernel.

Recursos externos