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.
Réponses:
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.
la source
Les options rd_start et rd_size sont-elles suffisantes?
Il semble que le port ARM ait une syntaxe pour l'option initrd :
la source
J'utilise le
phram
pilote à 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 commeNotez que vous avez également besoin de l'
memmap
argument 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 adressela source