OSDev

для всех
Текущее время: 24 окт 2017, 10:32

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 45 ]  На страницу Пред.  1, 2, 3, 4, 5
Автор Сообщение
 Заголовок сообщения: Re: GRUB2
СообщениеДобавлено: 11 дек 2012, 17:33 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1195
В тех бинарниках GRUB'а вроде бы не было поддержки разделов вообще, поэтому эксперименты с ними могут и не дать объективной картины. Я проверил на флоппике текущую сборку модиф. GRUB'а - результат такой же, что и на CD. Значения минус 2 и меньше не проверял, т.к. они не могут быть получены в результате трансляции. Если нужно, могу дать мой текущий core.img (получен из-под убунту 10.10 след. командой: grub-mkimage -O i386-pc -o core.img biosdisk part_gpt part_msdos iso9660 fat ntfscomp ntfs ext2; доп. файлы можешь взять из sys-grubldr-2.0-compact-add.zip).

Я проверил пропатченный GRUB с текущим core.img на флоппике. Действительно 0-7FFFFFFFh вызывает ошибку, а 80000000h-0FFFFFFFFh трактуется нормально. В принципе я давно знал, что GRUB расширяет номер раздела в двойное слово, чтобы трактовать "невалидное" для обозначения номера раздела значение, как минус 1, а сами разделы нумеровать неотрицательными числами. При желании можно было использовать unsigned char и "невалидное" значение 255, но по каким-то причинам этого делать не стали.

По-прежнему непонятно, как у тебя грузится GRUB с первого раздела при любых значениях dos_part.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: GRUB2
СообщениеДобавлено: 11 дек 2012, 22:55 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 938
Откуда: Дагоба
Только что ещё раз проверил бинарный GRUB 1.98 из поставки Debian. Всё так и есть, это поле действительно не влияет на начальную загрузку на флешке с одним разделом Ext2. Проверял и отрицательные значения, и 0, и положительные значения, включая заведомо отсутствующие при любых сдвигах номера разделов, например, 20 или -20. Один хрен - грузится.
Но я могу констатировать, что ничего особенно плохого в этом факте нет. Вероятно, в ГРУБе есть какая-то дополнительная проверка на диапазон валидости в некоторых случаях. Может даже и в Дебиановской сборке.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: GRUB2
СообщениеДобавлено: 11 дек 2012, 23:26 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1195
Думаю, что все-таки лучше разобраться. Предположим, что модиф. GRUB'у передается неправильное значение в "нашем" формате, а он вместо сообщения об ошибке как-то выбирает "системный" раздел и не факт, что правильно. Попробуй сравнить исходный core.img с тем, что получается после инсталляции. Если никаких неизвестных отличий не будет, попробуй передать коду GRUB'а (по адресу 8200h) ноль в ebp и в qword'е по адресу 8200h-12. Может, он перестанет находить "системный" раздел самостоятельно (без корректной подсказки в dos_part).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: GRUB2
СообщениеДобавлено: 12 дек 2012, 00:25 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 938
Откуда: Дагоба
phantom-84 писал(а):
Предположим, что модиф. GRUB'у передается неправильное значение в "нашем" формате

Разборки с ГРУБ2 на дискете показывают, что значение правильное.

phantom-84 писал(а):
а он вместо сообщения об ошибке как-то выбирает "системный" раздел и не факт, что правильно.

Как же он неправильно выбирает раздел, если грузится? Для более корректной проверки надо создать диск с несколькими разделами и желательно на всех иметь установленные ОС. Тогда можно будет сказать "да, при таком-то значении он загрузился с такого-то раздела".

phantom-84 писал(а):
Попробуй сравнить исходный core.img с тем, что получается после инсталляции.

Исходный core.img и есть файл после инсталляции. Я их беру из директории /boot/grub.

phantom-84 писал(а):
Если никаких неизвестных отличий не будет, попробуй передать коду GRUB'а (по адресу 8200h) ноль в ebp и в qword'е по адресу 8200h-12.

Я абсолютно уверен, что он не проверяет того, что записано ниже границы 8200h. Во-первых, там таблица, а не один элемент по фиксированному адресу. Во-вторых, на него нет внешних ссылок. В-третьих, этот кусок - достаточно самостоятельный модуль и должен быть заменяем.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: GRUB2
СообщениеДобавлено: 12 дек 2012, 01:14 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1195
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), находящееся внутри бутсектора. Адрес тоже статичный.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 45 ]  На страницу Пред.  1, 2, 3, 4, 5

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB