هل من الممكن إيقاف تشغيل Linux kernel واستئنافه في الوضع الحقيقي؟

StackOverflow https://stackoverflow.com/questions/855150

سؤال

لنفترض أنني أرغب في بدء توزيعة Linux صغيرة قبل بدء تشغيل نظام التشغيل العادي.

  1. يقوم BIOS بتحميل MBR وتنفيذ MBR.
  2. يحدد MBR القسم النشط وهو قسم Linux الخاص بي.
  3. يبدأ Linux وأقوم بتنفيذ ما يجب علي القيام به.
  4. تم إيقاف تشغيل Linux وقمت بالتبديل إلى الوضع الحقيقي مرة أخرى.
  5. يتم تحميل قطاع تمهيد القسم الأصلي ويبدأ نظام التشغيل العادي الخاص بي.

AFAIK، الخطوة 4 ستكون المهمة الصعبة، استعادة الحالة على جميع الأجهزة قبل نظام Linux، هل سيكون INT13h فعالاً؟هل أحتاج إلى استعادة جدول متجهات المقاطعة؟على سبيل المثال لا الحصر.

هل تم ذلك في أي مشروع قائم ربما؟

هل كانت مفيدة؟

المحلول

لا يدعم Linux هذا عادةً، خاصة أنه يقوم بإعادة تهيئة الأجهزة بطريقة قد لا تتوقعها برامج BIOS وDOS.ومع ذلك، هناك بعض البنية التحتية للرجوع إلى الوضع الحقيقي في حالات محددة - خاصة لإعادة التشغيل (راجع Machine_real_restart في Arch/x86/kernel/reboot.c) - ولها تعليمات برمجية لإعادة تهيئة الأجهزة لـ kexec أو التعليق المرحلي.أظن أنك قد تكون قادرًا على القيام بشيء ما باستخدام مجموعة من هذه الأشياء - لكنني لا أعرف ما إذا كانت النتيجة ستتطابق حقًا مع ما يتوقع DOS أو Windows رؤيته عند إعادة التشغيل.

ستكون الخطة الأسهل بكثير هي استخدام أداة تحميل التشغيل المتسلسلة التي يمكن ضبطها للتمهيد في تكوين معين مرة واحدة، مثل نكش.يمكنك استدعاء grub-set-default، ثم إعادة التشغيل.عندما يظهر GRUB، فإنه سينقل التحكم إلى Windows.ومن خلال تعيين نظام التشغيل الاحتياطي على قسم Linux، سيعود التحكم إلى Linux في عملية التمهيد التالية.

قد يكون هناك خيار آخر هو الاستخدام التمهيد الأساسي, ، لكنني لست متأكدًا مما إذا كان هذا جاهزًا للإنتاج لتشغيل النوافذ حتى الآن.

نصائح أخرى

لم أجرب هذا لذا لا أعرف إذا كان سينجح، ولكن هنا:

يوجد خيار في رأس ملف kernel بتنسيق bzImage يحدد عنوان رمز الوضع الحقيقي المطلوب تنفيذه قبل بدء تشغيل رمز الوضع المحمي.يمكنك إنشاء ملف متوافق مع bzImage بحد أدنى ولا يحتوي على نواة فعلية، ولكن يحتوي على رمز الوضع الحقيقي لتحميل MBR الخاص بك باستخدام INT 0x13 إلى 0x7c00 وjmp فيه كما يفعل BIOS.

إذا كنت تستخدم kexec لتحميل bzImage باستخدام خيارات "-t bzImage-x86 --real-mode"، فيجب إعادة تعيين بت PE في CR0 للإسقاط إلى الوضع الحقيقي (كما ذكر bdonlan أعلاه) وتنفيذ الكود المشار إليه بواسطة خيار رأس bzImage.

يُطلق على خيار رأس bzImage اسم realmode_swtch وهو موثق في /usr/src/linux/Documentation/x86/boot.txt، وكود تنسيق الرأس موجود في /usr/src/linux/arch/x86/boot/header.S

هل بحثت في com.kexec?

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top