Brans Kernel Development: заголовок Grub Multiboot?

Я следую руководству по разработке ядра. В его ассемблерном коде есть следующий блок кода, который он описывает как не столь важный, но как то, что нужно делать с GRUB.

; This part MUST be 4byte aligned, so we solve that issue using 'ALIGN 4'
ALIGN 4
mboot:
    ; Multiboot macros to make a few lines later more readable
    MULTIBOOT_PAGE_ALIGN    equ 1<<0
    MULTIBOOT_MEMORY_INFO   equ 1<<1
    MULTIBOOT_AOUT_KLUDGE   equ 1<<16
    MULTIBOOT_HEADER_MAGIC  equ 0x1BADB002
    MULTIBOOT_HEADER_FLAGS  equ MULTIBOOT_PAGE_ALIGN | MULTIBOOT_MEMORY_INFO |        MULTIBOOT_AOUT_KLUDGE
    MULTIBOOT_CHECKSUM  equ -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
    EXTERN code, bss, end

    ; This is the GRUB Multiboot header. A boot signature
    dd MULTIBOOT_HEADER_MAGIC
    dd MULTIBOOT_HEADER_FLAGS
    dd MULTIBOOT_CHECKSUM

    ; AOUT kludge - must be physical addresses. Make a note of these:
    ; The linker script fills in the data for these ones!
    dd mboot
    dd code
    dd bss
    dd end
    dd start

Я все еще хотел бы знать, что делает этот код? Может кто-нибудь дать мне или указать мне, где я могу найти описание об этом. Во-вторых, почему этот фрагмент кода должен быть выровнен по 4 байтам? Это из соображений эффективности или имеет особое значение в контексте GRUB?


person Ankit    schedule 04.08.2012    source источник


Ответы (1)


Этот фрагмент сборки — не код, а заголовок мультизагрузки. Когда вы связываете свое ядро, этот заголовок будет помещен в начало двоичного файла, чтобы GRUB мог видеть, что ваше ядро ​​совместимо с мультизагрузкой. Этот заголовок содержит магическое число (0x1badb002), список флагов (в вашем случае, что ядро ​​должно быть загружено по адресу, выровненному по странице, и что вы хотите, чтобы GRUB дал вам карту памяти) и контрольная сумма. Если одна из этих записей не соответствует спецификации мультизагрузки, GRUB не загрузит ваше ядро.

Вы можете найти больше информации о мультизагрузке в руководстве по мультизагрузке GRUB:

http://www.gnu.org/software/grub/manual/multiboot/multiboot.html< /а>

Цитата из мануала:

Образ ОС должен содержать дополнительный заголовок, называемый заголовком Multiboot, помимо заголовков формата, используемого образом ОС. Заголовок Multiboot должен полностью содержаться в первых 8192 байтах образа ОС и должен быть выровнен по длинному слову (32-разрядному). Как правило, он должен появиться как можно раньше и может быть встроен в начало текстового сегмента после реального исполняемого заголовка.

Я не уверен, что делает кладж AOUT. Я использую только ELF в своей ОС. Я следовал этому руководству: http://wiki.osdev.org/Bare_Bones.

person Chris Smeele    schedule 05.08.2012