Yoda писал(а):
Да вот может быть и не совсем естественно. Всё зависит от порядка детектирования ФС в ОС. Windows, например, сначала пытается распознать таблицу разделов, а затем файловую систему. Соотв., для винды это будет HDD-формат. Как поступает линукс, я не знаю, но вполне допускаю, что две разные ОСи будут видеть накопитель по-разному. Теоретически даже допускаю, что вмешательство одной ОСи (изменение каких-то параметров ФС) может обрушить ФС для другой ОСи. Хотя бы даже на уровне флага монтирования/размонтирования системы.
Детект практически всегда и во всех ОС начинается с таблицы разделов (хотя в общем ты прав, например, у меня порядок детекта зависит о порядка запуска драйверов). Видеть будут по-разному. Радует, что хотя бы будут видеть одни и те же файлы. Мне в этом плане помогает, что у меня нулевым номером может обозначаться и цельное устройство и активный раздел на нем (который как раз и используется ядром для поиска загрузочного вирт. устройства). А символические геометрические имена будут отличаться (hda/hda1). В тех ОС, где для определения загрузочного устройства используются подобные имена и возможен произвольный порядок детекта MBR и разделов/VBR и ФС, будут большие проблемы.
Цитата:
Ну это не так уж очевидно. Если делать сначала джамп на код и всё время оставлять мусор в рассчёте на то, что там BPB, то в большинстве случаев там будет именно мусор, хотя могли бы быть доп. функции. Более разумным выходом было бы сохранение "сплава" только в том случае, если он есть и написать для него отдельный упрощённый код. В конце концов, в "сплаве" всегда только один раздел и по определению активный, поэтому парсить таблицу не надо.
Это так, но мне ничего не мешает при помощи кода MBR-загрузчика в режиме super floppy по таблице разделов найти настоящий первичный загрузчик и передать ему управление. Не хочу порождать лишние сущности. Просто отключаю дополнительный функционал Alter'а для гибридного формата и все (у меня это можно сделать в инсталляторе без перекомпиляции самого загрузчика). А остановился я именно на второй версии, потому что это самая последняя стабильная версия и места там было достаточно для BPB+. Кстати при текущем объеме кода в версии 3 места под BPB+ уже не остается. К тому же она еще сильно сырая, чтобы говорить о ней серьезно. Здесь есть другая проблема, связанная с пред. вопросом. Alter всегда передает отличный от нуля номер загрузочного раздела (хотя спецификация допускает передачу нулевого номера в случае загрузки с активного раздела). И т.к. он диктует первичным загрузчикам использовать именно этот номер для передачи ядру, они не смогут воспользоваться обычно вшитым в них (непосредственно в код или в байт перед загрузочной сигнатурой бутсектора) нулевым значением. Т.е. чтобы отказаться от диктата Alter'а (в дистре системы я обычно использую др. загрузчик, но работает он также, как Alter) мне нужно взять какой-нибудь левый загрузчик или написать самый простой свой. Можно и не писать, а патчить в установщике. Есть такой код:
Код:
mov ax,8855h
xchg ax,[7DFEh]
cmp ax,0AA55h
jne short err_bs
Если 88h заменить на 0AAh, то первичные загрузчики перестанут узнавать Alter и соответственно смогут использовать вшитый в них номер загрузочного раздела.
Цитата:
Единственно, на что влияет опция BIOS Setup, это номер загрузочного диска в DL. Ещё у меня есть один глючный BIOS, который патчит номер диска в BPB, не зная про файловую систему FAT32, поэтому на нём не грузится superfloppy FAT32.
Во-во, а еще патчит или наоборот пытается вычитать SPT/Heads из MBR. Короче разработчики BIOS из потенциально самого удобного носителя (флешки) умудрились сделать самый неудобный.