Yoda писал(а):
Вообще, планов громадьё. Я как раз закончил большой этап работы и одной из следующих первоочередных задачь планировал поставить именно загрузку груба, т.к., на мой взгляд, в этом есть прямая практическая потребность, выходящая за рамки разработки каких-то ОС. А то меня уже достали эти глюки груба, который "не смог" установиться.
Можно еще со вторым GRUB'ом поработать. Нужно подобрать наиболее оптимальный состав вкомпилированных в ядро модулей (хочу сделать канонический бинарник) и т.п. Про то, как патчить GRUB 2, я кажись тебе говорил на буржуйском форуме.
Цитата:
Да и опыт jarilo свидетельствует о потребности в этом. Кстати, ты что-нибудь выяснил по своим тестам, что за проблемы у него с БИОСом?
Ну, меня прежде всего интересовало, как работает FlashBoot. jarilo ничего не сказал об установленных опциях в BIOS Setup, а образ флешки был сильно "искалечен" FlashBoot'ом (гибридный формат, в MBR и VBR стоят загрузчики FlashBoot'а, в MBR в структуре BPB+ поле DriveNumber=80h), т.е. вполне возможно, что на данной флешке FlashBoot противостоял сам себе (боролся с негативными результатами, порожденными собственной установкой). "Чистого образца" и скриншотов не было.
Цитата:
Не понял. Как ты создавал grub.pk? Ты что, уже кросс-компилируешь линуксовые пакеты в свою систему? Или сконвертировал имеющийся бинарник груба? Если второе, то зачем нужна стадия PK для получения загрузочного груба в формате kernel.sys? Кстати, его не обязательно так называть, имя может быть любым в соглашении 8+3. Я бы лучше назвал назвал его grub.sys

.
Скомпилировать не проблема. Но я хочу исключить ситуацию, при которой могли бы возникнуть дополнительные проблемы, вызванные самостоятельной компиляцией GRUB'а. В основном беру готовые бинарники с гнусного хранилища, а иногда из дистрибутивов линуха. Промежуточный формат PK использовал по нескольким причинам. Во-первых, как уже сказал, мне не нужно было писать модифицированный GRUB специально под твой формат, хотя это всего несколько строчек кода. Во-вторых, файлы в формате PK очень похожи по структуре на оригинальный stage2 - имеют одинаковый адрес загрузки и запуска 8000h. Файлы grub.pk и stage2 отличаются только первыми 512 байтами - оригинальный helper GRUB'а заменен моим "адаптационным кодом". В-третьих, у меня уже был готовый grub.pk (по сути пропатченный stage2). Я могу делать бинарники модифицированного GRUB'а в трех вариациях (OS+FS stub, OS+FS и собственно PK):
Код:
; We can produce four different binary files from this source file.
; You should reset MAKEOSIMAGE (A) and MAKEWHOLEIMAGE (B) switchers
; for that by the following way:
; A B - Result
; 1 1 - whole OS image (requires any FS stub with non-zero size)
; 1 0 - OS image with 1st part (requires FS image with 2nd part)
; 0 1 - PK image (requires nothing anymore except special 1st stage)
; 0 0 - FS image with 2nd part (requires OS image with 1st part)
MAKEOSIMAGE equ 1
MAKEWHOLEIMAGE equ 1
CONFIG equ "/menu.lst"
STAGE2 equ "../grub/stage2"
include "grub.inc"
Оставалось только адаптировать pk-файл под твой формат, для чего у меня тоже есть соответствующие исходники (mksys). В-четвертых, не хочу дублировать код адаптации GRUB'а в нескольких исходниках. Возможно, еще буду его изменять/дополнять. Если тебя не устраивает генерация sys-файла из pk-файла, то можешь сделать это напрямую. Я в курсе, что можно переименовать файл

Думал о переименовании kernel.sys в grub.sys, но не стал это делать, чтобы у пользователей не возникало лишних проблем. Вообще можно и переименовать.
Цитата:
Это я говорил применительно к своему ядру, что оно универсально и может грузиться как моим первичным загрузчиком, так и грубом в соответствии со спецификацией Multiboot. А грубу-то зачем мультибут приделывать? Он ведь грузится в реальном режиме, ему не нужен такой сервис.
У GRUB'а есть такая фишка, как наличие Multiboot-заголовка в самом GRUB'е. Скорее всего это есть не во всех версиях, но там, где есть, лучше переопределить Multiboot-заголовок GRUB'а собственным, иначе будет возможна ситуация запуска kernel.sys с невалидным (оригинальным) заголовком каким-нибудь Multiboot-совместимым загрузчиком. А вообще я стремлюсь делать все вторичные загрузчики по формату единообразными и совместимыми с ядром. У ядра есть MB-точка входа, пусть и у загрузчиков будет.
Цитата:
Я когда столкнулся с глюком некорректного патченья полей БИОСом, решил просто с этим расслабиться по следующим причинам.
1. Это явная ошибка БИОСа и все более-менее свежие БИОСы работают корректно. О повальном характере говорить не приходится.
2. Она легко обходится разбиением флешки в HDD-формат.
3. В загрузчиках катастрофически не хватает места, даже несмотря на то, что они предельно оптимизированы. Очень жаба душит разбрасываться драгоценными байтами на решение проблем подобного плана.
1. Я находил эту ошибку в BIOS'ах, о которых нельзя сказать, что они слишком древние.
2. Да, я говорил, что использую только разметку с MBR, но когда стал экспериментировать с гибридной разметкой, решил потестить различные компы и на возникновение этого глюка с разметкой Super Floppy (обнулил таблицу разделов).
3. Ну, у меня загрузчик под FAT32 имеет размер 1 кб

Там достаточно извратов типа поддержки вариативного размещения второго сектора на диске в зависимости от значения поля FSInfo (addsec = (FSInfo==1) ? 2 : 1). Одним извратом меньше, одним больше...