Forum Linux.noyau Distribuer un noyau

Posté par .
Tags : aucun
-2
19
déc.
2011

Salut,

Je cherche à compiler un noyau Linux à partir d'une machine pour une autre. Il ne s'agit pas ici d'architectures exotiques. La machine compilant est un Intel Core i5 M 520 (Fedora) et celle à qui est destiné le noyau, un Intel Dual Core E2180 (Debian), 64 bits tous les deux.

L'idée est donc à la manière des distributions de créer un noyau utilisant une architecture générique (ou du moins le PGCD des deux ;) et d'avoir au final une archive tar qu'il ne restera plus qu'à extraire sur la machine cible.

La question est donc, comment obtenir un tel environnement de compilation ?

  • # Cross compilation

    Posté par . Évalué à -2. Dernière modification le 19/12/11 à 20:28.

    J'ai pas vraiment saisi ton besoin en fait. Pourrais-tu nous expliquer quel est ton besoin réel ?

    Ce que tu cherches à faire c'est de la compilation croisée.

    Sinon pour le PGDC je dirai que l'utilisation de VESA est un must.

    Si la configuration de la compilation de ton kernel doit prendre en compte plusieurs architectures (et surtout la prise en compte de plusieurs configurations pour une même architecture), le mieux c'est de tout coller en module, non ?

    • [^] # Re: Cross compilation

      Posté par . Évalué à 1. Dernière modification le 19/12/11 à 20:45.

      Oui au final, je pense qu'il s'agit de compilation croisée. Cependant, l'architecture d'origine n'est pas si différente de l'architecture cible.

      Au final je voudrais savoir comment monter un environnement de compilation pour produire un binaire (bzImage) pour ma cible sachant qu'il n'y a pas de grandes différences et accessoirement faire en sorte que lorsque je tape make modules_install que l'installation soit faite dans un répertoire que je pourrai compresser pour la distribution.

      PS: Si ça peut clarifier la chose comment font les distributions pour produire un noyau amd64 qui tourne partout (sans surprises) ? Je pense que la solution que je cherche devrais se rapprocher de ça...

      • [^] # Re: Cross compilation

        Posté par . Évalué à 2. Dernière modification le 19/12/11 à 20:49.

        comment font les distributions pour produire un noyau amd64 qui tourne partout

        Bah en laissant un max de fonctionnalités/pilotes disponibles sous forme de module ?

        • [^] # Re: Cross compilation

          Posté par . Évalué à 3. Dernière modification le 21/12/11 à 03:02.

          c'est suffisant mais s'il veut faire ça propre il devra ré-générer quelques fichiers s'il le fait dans l'ordre décrit. Ce n'est pas nécessaire au bon fonctionnement de ce type de machine, puisque le système va très bien se débrouiller tout seul, mais c'est quant même mieux d'éviter de se retrouver avec des spécificités d'une machine sur une autre. Et ça peut éventuellement éviter qu'il se retrouve avec un initrd foiré (en utilisant un outil automatique de la distro) car fait ensuite sur un noyau installé comme ça.

          Perso je partirai au plus simple, c'est souple et rapide :
          --> ne pas faire de make {modules,}install sur la machine de compilation
          --> mais le déporter sur les machines cibles.
          Donc réaliser le tarball servant au déploiement avec/depuis l'arborescence du noyau + modules compilés. (et non sur les résultats de make {modules,}install) ça évite de refaire des roues très bien faites, et ça évite les éventuels pb cités plus haut.

          ps : Spack : une fois que ta procédure de déploiement est en place, tu peux automatiser le process initial pour la récupération des kernels qui t'intéressent avec l'outil ketchup par exemple. (et, j'imagine, y appliquer les patchs)

          bisous

      • [^] # Re: Cross compilation

        Posté par . Évalué à 0.

        editer le makefile pour mettre un parametre custom dans le nom du noyau

        tu auras alors un /boot/vmlinuz-mon-noyau-custom, /lib/modules-mon-noyau-custom
        ...

        à toi ensuite de compresser tout ca pour le mettre sur l'autre machine

      • [^] # Re: Cross compilation

        Posté par . Évalué à 0.

        Pour viser une architecture donnée :

        (de x86_64 à x86_64 dans ton cas)

        make ARCH=x86_64 menuconfig
        
        

        puis

        make ARCH=x86_64 bzImage modules modules_install
        
        

        éventuellement :

        make ARCH=x86_64 CROSS-COMPILE=x86_64-unknown-linux-gnu- bzImage modules modules_install
        
        

        ou

        make ARCH=x86_64 CROSS-COMPILE=x86_64-redhat-linux-gnu- bzImage modules modules_install(sur RedHat)
        
        
        Si tu veux compiler le kernel dans un autre répertoire que celui des sources :
        make ARCH=x86_64 O=/chemin/absolu/vers/le/répertoire bzImage modules
        
        
        Si tu veux installer les modules dans un autre répertoire :
        make ARCH=x86_64  INSTALL_MOD_PATH=/chemin/absolu/vers/le/répertoire bzImage modules modules_install
        
        

        (sinon il installe dans /lib/modules/kernel/)

  • # Tentative de réponse.

    Posté par . Évalué à 1.

    Version bobotrankil :
    Une installation de Debian dans un chroot sur ta Fedora (yum install debootstrap), avec le minimum pour compiler, et obtenir de beaux linux-image_Spack_rev0016.8.NN.XX.deb.
    Transférer, dpkg -i linux-image_Spack_rev0016.8.NN.XX.deb

    Version Kerouac, déjà répondu.

    • [^] # Re: Tentative de réponse.

      Posté par . Évalué à 1.

      Ah pas mal l'idée du debootstrap. En tout cas je m'attendais à une mise en place plus complexe mais bon j'ai vu trop gros... :D

  • # Pas de cross-compilation

    Posté par . Évalué à 4.

    Il n'y a pas d'environnement de cross-compilation a mettre en place puisque tu as la même architecture sur les deux machines.

    Tu peux compiler ton noyau sur une machine, et au lieu de l'installer, faire un gros tar du kernel produit, des modules et éventuellement des fichiers annexes (.config, map...).

    Si tu souhaites faire un paquet debian (un .deb) qui s'installe sur la debian et qui facilite l'installation (configuration automatique du système de boot; ménage de tous les fichiers à la désintallation...), alors je ne pense pas que les outils soient packagés sous Fedora; le mieux est d'installer une mini-debian dans un chroot avec les paquets nécessaires.

    • [^] # Re: Pas de cross-compilation

      Posté par . Évalué à 4.

      Merci, c'est un peu sur le point de l'architecture que je coinçais je pensais que la compilation aurait pu activer des extensions supportés par le processeur compilant mais pas par l'autre.

      Au final, j'ai compilé mon noyau et ça passe bien.

      • [^] # Re: Pas de cross-compilation

        Posté par . Évalué à 2.

        je pensais que la compilation aurait pu activer des extensions supportés par le processeur compilant

        Ce n'est pas le cas, tu peux choisir, au moment où tu configures ton noyau, les optimisations et les restrictions à appliquer.

    • [^] # Re: Pas de cross-compilation

      Posté par . Évalué à 2.

      le mieux est d'installer une mini-debian dans un chroot avec les paquets nécessaires.

      Et debootstrap permet justement d'installer de quoi se chrooter directement, de taper apt-get install debian-history gcc bison whatever && apt-get source linux-imageXX, sans plus de soucis.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.