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?
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.
.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
où 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.
Voici les étapes. Cette procédure est basée sur nixCraft 's Comment: Compiler le noyau Linux 2.6 - mais considérablement modernisé.
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:
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
Pour obtenir la chaîne toolchain d'Ubuntu (gcc
, make
, etc.), installez le build-essential méta-paquet:
Sudo apt-get update
Sudo apt-get install build-essential
Les méthodes make
xconfig
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 .
Pour configurer graphiquement , installez libqt4-dev et 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
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
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
.
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:
une entrée dans la configuration de boot loader / afin que vous puissiez la sélectionner et la démarrer.
un système de fichiers initial RAM , l'environnement à partir duquel le noyau charge les pilotes et monte le système de fichiers /
.
(Si vous installez un ancien noyau ou si vous avez configuré votre noyau de manière à utiliser devfs à la place du plus récent, udev , vous devrez peut-être ou souhaitez configurer un ramdisk initial à la place. Si vous savez que vous en avez besoin, voir man initrd
.)
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
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?
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