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 des initramfs
disques intégrés (ramdisk) mais il n'est pas requis. Par exemple, le kernel.img
fichier de stock ne contient pas initramfs
while kernel_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 le kernel.img
fichier. Il était nécessaire dans les premiers jours de RaspberyPi mais de nos jours bootloader peut traiter régulièrement Image
et les zImage
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 à la bcmrpi_defconfig
place (trouvé sur les sources de noyau compatibles RaspberryPi) ou bcmrpi_emergency_defconfig
si vous prévoyez d'utiliser buildin initramfs
.
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 vos make
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:
- En tant que fichier compressé (pour utiliser cette option, vous n'avez pas besoin d'installer l'
git
utilitaire et vous pouvez le faire même sur RapsberryPi lui-même): Cliquez sur l' ZIP
icône, un petit Code
onglet ci-dessous en haut du site. Cela devrait vous permettre de télécharger les fichiers source lates en tant que zip
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):
git clone --depth 1 git://github.com/raspberrypi/linux.git
Utilisez la configuration par défaut fournie par la fondation:
cp arch/arm/configs/bcmrpi_defconfig .config
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):
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- oldconfig
Compilez le noyau:
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi-
Copiez les modules du noyau dans /tmp/modules
:
make ARCH=arm modules_install INSTALL_MOD_PATH=/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 cela initramfs
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 cas kernel_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:
- Essayez de construire et de démarrer le noyau sans
initramfs
fichier.
- Essayez d'ajouter du
initramfs
contenu prêt à votre noyau.
- Modifiez ce
initramfs
contenu en fonction de vos besoins.