OSDev

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

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




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

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1195
Модифицированный GRUB 2 (beta) в sys-формате. Адаптационным кодом пока не занимался, но зато интегрировал в ядро поддержку GPT/MBR-разметки, ISO9660, FAT, NTFS, Ext2FS. Есть еще идея интегрировать в ядро модуль "нормального режима" (normal.mod). Пакет разделил на две части:
1) ядро загрузчика и readme.txt;
2) обязательная для нормальной работы загрузчика папка boot с несколькими модулями (минимальный набор; из поддерживающих загрузочные команды модулей присутствует только multiboot; если нужно подгружать модули вашего ядра, добавьте в файл command.lst строку "module: multiboot") и примером конфигурационного файла, а также папка system с примером "пользовательского" ядра.

Ссылки:
1) sys-grubldr-2.0-compact.zip
2) sys-grubldr-2.0-compact-add.zip


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

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 938
Откуда: Дагоба
А почему бета, когда на оф. сайте, вроде бы, релиз лежит?

_________________
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
СообщениеДобавлено: 21 ноя 2012, 01:29 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1195
У меня на официальном сайте "такое" не лежит :lol:

Я приписал это, чтобы подчеркнуть, что версия сырая в плане проработки адаптационного кода. Но все работает в том числе и на NTFS-томах (только не забывайте "прописывать" номер соответствующего раздела внутри kernel.sys, пока первичные загрузчики не предоставляют этого номера). Единственное, что не будет работать, так это загрузка самого kernel.sys, как multiboot-совместимого ядра (multiboot-заголовок я не обнулил, т.к. он в sys-формате для данной версии лежит слишком "далеко"). Прикол в том, что оригинальный grub.pk работает в этом плане нормально, т.к. его формат в целом совпадает с оригинальным core.img, а вот в kernel.sys это уже не прокатывает (как уже сказал, оригинальный заголовок лежит слишком "далеко", причем это может быть только первой, но не единственной причиной неработоспособности). В основе по-прежнему версия 1.98 (см. readme.txt). Бинарники взяты из убунту 10.10. Эта информация может быть полезна тем, кто будет "доукомплектовывать" папку /boot/grub нужным функционалом (прежде всего, в виде соответствующих модулей). Может быть, потом сам выложу все бинарники.


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

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 938
Откуда: Дагоба
В GRUB в версиях вплоть до 1.99 в области переменных выделено два 32-битных поля - одно называется "grub_install_dos_part", другое "grub_install_bsd_part". Которое из них должно заполняться номером раздела и в какой степени? Подозреваю, что dos, т.к. когда речь идёт о BSD-разделах, обычно подразумевают дополнительное разбиение разделов на подразделы, свойственное BSD. Это, похоже, совсем не мультибут. Если dos, то, верятно, должны быть инициализированы все 32 бита? Инсталлятор GRUB для версии 1.96 забивает номер dos_part нулями, а bsd_part оставляет 0xFFFFFFFF. Для версий 1.97-98 оба поля забиты FF. В версии 1.99 оба поля забиты странной величиной 0xFFFFFFFE. Только в версии 2.0 полноценные 4 байта идентификатора мультибут-номера диска, раздела и подраздела. Опять же, нумерация разделов. Надо полагать, в версиях до 1.99 включительно нумерация разделов начинается с нуля?

_________________
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
СообщениеДобавлено: 02 дек 2012, 00:50 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1195
Вообще это не альтернативные поля, а взаимодополняющие, т.е. для BSD-разделов будут задействованы оба поля, а для обычных только dos_part. Думаю, если бы ты ставил GRUB в BSD-раздел, то инсталлятор проинициализировал бы оба поля валидными значениями. Посмотри код MB-точки входа самого GRUB'а. Там учитываются оба уровня, просто байты расширяются в двойные слова. С версиями 1.99 и 2.00 не разбирался, поэтому ничего сказать не могу. Разницы между 1.96 и 1.97/1.98 не замечал, т.к. рабочий вариант модиф. GRUB'а всегда делал на основе версии 1.98. Надеюсь, различия были выявлены при всех прочих равных условиях. Лично я и для версии 1.98 использую значение 0xFFFFFFFF (не 0xFF) после расширения байта в двойное слово, т.к. именно такие значения этих полей указаны в имеющихся у меня оригинальных исходниках (код MB-точки входа GRUB'а вроде бы тоже расширяет байтовое значение 0xFF в 0xFFFFFFFF).

В любом случае у меня нет поддержки BSD-разделов. Меня больше интересует нумерация разделов при GPT-разметке, т.к. я могу лишь предполагать, что там используется нумерация 0-254. Нужно потестить модиф. GRUB на дисках с GPT-разметкой.


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

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 938
Откуда: Дагоба
phantom-84 писал(а):
Вообще это не альтернативные поля, а взаимодополняющие, т.е. для BSD-разделов будут задействованы оба поля, а для обычных только dos_part.

Ну да, это естественно.

phantom-84 писал(а):
С версиями 1.99 и 2.00 не разбирался, поэтому ничего сказать не могу. Разницы между 1.96 и 1.97/1.98 не замечал, т.к. рабочий вариант модиф. GRUB'а всегда делал на основе версии 1.98.

1.99 такая же, как и предыдущие. В 2.00 уже сильные отличия области переменных, там всё поле как в мультибут спецификации.

phantom-84 писал(а):
Меня больше интересует нумерация разделов при GPT-разметке, т.к. я могу лишь предполагать, что там используется нумерация 0-254. Нужно потестить модиф. GRUB на дисках с GPT-разметкой.

То есть, в версиях до 1.99 включительно разделы нумеруются начиная с нуля?
Ещё пока непонятно, а где в этих версиях передаётся номер диска?

_________________
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
СообщениеДобавлено: 03 дек 2012, 09:47 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1195
Yoda писал(а):
То есть, в версиях до 1.99 включительно разделы нумеруются начиная с нуля?
Вообще в Multiboot Spec. разделы нумеруются с нуля. С единицы они стали нумероваться в GRUB 2 только на уровне пользователя для его удобства, чтобы было как в линухе. Но это мелочи, я уже много раз говорил про элементарность преобразования одного в другое. И я полагаю, что твои загрузчики будут нумеровать разделы, начиная с 1, как у меня (ведь ты сам об этом сказал), иначе мне придется в очередной раз вносить изменения в код mksys и опять "отзывать" sys-grubldr. В sys-grubldr заложено именно такое поведение, о чем даже в readme написано. Последний раз я говорил о нумерации GPT-разделов. В имеющейся у меня версии Multiboot Spec. об этом ни слова. Я не проверял загрузку с GPT-разделов в модифицированном GRUB'е. Понадеялся на то, что все будет работать аналогично: на уровне пользователя GRUB'а и в нашем "соглашении" разделы будут нумероваться с 1, а внутри GRUB'а с 0 (в соответствии с Multiboot Spec.). Поэтому нужно потестировать последний модиф. GRUB на предмет нормальной работы с GPT-разделами. Для sys-grubldr сейчас достаточно просто прописать в соответствующей ячейке 1 (см. readme) и убедиться, что загрузка выполняется успешно и причем именно с первого GPT-раздела.

Цитата:
Ещё пока непонятно, а где в этих версиях передаётся номер диска?
Что исходники вообще не смотрим?
Код:
LOCAL(bootit):
   /* print a newline */
   MSG(notification_done)
   popw   %dx   /* this makes sure %dl is our "boot" drive */
   ljmp   $0, $(GRUB_BOOT_MACHINE_KERNEL_ADDR + 0x200)


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

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 938
Откуда: Дагоба
phantom-84 писал(а):
Вообще в Multiboot Spec. разделы нумеруются с нуля. С единицы они стали нумероваться в GRUB 2 только на уровне пользователя для его удобства, чтобы было как в линухе.

Да не, это всё понятно, и про мультибут понятно. Я про внутреннее представление в этой области переменных. Ладно, попробую выяснить экспериментально.

phantom-84 писал(а):
Но это мелочи, я уже много раз говорил про элементарность преобразования одного в другое. И я полагаю, что твои загрузчики будут нумеровать разделы, начиная с 1, как у меня (ведь ты сам об этом сказал)

Да преобразование, конечно, мелочь. И всё в порядке, как договорились, так разделы и нумеруются.

phantom-84 писал(а):
Что исходники вообще не смотрим?

Да смотрим-смотрим :). Только уже глаз замылился, я в другой загрузочный сектор смотрел. ОК, нашёл, всё в порядке, пасиб.

_________________
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
СообщениеДобавлено: 04 дек 2012, 02:06 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1195
Yoda писал(а):
Я про внутреннее представление в этой области переменных. Ладно, попробую выяснить экспериментально.
Я писал о том, как я это определял. Посмотри код MB-точки входа GRUB'а в плане распаковки отдельных байт boot_device в двойные слова. Если не ошибаюсь, в версии 1.98 номера разделов расширяются нулями, а значение 0xFF единицами (я сейчас уже точно не помню, но вроде бы конвертацию "моего" номера раздела я делал так: сначала расширял нулями, а потом делал декремент двойного слова). Может, лучше займешься более новыми версиями, чтобы обмен опытом у нас получился взаимовыгодным.


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

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1195
Вообще может ты и прав насчет версии 1.98. Приведенный ниже код оставляет без изменений соответствующие переменные при значении номера раздела в формате Multiboot Spec. 0xFF. Я видимо ориентировался на исходные значения этих переменных в исходниках, а ты на значения, устанавливаемые инсталлятором, что наверное более правильно, хотя мой вариант тоже работает. Это точно, что инсталлятор записывает в переменные именно 0x000000FF (как я понимаю, речь естественно идет о цельном загрузочном устройстве)?
Код:
multiboot_trampoline:
   /* fill the boot information */
   movl   %edx, %eax
   shrl   $8, %eax
   xorl   %ebx, %ebx
   cmpb   $0xFF, %ah
   je   1f
   movb   %ah, %bl
   movl   %ebx, EXT_C(grub_install_dos_part)
1:
   cmpb   $0xFF, %al
   je   2f
   movb   %al, %bl
   movl   %ebx, EXT_C(grub_install_bsd_part)
2:
   shrl   $24, %edx
        movb    $0xFF, %dh
   /* enter the usual booting */
   call   prot_to_real

Кстати команда mov dh,0FFh какая-то "мутная". Помню, я долго не мог понять, где далее используется это значение dh. В итоге так и не нашел, но на всякий случай вписал такую же команду в мой адаптационный код и прокомментировал: "я не знаю, что это значит" :D Только сейчас в браузере заметил, что она даже оформлена иначе. Видать, какой-то специалист тоже ее вписал на всякий случай :?


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

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


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

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


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

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