كيفية تحميل النواة إلى الذاكرة من القرص المضغوط باستخدام التجميع (NASM)

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

سؤال

أنا أكتب تمهيدًا ونواة لنفسي وسيتم حرق كل من تمهيد التشغيل والنواة على قرص CD-R وسيعملان كقرص مضغوط مباشر.إنه ليس قرصًا مضغوطًا مباشرًا لنظام التشغيل Linux أو أي شيء آخر، بل هو أداة تحميل التشغيل والنواة الخاصة بي تمامًا.لا أرغب في استخدام أدوات تحميل منطقية أخرى (على سبيل المثال.GRUB) لذا من فضلك لا تقترح علي استخدامها.

وهنا سؤالي:في رمز ASM الخاص بأداة تحميل التشغيل، أريد تحميل kernel وإدخال kernel في ذاكرة الوصول العشوائي (RAM). من القرص المضغوط (ليس من القرص الصلب أو القرص المرن)، ولنفترض أننا نعرف مكان وجود النواة بالضبط على القرص المضغوط (رقم القطاع).بقدر ما أعرف، لا بد لي من استخدام int 0x13, AH = 02h والذي سيقرأ القطاعات من Drive إلى ذاكرة الوصول العشوائي (RAM).من أجل استخدام خدمة المقاطعة هذه، لا بد لي من تعيين اثنين من السجلات التي سأدرجها أدناه:حدود:آه 02H القطاعات لقراءة COUNT CX TRACK + SECTOR

مشكلتي تتعلق بـ DL وDH. من أجل الإشارة إلى القرص الصلب الأول للقراءة منه، يمكننا ضبطه على 80h أو، بالنسبة للقرص المرن، يمكننا ضبطه على 00h.لكني أريد القراءة من القرص المضغوط ولا أعرف القيم التي يجب أن أستخدمها لـ DH وDL.

بغرض القراءة من القرص المضغوط زوجين من القطاعات إلى ذاكرة الوصول العشوائي هل هي المقاطعة الصحيحة (int 0x13)؟إذا كانت الإجابة بنعم، ما هي القيمة التي يجب أن أضعها لـ DH وDL.

التحيات ، الفقراء.

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

المحلول

لكي يقوم BIOS بتحميل قطاع التمهيد من القرص المضغوط، ستحتاج إلى جعل القرص المضغوط قابلاً للتمهيد باستخدام ملف "إل توريتو" معيار.

بمجرد استخدام ذلك، لديك خياران
أ.المحاكاة - يحاكي BIOS إما القرص المرن أو القرص الصلب، ويمكنك قراءة النواة الخاصة بك من خلال استدعاءات INT13 باستخدام أي من الجهاز 00 أو الجهاز 80.
ب.لا يقوم الجهاز بالمحاكاة، ويمكنك القراءة مباشرة من القرص المضغوط باستخدام وظيفة INT13 ExtendedRead.

لمعرفة كيفية القيام بذلك، انظر إلى محمل Linux "ISOLINUX" - ISOLINUX.ASM

لتوفير نقطة بداية أكثر تحديدًا لسؤالك، مواصفات El Torito، القسم 5.3:

Once the system jumps to segment:0, the program can retrieve its boot
information by issuing INT 13, Function 4B, AL=01.  After the boot process
has been initiated the INT 13 Extensions (functions 41-48) will access the
CD using 800 byte sectors and the LBA address provided to INT 13 is an
absolute sector number. This gives any program running in no emulation mode
the ability to locate the boot catalog, and any other information on the
CD, without providing a device driver.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top