Open NicolasFloquet opened 11 years ago
Je n'ai plus en tête la partie memory/pagination mais ça devrait vite revenir. Dis moi quand tu es chaud pour t'attaquer au problème comme ça je me remets dans le code pour t'aider.
Est-ce qu'on peut en discuter ? Tu as du code non commité ? N'hésite pas à faire une branche si ça repose sur un hack temporairement. Je dois pouvoir m'occuper de la partie mapping mémoire.
L'idée du ramdisk passé par grub, c'est d'avoir à moindre frais un accès à un disque contenant des executables et des fichiers de configuration de base, et ce très tôt.
Pour celà, grub propose de charger des "modules". Tout fichier passé à grub comme "module" est chargé en ram après le kernel, et on peut récupérer l'adresse de début/fin de tous les modules chargés via la structure de multiboot. Il suffit donc de passer à grub une image de disque, et d'initialiser un ramdisk sur la zone de mémoire fournie par grub.
Dans l'état actuel, le ramdisk est codé et fonction. j'arrive également à récuperer l'adresse du module chargé par grub sans problème. Là où ça devient compliqué, c'est que l'adresse à laquelle le module est chargé se situant après le kernel, la page ou il se trouve n'est pas mappée, et devient donc inaccessible dès que la pagination est activée.
Pour tester tout le reste, j'ai fait un hack consistant à remplacer le __e_kernel de memory.c par l'adresse de fin de mon module (ce qui revient à "élargir" la zone mémoire du kernel) Cette solution est très moche, faudrait qu'on trouve autre chose, mais je comprend rien à toute la partie memory/pagination, alors j'ai besoin d'aide :D