O que é uma maneira simples de recompilar o kernel?

39

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

Eu encontrei esta página wiki que é basicamente um espelho para este blog e há vários passos ( git , etc. ) que parecem inúteis para mim.

Com lançamentos / distribuições anteriores, eu costumava criar um arquivo .config e modificar um Makefile se eu precisasse, depois apenas executar make e pronto.

Existe uma maneira simples de fazer isso no Ubuntu?

    
por user827992 13.07.2012 / 23:40

3 respostas

36

1. Use apt-get source para baixar a versão do 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 de ações com seu próprio .config , use o Debian "old-fashioned" make-kpkg method

Esta é a maneira antiquada e 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)

Em seguida, cd no diretório de origem (aqui, linux-3.2.0 ) e execute make oldconfig para criar o arquivo .config com a configuração do kernel em execução ou copie uma terceira parte .config para esse diretório.

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

(texto)

sudo apt-get install libncurses5 libncurses5-dev

(gráfico)

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

E, em seguida, 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

em que N é quantos trabalhos devem ser executados em paralelo (geralmente o número de CPUs que você tem) e my-very-own-kernel é uma string personalizada para identificar essa compilação.

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

    
por ish 14.07.2012 / 03:09
16

Aqui estão os passos. Este procedimento é baseado no nixCraft 's Como: Compilar o kernel Linux 2.6 - mas modernizado consideravelmente.

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

Você pode obter código-fonte do kernel upstream em kernel.org . Versão 3.16.1 (o kernel estável mais recente no momento em que escrevo) será usado aqui. Então você pode precisar modificar esses comandos se estiver usando uma versão diferente.

O código-fonte do kernel é atualmente fornecido em tar . xz arquivos, então clique no link" tar.xz "pela versão que quiser:

Após cd para o diretório onde você baixou o arquivo, você pode extraí-lo com < href="http://manpages.ubuntu.com/manpages/man1/tar.1.html"> tar :

tar xf linux-3.16.1.tar.xz

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

Para obter o toolchain do Ubuntu ( gcc , make e assim por diante) instale o build-essential meta-pacote:

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 make targets xconfig e menuconfig .

xconfig executa um utilitário de configuração gráfica, enquanto menuconfig é baseado em texto (ou seja, sua interface aparece totalmente no seu terminal). Cada um requer algum software adicional não fornecido por build-essential .

Para configurar graficamente, instale o libqt4-dev img src="https://hostmar.co/software-small"> e pkg-config < img src="https://hostmar.co/software-small"> e execute make xconfig :

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

Para configurar no terminal , instale libncurses5-dev (graças a Hannu para esta informação) e execute make menuconfig :

sudo apt-get install libncurses5-dev
make menuconfig

Construa 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 por GRUB ou qualquer outro gerenciador de partida que você usa.

Em seguida, crie os módulos de kernel carregáveis :

make modules

Instale seu kernel recém-construído.

Assumindo que os comandos make foram concluídos com sucesso, é hora de instalar o novo kernel. Primeiro instale os módulos:

sudo make modules_install

Em seguida, instale o kernel :

sudo make install

Isso coloca vmlinuz-3.16.1 (uma cópia de vmlinuz ), config-3.16.1 (um arquivo de texto armazenando parâmetros de configuração do kernel) e System.map-3.16.1 (o Tabela de pesquisa de símbolos do kernel ) em /boot . Para mais detalhes, veja este post comp.os.linux.misc por Hadron e man installkernel .

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

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

Com o kernel agora onde ele precisa estar, é necessário:

Gere seu initramfs com mkinitramfs :

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 tem sido o padrão no Ubuntu desde 9.10-- deve detectar automaticamente o novo kernel e adicionar uma opção para inicializar a partir dele.

sudo update-grub

Experimente o seu kernel.

Agora você pode reinicializar para testar seu novo kernel. Você pode precisar manter pressionado Shift durante 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, veja Como altero a ordem de inicialização do GRUB?

    
por Novice 19.08.2014 / 08:18
2

As instruções rápidas para criar um kernel Ubuntu (em oposição à baunilha) podem ser encontradas aqui: link .

Eu não vou copiar o wiki inteiro, mas vou listar os passos mínimos para compilar a versão do kernel do Ubuntu que você atualmente instalou. (Para obter a versão mais recente, copie o repositório git do kernel do próximo lançamento 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
    
por Aleksandr Dubinsky 28.09.2016 / 14:33