Comment construire un noyau personnalisé avec localmodconfig qui prend en charge le matériel de plusieurs machines?

9

Lors de la configuration d'un serveur pour exécuter une seule tâche, comme une appliance, il peut être nécessaire de créer un noyau personnalisé. Par exemple pour économiser de l'espace disque.

Le système de fichiers racine Ubuntu Core 13.10 amd64 est un téléchargement de 38 Mo , où le méta-paquet "linux-image-generic" comprenant les dépendances requises téléchargera 79 Mo d'archives, et la taille d'un paquet kernel-image-xyz-generic est toujours de 14 Mo .

Pour construire un noyau dépouillé de modules que votre matériel n'utilisera pas, la make localmodconfigcommande est le bon outil pour le travail. Cependant, votre machine virtuelle qui exécute votre environnement de génération et de test charge différents modules que votre matériel de déploiement cible. Et / ou après un certain temps, votre matériel de déploiement peut devenir obsolète et un matériel différent est utilisé. Et à la fréquence à laquelle les mises à jour du noyau sont publiées, il peut devenir trop lourd de créer un noyau personnalisé pour chaque configuration matérielle différente.

Comment construire rapidement un noyau Linux personnalisé qui s'exécute sur quelques boîtiers matériels différents?

Pro Backup
la source

Réponses:

11

La make localmodconfigcommande est toujours le bon outil pour le travail. En fait make localmodconfigcourtscripts/kconfig/streamline_config.pl .

Entrée de fichier

Lors de la lecture du streamline_config.plcode source (perl), il existe une fonctionnalité non documentée my $lsmod_file = $ENV{'LSMOD'};qui permet l'entrée de fichier pour la détection du module chargé au lieu de la sortie de la lsmodcommande.

CD en direct

Parce que localmodconfig utilise la sortie lsmodpour détecter les modules chargés. Nous exécutons un Ubuntu Live CD sur chacune des différentes configurations matérielles, ouvrons un terminal ( Ctrl+ Alt+ T), exécutons lsmodet sauvegardons sa sortie.

Sortie concaténée

En concaténant les lsmodfichiers de sortie tout en supprimant les lignes d'en-tête consécutives, vous pouvez rapidement créer un fichier d'entrée qui couvre tous vos modules de noyau requis. Nous aimons revoir la liste des modules à la main et utiliser une recette plus manuelle:

  1. $ cd linux-3.11.0/
    ou allez dans le répertoire où vous exécuterez votre commande make

  2. $ lsmod > lsmod.txt
    crée un fichier texte avec vos modules chargés

  3. $ nano lsmod.txt
    ouvrira l'éditeur de texte nano, bien sûr, vous pouvez utiliser votre application d'édition préférée

  4. Ajoutez vos modules souhaités qui ne sont pas déjà là, au bas de ce fichier (voir pour un exemple le bas de cette réponse), et enregistrez-le lorsque vous êtes prêt.
    Remarque: utilisez des espaces et non des tabulations pour faire correspondre les positions de tabulation des colonnes.

  5. $ make LSMOD="lsmod.txt" localmodconfig
    cela indiquera à localmodconfig d'utiliser votre fichier lsmod.txt comme entrée pour la détection des modules chargés

En ce qui concerne Steven Rostedt - l'auteur de steamline_config.pl - pour avoir suggéré une notation plus courte à l'étape 5.


Exemple pour ce qu'il faut ajouter et ne pas ajouter à lsmod.txt (étape 4):

Parce que la carte principale Intel D33217CK a des capteurs thermiques Intel que nous aimerions lire, nous ajoutons ces lignes:

x86_pkg_temp_thermal   13810  0
intel_powerclamp       14239  0

Mais nous ne voulons pas exécuter de machines virtuelles sur ce matériel, c'est pourquoi nous sautons ces lignes:

kvm_intel             128218  0
kvm                   364766  1 kvm_intel

Il a un adaptateur Ethernet Gibabit Apple (Broadcom) connecté à son port Thunderbolt, nous ajoutons donc:

tg3                   152066  0
ptp                    18156  1 tg3
pps_core               18546  1 ptp

Nous pensons que nous n'avons pas besoin de la mise en miroir du volume, et n'ajoutons donc pas:

dm_mirror              21715  0
dm_region_hash         15984  1 dm_mirror
dm_log                 18072  2 dm_region_hash,dm_mirror

Et nous n'avons pas non plus besoin de sortie graphique (le texte fera l'affaire sur un serveur sans tête), donc nous n'incluons pas:

i915                  589697  3
i2c_algo_bit           13197  1 i915
drm_kms_helper         46867  1 i915
drm                   242354  4 i915,drm_kms_helper

Pour une autre machine, nous avons également besoin de ce pilote Ethernet Realtek:

r8169                  61434  0
mii                    13654  1 r8169
Pro Backup
la source