web-dev-qa-db-fra.com

Qu'est-ce qu'un moyen simple de recompiler le noyau?

Je suis intéressé par la compilation d'un nouveau noyau sous Ubuntu 12.04 x86 64 bits.

J'ai trouvé cette page wiki qui est fondamentalement un miroir pour ce blog et il y a beaucoup d'étapes ( git , etc.) qui me paraissent inutiles.

Avec les versions/distributions précédentes, je créais un fichier .config et modifiais un Makefile si nécessaire, puis exécutait simplement make et le tour était joué.

Y at-il un moyen simple de faire cela sous Ubuntu?

41
user827992

1. Utilisez apt-get source pour télécharger la version Ubuntu du noyau.

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

donne un dossier qui contient, par exemple:

 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 

Le diff en gras comprend toutes les personnalisations Ubuntu/Debian.

2. Pour construire un noyau de stock avec votre propre .config, utilisez la méthode "ancienne" de Debian make-kpkg.

Ceci est le autre manière à l'ancienne décrit dans le wiki:

Sudo apt-get install kernel-package

Si vous compilez un noyau pour la première fois:

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

Puis cd dans le répertoire source (ici, linux-3.2.0), puis exécutez make oldconfig pour créer le fichier .config avec la configuration de votre noyau en cours d’exécution, ou copiez un .config en troisième partie dans ce répertoire.

Selon que vous voulez une configuration texte ou graphique, installez:

(Texte)

Sudo apt-get install libncurses5 libncurses5-dev

(Graphique)

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

Et puis courez:

(Texte)

make menuconfig

(Graphique)

make xconfig

Une fois terminé, lancez simplement:

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

N est le nombre de tâches à exécuter en parallèle (généralement le nombre de processeurs dont vous disposez), et my-very-own-kernel est une chaîne personnalisée identifiant cette construction.

Une fois terminé, les fichiers d’image du noyau et d’en-tête seront prêts en tant que debs dans le répertoire parent; vous pouvez les installer avec Sudo dpkg -i, qui se chargera également de l'ajout d'entrées GRUB, etc.

39
ish

Voici les étapes. Cette procédure est basée sur nixCraft 's Comment: Compiler le noyau Linux 2.6 - mais considérablement modernisé.

Téléchargez et extrayez le code source du noyau que vous souhaitez construire.

Vous pouvez obtenir le code source upstream / kernel à l’adresse kernel.org . La version 3.16.1 (le dernier noyau stable en date d'écriture) sera utilisée ici. Vous devrez donc peut-être modifier ces commandes si vous utilisez une version différente.

Le code source du noyau est actuellement fourni dans . tar . xz archives, cliquez donc sur le lien "tar.xz" de la version de votre choix:

screenshot from kernel.org, showing kernel source archives available for download

Après cd / ing dans le répertoire où vous avez téléchargé l'archive, vous pouvez l'extraire avec tar :

tar xf linux-3.16.1.tar.xz

Installez les outils de construction nécessaires et effectuez la configuration du noyau.

Pour obtenir la chaîne toolchain d'Ubuntu (gcc, make, etc.), installez le build-essential Install build-essential méta-paquet:

Sudo apt-get update
Sudo apt-get install build-essential

Les méthodes makexconfig et menuconfig permettent de configurer ce qui se passe dans votre noyau.

xconfig exécute un utilitaire de configuration graphique, tandis que menuconfig est basé sur du texte (c'est-à-dire que son interface apparaît entièrement dans votre terminal). Chacun nécessite des logiciels supplémentaires et non fournis par build-essential Install build-essential .

Pour configurer graphiquement , installez libqt4-dev Install libqt4-dev et pkg-config Install pkg-config et exécutez make xconfig:

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

Pour configurer dans le terminal , installez libncurses5-dev (grâce à Hannu pour cette information) et lancez make menuconfig:

Sudo apt-get install libncurses5-dev
make menuconfig

Construisez le noyau configuré.

Commencez par exécuter ceci pour compiler le noyau et créer vmlinuz :

make

vmlinuz est "le noyau". Plus précisément, c'est l'image du noyau qui sera décompressée et chargée en mémoire par GRUB ou par tout autre boot loader que vous utilisez.

Ensuite, construisez les modules de noyau chargeables :

make modules

Installez votre noyau nouvellement construit.

En supposant que ces commandes make se soient déroulées correctement, il est temps d'installer le nouveau noyau. D'abord installez les modules:

Sudo make modules_install

Puis installez le noyau lui-même:

Sudo make install

Cela place vmlinuz-3.16.1 (une copie de vmlinuz), config-3.16.1 (un fichier texte contenant les paramètres de configuration du noyau) et System.map-3.16.1 (la table de recherche de symboles kernel ) dans /boot. Pour plus de détails, voir cet article comp.os.linux.misc de Hadron et man installkernel .

Configuration finale, afin que le noyau puisse être démarré et initialiser le système:

Cette section est en partie basée sur les informations contenues dans Kernel/Compile .

Avec le noyau maintenant où il doit être, il a besoin de:

Générez votre initramfs avec mkinitramfs :

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

Lorsque vous mettez à jour la configuration du chargeur de démarrage GRUB2 - qui a été la valeur par défaut sous Ubuntu depuis 9.10 - devrait détecter automatiquement le nouveau noyau et ajouter un option pour démarrer à partir de celui-ci.

Sudo update-grub

Essayez votre noyau.

Vous pouvez maintenant redémarrer pour tester votre nouveau noyau. Vous devrez peut-être maintenir Shift ou appuyez sur Esc pendant le démarrage pour voir le menu de démarrage GRUB dans lequel vous pouvez choisir entre les différents noyaux installés.

Pour que votre noyau (ou un autre) soit celui par défaut, voir Comment changer l'ordre de démarrage GRUB?

19
Novice

Les instructions rapides pour la construction d'un noyau Ubuntu (par opposition à Vanilla) sont disponibles ici: https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel .

Je ne vais pas copier le wiki en entier, mais je vais énumérer les étapes minimales pour compiler la version du noyau Ubuntu que vous avez actuellement installée. (Pour obtenir la version la plus récente, clonez le référentiel git du noyau de la prochaine version d'Ubuntu.) Testé sur 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
3
Aleksandr Dubinsky