OSDev

для всех
Текущее время: 16 май 2024, 19:45

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




Начать новую тему Ответить на тему  [ Сообщений: 353 ]  На страницу Пред.  1 ... 22, 23, 24, 25, 26, 27, 28 ... 36  След.
Автор Сообщение
 Заголовок сообщения: Re: OS Boot Tools
СообщениеДобавлено: 20 дек 2012, 15:45 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
phantom-84 писал(а):
в расширенном разделе (это мой позиционно независимый миниобраз) мне неоткуда взять номер начального сектора раздела, кроме как получить его от "родного" MBR-загрузчика

Аааа, видишь, всё же нужен интерфейс MBR/VBR с поддержкой номера!

phantom-84 писал(а):
Только я забыл, у тебя используется в MBR-загрузчике идентификация "родного" EBR-загрузчика/просто хоть какого-то кода, отличного от нулей? Или ты не делаешь разницы в MBR-загрузчике между первичным и расширенным разделами?

С точки зрения MBR, EBR не отличается от VBR. А с точки зрения VBR, EBR не отличается от MBR :).
Проверка всегда однонаправленная, т.е. проверяются на валидность значения, полученные от предыдущего загрузчика.

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

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OS Boot Tools
СообщениеДобавлено: 20 дек 2012, 16:58 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Yoda писал(а):
Аааа, видишь, всё же нужен интерфейс MBR/VBR с поддержкой номера!
Я все-таки немного различаю интерфейсы MBR-VBR и MBR-EBR. В VBR мне номер не нужен, т.к. есть HiddenSectors, а в EBR нужен, т.к. вовремя не хватило сообразительности завести подобное поле непосредственно в EBR хотя бы как вариант, тоже использовал EBR только в связке с "родным" MBR-загрузчиком. В первичных загрузчиках я не использую дескриптор раздела, передаваемый через ds:si, а в EBR-загрузчике использую.

Цитата:
С точки зрения MBR, EBR не отличается от VBR. А с точки зрения VBR, EBR не отличается от MBR :).
Проверка всегда однонаправленная, т.е. проверяются на валидность значения, полученные от предыдущего загрузчика.
Понятно. Мне кажется, мы это уже обсуждали, только не помню, с тобой или с кем-то другим. У меня MBR-загрузчики обычно различают расширенные разделы DOS двух основных типов и препятствуют загрузке с них, как с обычных первичных разделов. Конечно за исключением того случая, когда целенаправленно выполняется поиск расширенного раздела для загрузки с него. У меня есть линейка MBR-загрузчиков Jumbo (это мои самые первые собственные MBR-загрузчики). Так вот в них поиск расширенного раздела выполняется специально, когда при обычной загрузке нет активного первичного раздела или когда при альтернативной загрузке указан в качестве загрузочного дополнительный раздел (5-255). Также там используется доп. проверка на валидность EBR-кода (чтобы как минимум не передавать управление на обнуленный EBR-код, который весьма часто встречается; у тебя в этом плане есть оправдание, т.к. обычно расширенный раздел не помечается флагом активности, но мне выполнять доп. проверку по-любому надо, т.к. я использую расширенный раздел в традиционной конфигурации, когда у него этого флага практически никогда не бывает). В третьем Alter'е проверки типа раздела на какое-либо отличное от нуля значение сейчас нет - или места не хватило, или специально убрал, чтобы загружать EBR-код, уже не помню. Спец. проверки на валидность EBR-кода тоже нет. Т.е. он работает по твоим принципам. Может так и оставлю, а может и нет. Точно не могу сказать. Пока это лишь забавный эксперимент.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OS Boot Tools
СообщениеДобавлено: 02 янв 2013, 01:27 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Подскажите про BIOS UEFI. Вот например такая плата
http://ru.asus.com/Motherboards/AMD_AM3 ... OTH_990FX/
Если на ней запустить программу, использующую не UEFI, а прерывания обычного BIOS, то будет работать? Довелась возможность разок запустить свою ОС на такой системе с процом AMD FX8120 - получилась перезагрузка на этапе инициализации ядра (это уже после выбора из меню GRUB). Возможности отладить нет - комп не мой. Может кому-то известны другие "подводные камни" на таких новых материнках?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OS Boot Tools
СообщениеДобавлено: 02 янв 2013, 11:22 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
С Новым годом,

в BIOS бывает переключатель BIOS/EFI. В режиме BIOS, естественно, все должно работать (у меня работает), хотя встречаются и некоторые недоработки, но это связано не с EFI, а с плохой реализацией собственно интерфейса BIOS. Например, у меня AMI Aptio (AMIBIOS8 на основе UEFI) возвращает не вполне корректную информацию о USB-носителях через функцию EDD 48h, однако обычные BIOS тоже далеко не всегда сообщают корректную информацию об оптическом приводе в режиме AHCI. Там, где поддержки обычной BIOS нет вообще, думаю, не стоит даже пытаться использовать сервис BIOS.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OS Boot Tools
СообщениеДобавлено: 02 янв 2013, 14:33 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
Himik писал(а):
Если на ней запустить программу, использующую не UEFI, а прерывания обычного BIOS, то будет работать?

Я загрузку за пределами 2ТБ через функции обычного BIOS как раз отлаживал на материнской плате UEFI. Всё работает. По крайней мере, мне пока не попадались материнские платы, не поддерживающие традиционную (legacy BIOS) загрузку. UEFI BIOS обычно делает так: сканирует установленные носители на предмет наличия UEFI раздела или загрузчика, если такового нет, то грузится в legacy BIOS режиме. Если предусмотрено BIOS Boot Menu (обычно по клавише F8), то, соответственно, спрашивает, в каком именно режиме грузиться с указанного носителя.

Himik писал(а):
Довелась возможность разок запустить свою ОС на такой системе с процом AMD FX8120 - получилась перезагрузка на этапе инициализации ядра

Почти наверняка это не из-за UEFI.

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

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OS Boot Tools
СообщениеДобавлено: 10 янв 2013, 10:15 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
Работаю сейчас над поддержкой разных вторичных загрузчиков. Не удержался, чтобы не высказаться в адрес некоторых из них.

GRUB4DOS.
Вот тут phantom-84 сомневался, куда ему стек приткнуть... В проекте GRUB4DOS неоднократно встречаются такие фрагменты кода:
Код:
   /* we use space near the end of real mode IDT for temp stack */
   movl   $0x400, %esp

Код:
   /* Now we are in real mode */
   xorw   %ax, %ax
...
   movw   %ax, %ss
   movl   $0x400, %esp      /* clear high word of ESP */

Код:
   xorw   %ax, %ax
   movw   %ax, %ss
   movw   $0x0400, %sp   /* tmp use real-mode IDT as stack */

Конечно, зачем стесняться? Разместим стек прямо в таблице векторов прерываний! :twisted:

SYSLINUX.
Дело - швах. Этот кошмар я поддержать не смогу. Точнее, теоретически, может быть это и можно, но только путём глубокого погружения в проект сислинукса.
Сначала думал, раскручу первичную загрузку, откушу. Как же! Этот загрузчик компилируется, как единое целое. В нём первичный загрузчик совершенно неотделим от всего остального кода. То есть, весь проект целиком компилируется с адреса 7C00h и на этот адрес настроен. Первый сектор подгружает второй сектор сразу после себя (при этом по ходу постоянно патча свой собственный код, - вот уж чего я терпеть не могу, так это самомодифицирующийся код). Второй сектор вызывает функции первого сектора, проверяя патчи, используя оттуда переменные и перепатчивая поверх предыдущих патчей, блин. При этом подгружает всё остальное. Кажется, вот тут как раз можно резать... ан нет! Пропатченные и впоследствии перепатченные функции используются в проекте и дальше! Следующая мысль - оставить первые два сектора в покое. Однако, во-первых, на них уже наложены малопредсказуемые патчи. Во-вторых, в этих секторах находятся вшитые в код переменные, которые патчит установщик сислинукса на этапе записи его на диск (отыскивая, например, при этом "мёртвую говядину" и "корми лицо"). Но самое неприятное (в-третьих) - область BPB/BS загрузочного сектора, весьма грязным хаком расширенная с байтов и слов до двойных слов переносится в область данных для последующего использования. В-четвёртых, установщик дописывает в конце файла обширный кусок данных. Это вам не GRUB2, где установщик патчит буквально несколько более-менее понятных параметров и цепочку секторов на диске!
Резюме следующее.
1. Весь проект состоит из постоянно накладывающихся повсюду заплаток на самых разных этапах.
2. Налицо очень сильная привязка загрузчика на этапе его установки.
3. Проект плохо спроектирован и закодирован в плохом стиле.
В-общем, сислинукс я не могу поддержать достаточно простыми средствами, а тратить недели на ковыряние в нём я не готов. Не ожидал я такого от "Peter Anvin и компания". Может быть, вернусь к его раскрутке, но только в отдалённом будущем.

Вообще, меня начинает бесить вот этот "патч"-подход, тотально используемый в линуксе. Хочется чего-то стабильного и целостного. Вот файл. Исполняемый. И он должен быть одним и тем же файлом, который можно просто скопировать, быть уверенным в том, что внутри него ничего не поменялось самым непредсказуемым образом, и что он будет работать одинаково независимо от его расположения. Думал, мои загрузчики как раз помогут в этом, однако я не предполагал, что существуют проекты настолько "изъеденные" изнутри философией "пропатчивания", что их нельзя будет привести в чувство.

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

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OS Boot Tools
СообщениеДобавлено: 10 янв 2013, 12:11 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Yoda писал(а):
GRUB4DOS
Согласен, полное...

Цитата:
SYSLINUX
Вроде патчил статически, т.е. с использованием исключительно "родного" кода всех уровней (помню, там в бутсекторе номер первого сектора ядра нужно было прописывать вместо 0xDEADBEEF :) ). Согласен с тем, что syslinux сильно не дотягивает до "вполне достойной альтернативы Grub'а". Я тебе давно говорил, не трать время на эти загрузчики. Лучше напиши свой вторичный загрузчик, если нужен. Думаю, получится вполне достойный конкурент названным экспонатам при грамотном проектировании и при должной раскрутке.

Кстати глянь еще в сторону формата ядра линукс. Я сейчас как раз занимаюсь реализацией его поддержки во вторичном загрузчике. Возможно даже сделаю свою ядро совместимым с этим форматом, хотя пока НЕ факт. Еще была идея оптимизировать код MB-точки входа (прежде всего, чтобы не таскать образ в базовую память и обратно), но пока решил, что выбранный изначально подход - наиболее правильный - использовать процедуру минимального размера и минимальное количество связей с остальным инициализационным кодом.

Edited.
Я писал(а):
Вроде патчил статически...
Точно, причем исходник для формирования пропатченного образа флоппика есть в этой теме, когда к нашей беседе присоединился Ярило.

Edited.
Yoda писал(а):
(при этом по ходу постоянно патча свой собственный код, - вот уж чего я терпеть не могу, так это самомодифицирующийся код)
Можно взять слепок бутсектора из памяти в момент старта ядра и прикрутить его к образу ядра. Тем более что твой формат ядра покрывает в том числе и адрес 7C00h (это если не уплотнять образ).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OS Boot Tools
СообщениеДобавлено: 10 янв 2013, 16:16 
Аватара пользователя

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

Да скорей всего он как-нибудь заработает. Просто боюсь, что при этом возможны всяческие непредсказуемые глюки.

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

Не, вторичный загрузчик я пока писать не буду. Во-первых, они уже есть. Во-вторых, это гораздо более трудоёмкая работа. В-третьих, в нём пока нет необходимости. Хотя Shikhin и Griwes развели бурную дискуссию по созданию загрузчика под названием Gandalf и даже завели проект в GitHub, я так и не смог понять, чем их не устраивает протокол Мультибут, весь проект сейчас на стадии одной страницы описания, чего бы они хотели видеть (пока даже без конкретики), а критика GRUB2 свелась к ссылке на тему, где товарищ создавал загрузочный компакт-диск и таки сделал его с твоей помощью, используя твой grub.sys и мой iso9660.bin :D. Другими словами, в основе каждого проекта должна быть разумная необходимость, а я пока не вижу её в случае вторичного загрузчика.
Что касается раскрутки, то хотелось бы сначала довести до кондиции и раскрутить уже имеющееся, а не хвататься за новое. За двумя зайцами погонишься...

phantom-84 писал(а):
Кстати глянь еще в сторону формата ядра линукс.

О, нет, туда бесполезно смотреть с моей перспективы. Между первичной загрузкой и линуксом обязательно должна быть вторичная. Причём достаточно сложная, с поддержкой initrd. Ну его в баню. В данном случае вполне достаточно поддержки линукс-специфичных вторичных загрузчиков. Как я уже говорил, у меня сейчас линукс именно так и грузится, и я этому вполне рад.

phantom-84 писал(а):
использовать процедуру минимального размера и минимальное количество связей с остальным инициализационным кодом.

Я всегда говорил, что проекты всегда надо делить на самодостаточные модули с чётко очерченными минимально необходимыми интерфейсами и между модулями не должно быть никаких "левых" неотслеживаемых связей.

Yoda писал(а):
Можно взять слепок бутсектора из памяти в момент старта ядра и прикрутить его к образу ядра. Тем более что твой формат ядра покрывает в том числе и адрес 7C00h (это если не уплотнять образ).

Можно попробовать сделать так: заглушка считывает первый сектор раздела, переносит оттуда BPB/BS в загруженный образ, пропатчивает первый сектор сходным с оригиналом образом и передаёт управление на второй сектор, в точку после считывания остатка файла и подсчёта контрольной суммы, сразу перед хаком с BPB/BS.
Да, так, пожалуй можно. Тогда надо будет ещё разобраться, что за мусор дописывает инсталлятор в конец файла.

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

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OS Boot Tools
СообщениеДобавлено: 10 янв 2013, 17:02 

Зарегистрирован: 18 окт 2012, 21:03
Сообщения: 54
Есть еще вариант не мучатся с телом самого syslinux а загружать его MBR.bin а он пусть грузит само тело. Тут двух зайцев мне кажется можно убить, 1 легче поддержать такую загрузку, 2 более универсально, т.е. можно надеется что такой способ по мере выхода новых версий syslinux останется рабочим, а если грузить напрямую тело возможно что с выходом новых версий что то поменяется в загрузке, в MBR у них гораздо реже что либо меняется, вроде )). Хотя теряется свобода расположения самого syslinux на томе он уже должен будет стоять там где его MBR найдет. А вот если использовать такой же подход к grub4dos то он сам разбирает файловую и находит свое тело у него 8 кило первичный загрузчик, я еще 2 версией загрузчика boot грузил так grub4dos указывая в загрузке boot grub-овский MBR фаил.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OS Boot Tools
СообщениеДобавлено: 10 янв 2013, 18:53 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Yoda писал(а):
Да скорей всего он как-нибудь заработает. Просто боюсь, что при этом возможны всяческие непредсказуемые глюки.
По идее все должно быть нормально. Единственная проблема - это необходимость подстраиваться под каждую конкретную версию или даже сборку. Кстати я не замечал, что инсталлятор что-то дописывает в конец ядра. Т.е. я брал оригинальный бинарник из пакета, пропатчивал его, после чего он работал. Может, довесок каким-либо образом расширяет возможности ядра?

Цитата:
Не, вторичный загрузчик я пока писать не буду.
Ну, понятно. Я просто в очередной раз напомнил, в каком направлении можно развивать эту тему. Они есть, но, сам понимаешь, какие. Везде используется пропатчивание и часто присутствует расширенный функционал, не нужный для обычной загрузки с предопределенного загрузочного диска/раздела. Конечно пропатчивание можно оправдать использованием универсального первичного загрузчика, а расширенный функционал - это все-таки лучше, чем отсутствие какой-либо нужной функции, которая может понадобиться в самый неподходящий момент. Но все-таки в моем представлении вторичный загрузчик должен работать немного по-другому.

Цитата:
Хотя Shikhin и Griwes развели бурную дискуссию по созданию загрузчика под названием Gandalf и даже завели проект в GitHub, я так и не смог понять, чем их не устраивает протокол Мультибут, весь проект сейчас на стадии одной страницы описания, чего бы они хотели видеть (пока даже без конкретики), а критика GRUB2 свелась к ссылке на тему, где товарищ создавал загрузочный компакт-диск и таки сделал его с твоей помощью, используя твой grub.sys и мой iso9660.bin :D.
Мне сразу показалось, что дальше трепа там дело не пойдет. Если я окажусь не прав, можете бросить в меня камень :P

Цитата:
О, нет, туда бесполезно смотреть с моей перспективы. Между первичной загрузкой и линуксом обязательно должна быть вторичная. Причём достаточно сложная, с поддержкой initrd. Ну его в баню. В данном случае вполне достаточно поддержки линукс-специфичных вторичных загрузчиков. Как я уже говорил, у меня сейчас линукс именно так и грузится, и я этому вполне рад.
Да, я что-то не сообразил, что оригинальные ядра линуха, тем более вместе с initrd не поместятся в базовую память, чтобы их можно было загружать твоими первичными загрузчиками.

Цитата:
Я всегда говорил, что проекты всегда надо делить на самодостаточные модули с чётко очерченными минимально необходимыми интерфейсами и между модулями не должно быть никаких "левых" неотслеживаемых связей.
Да, просто меня периодически напрягала неэффективность в работе процедуры запуска ядра через MB-точку входа. Но на самом деле в данном случае это абсолютно несущественно, больше смахивает на параноидальное стремление все оптимизировать.

Цитата:
Можно попробовать сделать так: заглушка считывает первый сектор раздела, переносит оттуда BPB/BS в загруженный образ, пропатчивает первый сектор сходным с оригиналом образом и передаёт управление на второй сектор, в точку после считывания остатка файла и подсчёта контрольной суммы, сразу перед хаком с BPB/BS.
Да, так, пожалуй можно. Тогда надо будет ещё разобраться, что за мусор дописывает инсталлятор в конец файла.
Ну, да, сымитировать загрузку ядра родным первичным загрузчиком и helper'ом, разместив их модифицированные версии по своим местам в памяти. Кстати, я хочу сделать эмуляцию загрузки первичного загрузчика NTFS через доп. точку входа (по смещению 256h), чтобы его можно было тестировать в реальных условиях без записи на жесткий диск. Тоже нужно буде совмещать в памяти данные из бутсектора тома и код тестируемого загрузчика. Подобным образом работает мой mbremu.

jarilo писал(а):
Есть еще вариант не мучатся с телом самого syslinux а загружать его MBR.bin а он пусть грузит само тело. Тут двух зайцев мне кажется можно убить, 1 легче поддержать такую загрузку, 2 более универсально, т.е. можно надеется что такой способ по мере выхода новых версий syslinux останется рабочим, а если грузить напрямую тело возможно что с выходом новых версий что то поменяется в загрузке, в MBR у них гораздо реже что либо меняется, вроде )). Хотя теряется свобода расположения самого syslinux на томе он уже должен будет стоять там где его MBR найдет.
Основная проблема в том, что тогда syslinux все равно придется устанавливать в раздел оригинальным установщиком или пропатчивать прямо на диске. Мы же стремимся к тому, чтобы после установки на диск/в раздел наших загрузчиков все остальное можно было записывать простым копированием файлов.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 353 ]  На страницу Пред.  1 ... 22, 23, 24, 25, 26, 27, 28 ... 36  След.

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


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

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


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

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