Yoda писал(а):
Разборки с ГРУБ2 на дискете показывают, что значение правильное.
Я имел в виду, что если целенаправленно передавать неправильное значение, то и реакция должна быть соответствующей.
Цитата:
Как же он неправильно выбирает раздел, если грузится?
Это может быть случайностью. Я в общем говорю. Без доказательств затруднительно говорить, что это всегда будет работать правильно. Нужно понять, как именно это работает.
Цитата:
Исходный core.img и есть файл после инсталляции. Я их беру из директории /boot/grub.
Под исходным я подразумевал файл после компиляции (точнее компоновки, осуществляемой grub-mkimage). Отличия между этим файлом и тем, что получается в результате инсталляции, позволят наглядно понять, какие изменения вносит инсталлятор GRUB'а. Может, есть что-то еще, о чем мы не знаем.
Цитата:
Я абсолютно уверен, что он не проверяет того, что записано ниже границы 8200h. Во-первых, там таблица, а не один элемент по фиксированному адресу. Во-вторых, на него нет внешних ссылок. В-третьих, этот кусок - достаточно самостоятельный модуль и должен быть заменяем.
По указанному мной адресу всегда хранится начало первого экстента ядра (того, что загружается по адресу 8200h), т.к. элементы описывают последовательное размещение экстентов и расположены в обратном порядке. Я вроде бы тоже не находил внешних ссылок, но может ссылки формируются как-то по-особому, т.к. адрес по сути статичный. Чтобы как-то обрабатывалось значение, сохраненное в регистре ebp, я вроде бы тоже не замечал (в тех исходниках, что у меня на руках, оно вроде бы затирается). Но ведь эту команду вписали в helper явно с какой-то целью:
Код:
/* save the sector number of the second sector in %ebp */
movl (%di), %ebp
Кстати еще может использоваться поле StartSector (в моей статье я его называю kernelstart(64).kernel_sector), находящееся внутри бутсектора. Адрес тоже статичный.