Compilation d'un noyau - pas de bzimage / vmlinuz produit
-
14-11-2019 - |
Question
J'essaie de compiler un noyau (version modifiée de 2.6.32.9, trouvée ici https://github.com/rabeeh/linux-2.6.32.9). Je fais la compilation sur un système de bras émulé (Qemu) (oui, je devrais probablement croix, mais c'est un sujet différent) exécutant Ubuntu Core (https://wiki.ubuntu.com/core) et le noyau (vmlinuz ) d'Ubuntu 11.04 (téléchargé à partir de http://ports.).
Après avoir coulé make bzImage
, Je regarde dans le arch/arm/boot
dossier, et ne trouvez qu'un fichier appelé zimage. J'ai essayé d'utiliser ce Zimage au lieu du VMLinuz que j'ai téléchargé sur Ubuntu.com dans Qemu, mais cela ne fonctionne pas, affiche simplement un écran noir. Je suppose que Zimage n'est pas la même chose que Bzimage, c'est ce que je pense que vmlinuz (à en juger par différents articles sur Internet).
Donc, quelques questions:
- Pourquoi pas
make bzImage
produire un bzimage / vmlinuz? - Puis-je convertir un VMLinux en un VMLinUz en utilisant par exemple Mkimage (il y a beaucoup de guides à l'opposé ...)?
Merci
La solution
J'obtiens le résultat que vous décrivez en demandant à Qemu d'imiter un CPU différent de l'ARM926EJ-S. Mais le démarrage de VolyatilePB avec le CPU par défaut fonctionne. J'ai compilé mon noyau et j'ai compilé tous les pilotes dedans (donc je n'utilise pas initrd).
Téléchargez simplement 100 Mo ARM-EABI Toolchain de http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ (C'est gratuit mais ils veulent votre e-mail, comme le compilateur Intel x86). Il a un installateur, dites simplement "Suivant" jusqu'à ce qu'il soit fait, comme sur Windows. Ajoutez ensuite le répertoire bac à votre chemin:
export PATH=~/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_EABI/bin/:$PATH
Puis retournez à votre source de noyau et faites
make ARCH=arm CROSS_COMPILE=arm-none-eabi- menuconfig
make ARCH=arm CROSS_COMPILE=arm-none-eabi- zImage modules
Tu peux faire
sudo make ARCH=arm CROSS_COMPILE=arm-none-eabi- INSTALL_MOD_PATH=path_to_arm_root modules_install
Si vous pouvez atteindre votre système de fichiers ARM à partir de l'hôte. Si vous utilisez NFS Root, c'est trivial, mais si vous utilisez une image de disque, vous devez soit:
- Utilisez une image de disque brut et KPartx (dépend de votre noyau hôte ayant DM-Multipath) ou
- Qemu-NBD qui prend en charge QCOW (et dépend de la prise en charge du périphérique de blocage réseau)
Pour démarrer dans Qemu avec un disque, vous avez besoin des bons pilotes (SYM53C8XX SCSI). Le defconfig polyvalent ne les sélectionne pas.
Autres conseils
La bzImage
Le nom de fichier et la cible de marque était à l'origine spécifique à x86 (Big Zimage). Beaucoup de chargeurs de démarrage sur des architectures qui ne sont pas égaux à Baremetal-X86 (SPARC, PPC, IA64, etc. et également Xen sur *) vmlinux
(ou l'une de ses formes comprimées, par exemple vmlinux.gz
, aka zimage). Je suppose que certains responsables ont simplement ajouté Bzimage comme nom cible car ils voulaient également avoir la folie x86 sur leur arc.