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


41

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 .configfichier et Makefileje modifiais un fichier si nécessaire, puis je l’exécutais makeet c’était fait.

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


Réponses:


39

1. Utilisez apt-get sourcepour 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 avec le vôtre .config, utilisez la make-kpkgméthode Debian "ancienne"

C'est la méthode alternative à l'ancienne décrite 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)

Ensuite, cddans le répertoire source (ici linux-3.2.0), et exécutez-le make oldconfigpour créer un .configfichier avec la configuration de votre noyau en cours d’exécution, ou copiez une troisième partie .configdans 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

Nest le nombre de tâches à exécuter en parallèle (généralement le nombre de processeurs que vous avez) et my-very-own-kernelconstitue une chaîne personnalisée pour identifier cette version.

Une fois terminé, l’image du noyau et les fichiers 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.


pourquoi ils ne vous disent rien sur ce diff, pour moi un diff est juste un diff, il peut tout contenir.
user827992

Je ne sais pas, il faudrait leur demander (google pour Canonical Kernel Team). Je viens de vous dire comment le construire;)
ish

1
ok, dernière question, comment appliquer ce diff compressé? : Doit aller dans le linux-3.2.0répertoire et exécuter patch -p1 <../patch.diff?
user827992

1
Il n'y a pas besoin d'appliquer le diff; apt-get source ...a déjà fait ça pour vous!
Ish

2
-1 Tu l'appelles "à l'ancienne", je l'appelle obsolète. fakeroot debian/rules editconfigs, fakeroot debian/rules clean, fakeroot debian/rules binaryEst la bonne façon, sans problème.
Aleksandr Dubinsky

19

Voici les étapes. Cette procédure est basée sur nixCraft « s Comment: Compile Linux noyau 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 du noyau en amont sur kernel.org . La version 3.16.1 (le dernier noyau stable à ce jour) 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 . archives xz , cliquez sur le lien "tar.xz" selon la version de votre choix:

capture d'écran de kernel.org, montrant les archives sources du noyau disponibles au téléchargement

Après avoir cdaccédé au répertoire dans lequel 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 d’ outils ( gcc, makeet ainsi de suite) d’ Ubuntu , installez le métapaquet build-essentialInstaller la version essentielle :

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

Deux méthodes relativement simples à utiliser pour configurer ce qui se passe dans votre noyau sont fournies par les makecibles xconfiget menuconfig.

xconfigexécute un utilitaire de configuration graphique, alors qu’il menuconfigest basé sur du texte (c’est-à-dire que son interface apparaît entièrement dans votre terminal). Chacun nécessite des logiciels supplémentaires non fournis par build-essentialInstaller la version essentielle .

Pour configurer graphiquement , installez libqt4-devInstallez libqt4-dev et pkg-configInstallez pkg-config et exécutezmake xconfig:

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

Pour configurer dans le terminal , installezlibncurses5-dev(merci à Hannu pour cette information) et lancezmake menuconfig:

sudo apt-get install libncurses5-dev
make menuconfig

Construisez le noyau configuré.

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

make

vmlinuzest "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 programme d' amorçage que vous utilisez.

Ensuite, construisez les modules du noyau chargeables :

make modules

Installez votre noyau nouvellement construit.

En supposant que ces makecommandes aboutissent, il est temps d'installer le nouveau noyau. Commencez par installer les modules:

sudo make modules_install

Puis installez le noyau lui-même:

sudo make install

Cela met 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 des symboles du noyau ) 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 vos initramfs avecmkinitramfs:

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 est la configuration par défaut sous Ubuntu depuis la version 9.10 - devrait automatiquement détecter le nouveau noyau et ajouter une option permettant de 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 enfoncé Shiftou appuyer Escpendant le démarrage pour afficher le menu de démarrage de GRUB dans lequel vous pouvez choisir entre les différents noyaux installés.

Pour définir votre noyau (ou un autre) par défaut, reportez-vous à la section Comment modifier l'ordre de démarrage de GRUB?


Étape 3, make menuconfignécessiteapt get install libncurses5-dev
Hannu

@ Hannu merci, j'ai juste complètement oublié de mentionner cela. Les utilisateurs du système 64 bits peuvent avoir besoin de "ia32-libs" également pour la prise en charge des programmes 32 bits.
Novice

Peut-être serait-il préférable de trouver un paquet indépendant de la version aussi ... Je ne suis pas sûr qu'il en existe.
Hannu

@EliahKagan Merci. Est-ce que ça va maintenant ou dois-je le supprimer complètement? Je n'ai aucun problème à le faire.
Novice

1
-1 Cela ne produit pas de noyau Ubuntu . Il ne produit même pas de fichiers .deb. Ceci est une recette pour des problèmes.
Aleksandr Dubinsky

3

Les instructions rapides pour construire un noyau Ubuntu (par opposition à vanilla) peuvent être trouvées 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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.