J'ai construit mon noyau Linux (3.0.1) pour mon Raspberry Pi avec ces étapes suivantes:
1. Downloading kernel source
2. tar xvf source.tar.bz2
3. downloading arm cross compilation tool.
4. tar xvf arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
5. setting up path for cross tool export PATH=$PATH:/home/shan/<cross tool folder>/bin/
6. after entering linux source dir make ARCH=arm versatile_defconfig (is this reliable with raspberry pi)
7. make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
8. zImage is generated in /arch/arm/boot
Ma question est, comment puis-je construire kernel.img? Je pense qu'il contient zImage + ramdisk mais comment puis-je le construire?
Quelqu'un peut-il me guider pour créer un disque virtuel et les intégrer dans le fichier kernel.img? Je veux démarrer ce noyau sur mon Raspberry Pi.
cross-compilation
linux
kernel
arm
Shantanu Banerjee
la source
la source
kernel.org
place?Réponses:
fichier kernel.img
Lors de l'utilisation du noyau Linux, le
kernel.img
fichier est simplement renommélinux/arch/arm/boot/Image
. Il devrait également être possible (ou du moins c'était possible la dernière fois que j'ai vérifié) d'utiliser la version compressée de ce fichier -zImage
. Il peut contenir desinitramfs
disques intégrés (ramdisk) mais il n'est pas requis. Par exemple, lekernel.img
fichier de stock ne contient pasinitramfs
whilekernel_emergency.img
.Remarque: Le guide officiel de compilation du noyau sur le wiki eLinux suggère que vous devez utiliser l'
imagetool-uncompressed.py
outil pour préparer lekernel.img
fichier. Il était nécessaire dans les premiers jours de RaspberyPi mais de nos jours bootloader peut traiter régulièrementImage
et leszImage
fichiers.Problème avec les sources du noyau
Ce qui est très important, c'est que lors de la construction du noyau pour RaspberryPi, vous ne pouvez pas utiliser n'importe quelle version de celui-ci. Seule la version spéciale portée sur RaspberryPi fonctionnera. Malheureusement, la version en amont actuelle (trouvée sur le
kernel.org
site) n'est pas compatible avec RaspberryPi. En outre,versatil_config
n'est pas bon pour RaspberryPi, vous devez utiliser à labcmrpi_defconfig
place (trouvé sur les sources de noyau compatibles RaspberryPi) oubcmrpi_emergency_defconfig
si vous prévoyez d'utiliser buildininitramfs
.Instructions de construction du noyau
Le meilleur endroit pour récupérer les sources du noyau pour RaspberryPi est sur github de fondation . Vous pouvez également trouver des explications utiles sur la façon de l'obtenir et de le compiler sur le wiki officiel de RasbperryPi . Voici ma petite version simplifiée des étapes impliquées (REMARQUE: je suppose que vous voulez compiler le noyau de manière croisée. C'est beaucoup plus rapide et devrait créer les mêmes résultats mais la construction native du noyau sur RaspberryPi est également possible):
Téléchargez la chaîne d'outils officielle pour créer la vôtre. Plus simplement, je suppose qu'il est installé dans
/usr/bin/arm-linux-gnueabi-*
. Si vous l'avez ailleurs, vous devez changer d'CROSS_COMPILE
option dans toutes vosmake
commandes.Accédez au site https://github.com/raspberrypi/linux où vous pouvez trouver les sources officielles du noyau RapsberryPi. Vous pouvez télécharger le code de deux manières:
git
utilitaire et vous pouvez le faire même sur RapsberryPi lui-même): Cliquez sur l'ZIP
icône, un petitCode
onglet ci-dessous en haut du site. Cela devrait vous permettre de télécharger les fichiers source lates en tant quezip
fichier. Vous pouvez utiliser git à la place, mais cela (comme décrit sur le wiki) aura besoin de beaucoup plus d'espace et de temps. Décompressez ensuite le fichier pour obtenir l'arborescence source.Utiliser l'
git
utilitaire (cela ne fonctionnait pas pour moi sur RaspberryPi car il y a probablement une petite quantité de RAM mais devrait fonctionner correctement sur les systèmes de bureau (notez l'--depth 1
argument qui empêche git de télécharger tout l'historique du développement (ce qui est énorme):Utilisez la configuration par défaut fournie par la fondation:
Exécutez
make oldconfig
et répondez à certaines questions (il devrait être possible d'appuyer sur Entrée dans chaque question en laissant la réponse par défaut):Compilez le noyau:
Copiez les modules du noyau dans
/tmp/modules
:Utiliser le
Image
fichier commekernel.img
Téléchargez tous les modules de à partir
/tmp/modules/lib/modules/
de votre ordinateur vers le/lib/modules/
répertoire de vos rootfs RaspberryPi.Ajout d'initramfs
initramfs
Cependant, cela ne fournit pas d'instructions sur la création . Comme il s'agit d' un sujet très large (en gros, vous devez créer un environnement Linux fonctionnel et qu'il n'y a vraiment aucune limite à la complexité), je ne vais pas en parler ici maintenant. Je noterai seulement que celainitramfs
peut être utilisé sous deux formes différentes - une seule, où c'est un fichier séparé et buildin où elle est intégrée avec le fichier image du noyau (comme c'est le caskernel_emergency.img
). La deuxième option devrait être prise en charge par le chargeur de démarrage RaspberryPi mais il y a des rumeurs selon lesquelles il est cassé sur la version actuelle du firmware, vous devriez donc probablement utiliser la version intégrée.La meilleure façon de commencer est d'utiliser le contenu initramfs de travail (qui est utilisé pour kernel_emergency.img) en le téléchargeant à partir d'un autre référentiel github de fondation et seulement après avoir pu démarrer le noyau en utilisant cette
iniramfs
image, essayez de construire la vôtre. Tout ce qui devrait être nécessaire pour cela est de pointer vers l'CONFIG_INITRAMFS_SOURCE
option de configuration du répertoire téléchargé avec le noyau.Notes finales
Vous devez donc le faire en 3 étapes:
initramfs
fichier.initramfs
contenu prêt à votre noyau.initramfs
contenu en fonction de vos besoins.la source
zip
;git
transfère efficacement les fichiers et vous pouvez utiliserdepth=1
pour empêcher le téléchargement de l'historique (je pense).Si vous utilisez la même version de Debian sur les deux, utiliser X-Apt, dpkg-cross etc ... et les outils emdebian peuvent très bien fonctionner.
Source: utilisé pour développer des applications c ++ pour les systèmes ARM embarqués exécutant emdebian.
la source