O que é uma maneira simples de recompilar o kernel?

41

Estou interessado em compilar um novo kernel no Ubuntu 12.04 x86 64 bits.

Eu encontrei esta página wiki, que é basicamente um espelho para este blog e existem muitas etapas ( git , etc.) que parecem inúteis para mim.

Com lançamentos / distribuições anteriores, eu costumava criar um .configarquivo e modificar um Makefilese necessário, apenas execute makee pronto.

Existe uma maneira simples de fazer isso no Ubuntu?

user827992
fonte
1
Vale a pena conferir: wiki.ubuntu.com/Kernel/BuildYourOwnKernel
Colin Ian King

Respostas:

39

1. Use apt-get sourcepara baixar a versão Ubuntu do kernel

apt-get source linux-image-$(uname -r)

fornece uma pasta que contém, por exemplo:

linux-3.2.0 linux_3.2.0-26.41.dsc
 linux_3.2.0-26.41.diff.gz   linux_3.2.0.orig.tar.gz

O diff em negrito inclui todas as personalizações do Ubuntu / Debian.

2. Para construir um kernel padrão com o seu .config, use o make-kpkgmétodo Debian "antiquado"

Esta é a maneira antiquada alternativa descrita no wiki:

sudo apt-get install kernel-package

Se você estiver compilando um kernel pela primeira vez:

sudo apt-get build-dep linux-image-$(uname -r)

Depois, cdno diretório de origem (aqui linux-3.2.0), e execute make oldconfigpara criar um .configarquivo com a configuração do kernel em execução ou copie uma terceira parte .configpara esse diretório.

Dependendo se você deseja uma configuração gráfica ou de texto, instale:

(Texto)

sudo apt-get install libncurses5 libncurses5-dev

(Gráfico)

sudo apt-get install qt3-dev-tools libqt3-mt-dev

E então execute:

(Texto)

make menuconfig

(Gráfico)

make xconfig

Quando terminar, basta executar:

fakeroot make-kpkg -j N --initrd --append-to-version=my-very-own-kernel kernel-image kernel-headers

onde Né quantas tarefas executar em paralelo (geralmente o número de CPUs que você possui) e my-very-own-kernelé uma sequência personalizada para identificar essa compilação.

Quando terminar, a imagem do kernel e os arquivos de cabeçalho estarão prontos como debs no diretório pai; você pode instalá-los com sudo dpkg -i, que também cuidará de adicionar entradas GRUB, etc.

ish
fonte
por que eles não dizem nada sobre esse diff, para mim um diff é apenas um diff, pode conter tudo.
user827992
Eu não sei, você teria que perguntar a eles (google para Canonical Kernel Team). Eu apenas lhe disse como construí-lo;)
ish
1
ok, última pergunta, como aplicar esse diff compactado? : DI tem que ir no linux-3.2.0diretório e executar patch -p1 <../patch.diff?
user827992
1
Não há necessidade de aplicar o diff; apt-get source ...já fez isso por você!
Ish
2
-1 Você chama isso de "antiquado", eu chamo de desatualizado. fakeroot debian/rules editconfigs, fakeroot debian/rules clean, fakeroot debian/rules binaryÉ a maneira correta, livre de problemas.
Aleksandr Dubinsky 28/09
19

Aqui estão os passos. Este procedimento é baseado em Como: Compilar o kernel 2.6 do nixCraft - mas modernizado consideravelmente.

Faça o download e extraia o código fonte do kernel que você deseja construir.

Você pode obter o código-fonte upstream do kernel em kernel.org . A versão 3.16.1 (o último kernel estável até o momento da redação deste documento) será usada aqui. Portanto, pode ser necessário modificar esses comandos se você estiver usando uma versão diferente.

O código fonte do kernel é atualmente fornecido em. alcatrão . arquivos xz , clique no link "tar.xz" da versão que desejar:

captura de tela do kernel.org, mostrando os arquivos de origem do kernel disponíveis para download

Após cdacessar o diretório em que você baixou o arquivo, é possível extraí-lo com tar:

tar xf linux-3.16.1.tar.xz

Instale as ferramentas de construção necessárias e execute a configuração do kernel.

Para obter o conjunto de ferramentas do Ubuntu ( gcc, makee assim por diante), instale o metapacote essencialInstale o build-essential da compilação :

sudo apt-get update
sudo apt-get install build-essential

Duas maneiras razoavelmente fáceis de usar para configurar o que entra no seu kernel são fornecidas pelos makedestinos xconfige menuconfig.

xconfigexecuta um utilitário de configuração gráfica, enquanto menuconfigé baseado em texto (ou seja, sua interface aparece totalmente dentro do seu terminal). Cada um requer algum software adicional não fornecido pelo essencial da compilaçãoInstale o build-essential .

Para configurar graficamente , instale libqt4-devInstale a libqt4-dev e pkg-configInstale o pkg-config e executemake xconfig:

sudo apt-get install libqt4-dev pkg-config
make xconfig

Para configurar no terminal , instalelibncurses5-dev(obrigado a Hannu por esta informação) e executemake menuconfig:

sudo apt-get install libncurses5-dev
make menuconfig

Crie o kernel configurado.

Primeiro, execute isso para compilar o kernel e criar vmlinuz:

make

vmlinuzé "o kernel". Especificamente, é a imagem do kernel que será descompactada e carregada na memória pelo GRUB ou qualquer outro carregador de inicialização que você usar.

Em seguida, construa os módulos carregáveis ​​do kernel :

make modules

Instale seu kernel recém-construído.

Supondo que esses makecomandos foram concluídos com sucesso, é hora de instalar o novo kernel. Primeiro instale os módulos:

sudo make modules_install

Em seguida, instale o próprio kernel :

sudo make install

Isso coloca vmlinuz-3.16.1(uma cópia de vmlinuz), config-3.16.1(um arquivo de texto que armazena os parâmetros de configuração do kernel) e System.map-3.16.1(a tabela de pesquisa de símbolos do kernel ) /boot. Para mais detalhes, consulte esta publicação comp.os.linux.misc de Hadron e man installkernel.

Configuração final, para que o kernel possa ser iniciado e inicialize o sistema:

Esta seção é parcialmente baseada nas informações do Kernel / Compile .

Com o kernel agora onde precisa estar, ele precisa:

Gere seus initramfs commkinitramfs:

cd /boot
sudo mkinitramfs -ko initrd.img-3.16.1 3.16.1

Quando você atualiza a configuração do carregador de inicialização GRUB2 - que é o padrão no Ubuntu desde 9.10 - deve detectar automaticamente o novo kernel e adicionar uma opção para inicializá-lo.

sudo update-grub

Experimente o seu kernel.

Agora você pode reiniciar para testar seu novo kernel. Pode ser necessário manter pressionado Shiftou pressionar Escdurante a inicialização para ver o menu de inicialização do GRUB, onde você pode selecionar entre os diferentes kernels instalados.

Para tornar seu kernel (ou outro) o padrão, consulte Como altero a ordem de inicialização do GRUB?

Novato
fonte
Etapa 3, make menuconfigrequer #apt get install libncurses5-dev
Hannu
@ Hanu obrigado, eu esqueci completamente de mencionar isso. Os usuários do sistema de 64 bits também podem precisar de "ia32-libs" para que o suporte de programas de 32 bits seja executado.
Novice
Poderia ser melhor encontrar um pacote independente de versão também ... Não tenho certeza se existe algum.
21714 Hannu
@EliahKagan Obrigado. Está tudo bem agora ou devo excluí-lo completamente? Não tenho nenhum problema em fazer isso.
Novice
1
-1 Isso não produz um kernel do Ubuntu . Ele nem produz arquivos .deb. Esta é uma receita para problemas.
Aleksandr Dubinsky 28/09
3

As instruções rápidas para a construção de um kernel do Ubuntu (em oposição ao vanilla) podem ser encontradas aqui: https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel .

Não copiarei o wiki inteiro, mas listarei as etapas mínimas para compilar a versão do kernel do Ubuntu que você instalou atualmente. (Para obter a versão mais recente, clone o repositório kernel git da próxima versão do Ubuntu.) Testado no Ubuntu 16.04.

# Get source code
apt-get source linux-image-$(uname -r)

# Install dependencies
sudo apt-get build-dep linux-image-$(uname -r)

# Compile
cd linux-4.4.0
fakeroot debian/rules clean
fakeroot debian/rules binary

# Install (obviously the versions will be different)
cd ..
sudo dpkg -i linux-image-4.4.0-38-generic_4.4.0-38.57_amd64.deb linux-headers-4.4.0-38_4.4.0-38.57_all.deb linux-headers-4.4.0-38-generic_4.4.0-38.57_amd64.deb
Aleksandr Dubinsky
fonte