Grub сообщает, что НЕ ПОДДЕРЖИВАЕТ TAG 0x0a

Я делаю отчет OS Grub, который НЕ ПОДДЕРЖИВАЕТ TAG 0x0a, если он настоящий. Тогда я не смогу указать адрес, по которому загружено ядро. Так как мне связать? Или целевой адрес указан в стандарте grub? это мой заголовок

.section .mbt2std
tag_start:
.long 0xE85250D6
.long 0
.long tag_end-tag_start
.long -1*(tag_end-tag_start + 0 +  0xE85250D6)

.vbe:
.short 5
.short 0
.long 20
.long 1024
.long 768
.long 32
.vbe_e:
.long 0
.rl:
.short 10
.short 0
.long 24
.long 0x100000
.long 0xffffffffffffffff
.long 4096
.long 0x100000
.rl_e:

.short 0
.short 0
.long 8
tag_end:



person AlanCui    schedule 24.10.2020    source источник
comment
Я не англоговорящий. Я просто хочу указать адрес, по которому загружается ядро, может быть, я неправильно понял стандарт? (gnu.org/software/grub/manual/multiboot2/multiboot.html )   -  person AlanCui    schedule 24.10.2020
comment
о, спасибо, вы можете отправить ответ сейчас. и я помечу его   -  person AlanCui    schedule 24.10.2020


Ответы (1)


Я не уверен, что все загрузчики, совместимые с GRUB, поддерживают все теги во всех ситуациях. Тег 0a (10) предназначен для перемещения, которое не применяется к вашему статически расположенному коду. Ваш скрипт компоновщика установил VMA на 0x100000, поэтому GRUB2 автоматически загрузит ваше ядро ​​и данные, начиная с 0x100000 (отметка 1 МБ) в память. Лично я никогда не использовал этот тег.

Другие наблюдения:

  • Вы можете использовать .balign 8 для добавления 8-байтового выравнивания, необходимого между тегами, что может упростить поддержание выравнивания. Пример этого можно найти в этом ответе Stackoverflow.
person Michael Petch    schedule 24.10.2020