Comment démarrer Linux avec un rootfs en RAM?


16

Le rootfs est une image squashfs et mon chargeur de démarrage la charge dans une adresse en SDRAM. Quels paramètres dois-je transmettre au noyau pour qu'il puisse monter les rootfs à partir de là? La prise en charge de Squashfs est intégrée et fonctionne déjà avec

root=/dev/mtdblock2 rootfstype=squashfs  

pour démarrer à partir du flash.

EDIT: Il s'agit d'un périphérique intégré basé sur MIPS, utilisant un chargeur de démarrage personnalisé. Normalement, le chargeur de démarrage extrait le noyau compressé de la mémoire flash dans la SDRAM, puis le noyau monte / dev / mtdblock2 en tant que rootfs. J'essaie d'améliorer le chargeur de démarrage afin qu'il puisse télécharger une image sur sa RAM et démarrer sans écrire dans le flash.

Je ne peux pas comprendre comment faire monter Linux une image de système de fichiers dans la RAM en tant que rootfs.


Veuillez mieux décrire ce que vous essayez de réaliser si vous connaissez déjà le fonctionnement de squashfs. Comment savez-vous que cela fonctionne? Ce qui se produit? Et surtout, qu'est - ce qui ne fonctionne pas comme vous le souhaitez?
rozcietrzewiacz

1
De plus, quel chargeur de démarrage l'appareil utilise-t-il?
rozcietrzewiacz

Je pense que si vous utilisez memdisk (de SYSLINUX) comme noyau, il charge toute l'image en mémoire et démarre à partir de là
golimar

Réponses:


10

J'utiliserais un initramfs. ( http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt )

De nombreuses distributions Linux utilisent un initramfs (à ne pas confondre avec un initrd, elles sont différentes) pendant le processus de démarrage, principalement pour pouvoir démarrer les programmes de l'espace utilisateur très tôt dans le processus de démarrage. Cependant, vous pouvez l'utiliser pour tout ce que vous voulez.

L'avantage d'un initramfs sur un initrd est qu'un initramfs utilise un système de fichiers tmpfs tandis qu'un initrd utilise un périphérique de bloc ram. La principale différence ici est que pour un initrd, vous devez préallouer tout l'espace pour le système de fichiers, même si vous n'allez pas utiliser tout cet espace. Donc, si vous n'utilisez pas l'espace du système de fichiers, vous perdez de la mémoire RAM, qui sur un périphérique intégré, est souvent une ressource rare. Tmpfs est un système de fichiers qui manque de RAM, mais utilise uniquement autant de RAM que celui actuellement utilisé sur le système de fichiers. Donc, si vous supprimez un fichier d'un tmpfs, ce ram est immédiatement libéré.

Maintenant, normalement, un initramfs est temporaire, uniquement utilisé pour exécuter certains programmes très tôt dans le processus de démarrage. Une fois ces programmes exécutés, le contrôle est transféré au système de fichiers réel exécuté sur un disque physique. Cependant, vous n'êtes pas obligé de le faire. Rien ne vous empêche de manquer indéfiniment d'initramfs.


J'ai donc essayé de configurer un système qui fonctionne "indéfiniment hors des initramfs". Le système est en place pour la plupart, mais j'ai eu quelques problèmes - je me demande si vous pourriez être en mesure de faire la lumière? Question publiée ici
dtmland


0

J'utilise le phrampilote à cet effet: il émule un périphérique MTD en utilisant la mémoire physique, ce qui signifie que vous pouvez utiliser exactement la même image rootfs pour les tests / développement que vous allez ensuite graver sur le vrai flash. La magie nécessaire sur la ligne de commande du noyau serait quelque chose comme

phram.phram=rootfs,0x100000,9Mi root=/dev/mtdblock0 memmap=9M\$100000

Notez que vous avez également besoin de l' memmapargument pour vous assurer que le noyau n'essaie pas d'utiliser cette mémoire pour lui-même. 9 Mo est la taille de mes rootfs (ou était). Le \ avant $ est nécessaire dans mon chargeur de démarrage, peut-être pas dans le vôtre. L'adresse que j'ai choisie est arbitraire, car je ne sais pas comment la mémoire physique est disposée sur votre appareil, alors choisissez celle qui vous convient. Je suppose que vous avez déjà utilisé tftp ou quelque chose pour charger vos rootfs à cette adresse

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.