Question

Disons que je voudrais commencer une petite distro linux avant mon démarrage du système d'exploitation ordinaire.

  1. MBR de charge du BIOS et exécuter MBR.
  2. MBR localise la partition active qui est ma partition linux.
  3. Linux commencer et j'exécuter ce que je dois faire.
  4. Linux arrêté et je passe en mode réel à nouveau.
  5. Le secteur de démarrage de la partition d'origine est chargé et mon démarrage du système d'exploitation ordinaire.

AFAIK, l'étape 4 sera la tâche difficile, restaurer l'état sur tous les appareils avant Linux, sera INT13h être fonctionnel? Ai-je besoin de restaurer le tableau Interrompre Vector? Pour ne citer que quelques-uns.

a-t-il été fait dans un projet existant peut-être?

Était-ce utile?

La solution

Linux ne supporte pas normalement ce, d'autant plus qu'il réinitialise le matériel d'une manière que les programmes BIOS et DOS ne peuvent pas attendre. Cependant, il y a une infrastructure pour revenir en mode réel dans des cas particuliers - en particulier, pour un redémarrage (voir machine_real_restart dans arch / x86 / kernel / reboot.c) - et a le code pour réinitialiser le matériel pour kexec ou suspendre. Je suppose que vous pourriez être en mesure de faire quelque chose avec une combinaison de ceux-ci - mais je ne sais pas si le résultat correspondra vraiment ce que DOS ou Windows compteraient voir le redémarrage

.

Un plan beaucoup plus facile serait d'utiliser un bootloader Chaîner qui peut être configuré pour démarrer dans une configuration particulière une fois, comme Grub. Vous pouvez invoquer par défaut du jeu de grub, puis redémarrez. Lorsque GRUB arrive, il serait alors passer le contrôle de Windows. En puis en définissant le système d'exploitation fallback à la partition Linux, le contrôle retournerait à Linux sur le prochain démarrage.

Une autre option serait d'utiliser Coreboot , mais je ne suis pas sûr que ce soit la production -ready pour le démarrage de windows encore.

Autres conseils

Je ne l'ai pas essayé, donc je ne sais pas si cela fonctionnerait, mais voilà:

Il y a une option dans l'en-tête d'un fichier de format noyau bzImage qui spécifie l'adresse du véritable code de mode pour exécuter avant le code de mode protégé démarre. Vous pouvez créer un minimum de fichiers compatible bzImage qui n'a pas le noyau réel, mais qui a un vrai code de mode pour charger votre MBR en utilisant INT 0x13 à 0x7c00 et JMP comme dans le BIOS fait.

Si vous utilisez kexec pour charger le bzImage en utilisant les « -t bzImage-x86 --real-mode » options, il doit remettre le bit de PE dans CR0 tomber à realmode (comme bdonlan mentionné ci-dessus) et exécuter le code a par l'option d'en-tête bzImage.

L'option d'en-tête bzImage est appelée realmode_swtch et est documentée dans /usr/src/linux/Documentation/x86/boot.txt, le code de format d'en-tête est dans / usr / src / linux / arch / x86 / boot / tête. S

Avez-vous regardé dans kexec ?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top