Partition table как правильно написать CHS ?

Тема в разделе "WASM.OS.DEVEL", создана пользователем abcd008, 8 янв 2011.

  1. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Я про MBR. В основной таблице разделов в принципе могут присутствовать 4 расширенных раздела. У меня менеджер томов использует последовательную нумерацию всех дополнительных разделов, т.е. номер первого вложенного раздела внутри второго расширенного раздела будет на 1 больше номера последнего вложенного раздела внутри первого расширенного раздела, но из дополнительного параметра можно получить и номер вложенного раздела относительно начала расширенного раздела (со сдвигом на 4), в котором он находится. Например, раздел 16(5) - первый вложеный раздел внутри расширенного раздела, который явно не является первым расширенным разделом на диске - иначе бы было 5(5). Мне это нужно для того, чтобы загружаться с дополнительного раздела, который находится внутри не первого расширенного раздела. Нужно просто поменять местами в таблице разделов дескрипторы первого расширенного раздела и расширенного раздела, в котором находится загрузочный раздел, и использовать "относительный" номер. EPR-код обрабатывает только вложенные в данный расширенный раздел разделы и нумерует их, начиная с 5.
     
  2. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    я как в линукс думаю надо. у них в mbr разделы с 1-4. а остальные по порядку как идут.
     
  3. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    а узнать откуда грузился тоже просто. почитай multiboot спецификацию. там много интересного.
     
  4. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    У меня как в линуксе. Только есть вопрос, линукс поддерживает работу более чем с одним расширенным разделом на диске? Что такого интересного в Multiboot Spec.?
     
  5. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    я читал что линукс не только несколько расширенных поддерживает.
    ни и может грузиться с каждого.
    а в multiboot описан сценарий для загрузки системы. и какие параметры загрузчик должен передать.
    она сделана для стандартизации загрузки ОС. причем образ ядра может быть в любом формате.
    почитай.
     
  6. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    блин не получается файл прикрепить.
    дай мыло скину.
     
  7. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Суть Multiboot Spec. я хорошо знаю. И про поддержку GRUB'ом формата ELF тоже знаю. Я уже говорил, что технология загрузки, которую я использую, позволяет загружаться даже с вложенных в расширенный раздел разделов без использования вторичных загрузчиков (если загружаемая сущность не настолько примитивна, что требует своей загрузки только с первичного раздела).

    Мыло: phantom-84@mail.ru
     
  8. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Вот цитата из Multiboot Spec.
     
  9. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Здесь имеются в виду вложенные в расширенный раздел разделы (которые нумеруются, начиная с 4, - у меня с 5). Но ничего не говорится про действительно разные расширенные разделы на одном диске. Возможно, предполагается, что на диске должен быть только один расширенный раздел.
     
  10. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    я же говорю. везде используется только один расширенный раздел, для всех вторичных дисков.
    но есть статьи на форумах linux что он способен работать даже если их несколько. и даже если он будет первый в PT.на что винда просто виснет.
     
  11. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    Phantom_84
    наконец-то я отладил свой mbr.
    во всех исходниках которые я разбирал были ошибки. пипец а ими еще пользуются)
    задолбался код оптимизировать чтоб влез в 430 байт.
    и при этом он умеет работать и через lba и через chs. при работе с chs проверяет на превышение chs с данными от функции 8 int 13h. ждет нажатия клавиши и выводит все ошибки.
    PT проверяет на наличие только одного активного раздела.
    еслибы не текст то можно выло бы еще кучу функций воткнуть.
     
  12. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Я просто проверяю, чтобы сгенерированные трехмерные координаты укладывались в лимит BIOS по количеству цилиндров. Другие некорректные значения координаты C(ylinder) спокойно отвергаются устаревшими функциями чтения/записи. Т.е. я координаты "конца диска" не перевожу в линейный предел для проверки попадания в него.

    Для меня это давно пройденный этап. Сейчас активным считается "первый активный раздел". Вообще это конечно вопрос выбранного подхода. Я считаю, что несущественная ошибка не должна сказываться на возможности загрузиться с диска.

    У меня в alter'е осталось свободное место, которое используется кодом, работающим с расширенным разделом в другом моем MBR-загрузчике. Сейчас я это пространство использую для размещения копирайта ))), а также для небольших расширений в тестовых сборках alter'а. В том варианте, который я выкладывал на форуме, этот участок просто обнулен.

    Ну теперь можешь тестировать на реальных компьютерах. Я вчера тут (рядом) выложил эмулятор, предназначенный как раз для этих целей.
     
  13. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    я всегда тестирую на реальном компе. я просто не умею создавать образы для эмулятора. а если создаю то не знаю как файл впихнуть. но на реальном железе надежнее)

    проверку лимита тоже делаю только по цилиндрам.

    мой код вместе с текстом занимает 1afh байт (только код 12ah байт) так что места больше нет. если только записать код на место Disk Signature.

    по поводу нескольких активных разделов я согласен. но я пошел по стандартному пути. только один и сделал код совместимым с 8086(по этому он и больше обычного, команд меньше знает).

    я тоже думал раньше сделать бит (80h) активного раздела, а не тупо 80 и все. тогда можно было бы делать 80h,81h,82h и тд. и написать программу которая позволяет выбирать раздел. или тупо как ты сказал первый активный(в моем случае только 80).
    но остальные mbr ы могут на этом вылететь. поэтому надо следовать стандартам. хотя mbr от висты позволяет иметь значения 0 и 80h-0ffh.
     
  14. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    да а альтернативную загрузку я повешу на загрузчик системы или BR.
    там ты точно уверен в свободном месте. а в случае mbr его могут и подтереть, особенно если нет выравнивания разделов(я например против выравнивания. я за экономию места).
     
  15. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Ты не понял. Я сделал эмулятор как раз для тестирования на реальном компе, причем не только своем. На своих-то можно сколько угодно экспериментировать. У меня дома только для тестирования два компа стоят.

    Видимо, опять не понял. Я говорил про разделы, а не диски! Alter может выполнять загрузку с любого диска (не только 80h). Более того он поддерживает технологию загрузки с одного из двух разделов, находящихся на разных дисках!!! (При необходимости могу описать.) Активным разделом считается тот, дескриптор которого находится в PT первым среди тех, которые содержат в соответствующем поле установленный старший бит. Для определения признака активности я использую только старший бит этого поля, т.е. содержимое других бит меня вообще не интересует. Номер загрузочного диска всегда берется из регистра DL.

    Так я тоже не использую свободные секторы на диске для хранения расширений (я об этом когда-то говорил просто как о возможности). Альтернативный выбор делает непосредственно MBR-загрузчик. EPR-загрузчик только помогает выполнить загрузку BR одного из вложенных в расширенный раздел разделов, номер которого передан MBR-загрузчиком. Это позволяет вообще не использовать вторичный загрузчик. Если я использую вторичный загрузчик, я его встраиваю в цепочку между первичным загрузчиком и ядром (если взять загрузку только по восходящей). Т.е. альтернативный выбор в MBR мне помогает свободно управлять в том числе и загрузкой вторичного загрузчика, когда он используется. Спецификация вообще официально называется "Спецификация загрузки вторичного загрузчика".
     
  16. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    -Видимо, опять не понял. Я говорил про разделы, а не диски! Alter может выполнять загрузку с любого диска (не -только 80h). Более того он поддерживает технологию загрузки с одного из двух разделов, находящихся на разных -дисках!!! (При необходимости могу описать.) Активным разделом считается тот, дескриптор которого находится в PT -первым среди тех, которые содержат в соответствующем поле установленный старший бит. Для определения -признака активности я использую только старший бит этого поля, т.е. содержимое других бит меня вообще не -интересует. Номер загрузочного диска всегда берется из регистра DL.
    я про это все понял. я про то что если потом вместо твоего mbr записать другой, то он выведет ошибку при наличии иных значений кроме 0 и 80. а некоторые и при наличии активных разделов больше двух.

    надо писать как у всех. чтоб работало везде одинаково. а насчет альтернативной загрузки как у тебя я давно так делал. он грузит раздел из переменной а не PT. в этом и плюс ты не портишь pt вторым активным разделом.
    но есть и неудобство раздел надо прописывать при компиляции или вручную на диск.


    проехали. помоги разобраться вот с чем.
    я пишу BR. можно написать разные для СД ФЛЕХИ И ДИСКА.
    но я пишу универсальный. (не спрашивай зачем) я разобрался со всем. но есть одно но. если грузиться с Флехи то одни биосы ее делают дискетой другие Диском.

    отсюда вопрос. если на диске есть mbr а биос его сделал дискетой. то я уже не могу понять по dl его тип.
    вот и надо чтоб BR понимал как-то что он не в первом секторе(а в разделе диска ds:si).
    можно сделать проверку себя с содержимым 1 сектора. но я раньше знал способ проще но забыл. может есть идеи?
     
  17. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    кажись придумал. надо проверить в bpb тип носителя. если дискета то BR в первом секторе.
    если диск то берем значения из ds:si (или сами читаем из pt) и работаем с диском.
    я просто не доверяю на 100% bpb, а то можно было бы использовать поля начала раздела.
     
  18. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    А если диск не разбит на разделы? ))) На самом деле в FAT и NTFS есть такое замечательное поле, как Hidden sectors. Оно может содержать не вполне корректные значения только в разделах, находящихся внутри расширенного раздела типа 5. Во всех остальных случаях это поле содержит номер начального сектора тома относительно начала диска.
     
  19. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    если не содержит разделы то BR не запустится и не будет вопроса)

    поле есть но я видел и не реальные значения. а чаще левые значения пишут в параметрах chs диска.
    они совсем не соответствуют функции 8 int 13h