Загрузка первого байта первого сектора

Тема в разделе "WASM.OS.DEVEL", создана пользователем Antoniosis, 7 авг 2010.

  1. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    А как относится выделенное жирным к DL?
     
  2. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Если вы не понимаете смысл того, о чем я говорю, то можете думать все, что хотите. Конечно если ядру передавать заранее известное обобщенное имя загрузочного устройства (sda1, multi(0)disk(0)rdisk(0)partition(1) и т.п.) на блюдечке с золотой каемочкой, то ему не нужно самостоятельно определять это имя. Так и получается, что винды и никсы жестко привязываются к тем дискам и разделам, с которых загружаются. А чтобы избавиться от этого ограничения, приходится становиться на костыли в виде RAM-дисков и т.п. Кстати DOS в этом плане была более мобильной системой - с ней могли возникнуть проблемы лишь тогда, когда в config.sys появлялись полные имена файлов драйверов или оболочки. Я начинал с похожего способа загрузки. Сейчас решены и такие проблемы с загрузкой, которые свойственны DOS. А про два уровня абстракций, предоставляемые DOS, вы придумали. Непосредственно DOS действительно позволяет работать с дисками и разделами только на уровне томов. А с цельными устройствами в DOS приходилось работать либо напрямую, либо посредством BIOS. И на будущее. Если хотите, чтобы вас правильно понимали, не нужно говорить сначала одно, а потом совершенно другое ("Ты делаешь различие... Я лично этого не делаю... Даже ДОС древнейший отделяет мух от котлет...").

    Мы можем делать каждый по своему, оставаясь в рамках общего соглашения. Про "смысл" я четко написал. Если тебе не нужна возможность загрузки с неактивного раздела, то ты можешь в коде EPR отвергать dh=5-255 при наличии 88h (сообщать об ошибке), как я отвергаю dh=0-4 при наличии 88h или отсутствие 88h. Иначе наши MBR- и EPR-загрузчики не будут взаимозаменяемыми. Например, мой MBR передаст твоему EPR номер загрузочного раздела 5 (так в данный момент захотел пользователь), а твой EPR это проигнорирует и будет искать активный дополнительный раздел (и не факт, что это будет раздел с номером 5). Получается, пользователь попросил одно, а ты сделал совсем другое и не сообщил ему, что его просьбу данный конкретный EPR выполнить не сможет. Кстати можно сделать EPR, который будет и искать то, что его попросят, и самостоятельно искать то, что нужно, когда его не просят найти что-то конкретное. Я понятно объяснил?
     
  3. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Как объясняете, так и думаю.

    И ты сильно путаешь некие вещи.
    Это про boot.ini? Так это файл конфигурации для BOOT менеджера.
    И кроме указания, с какого раздела грузится, там еще много чего понаписать можно.

    Это ты про fstab? Так он тоже для более других целей.
     
  4. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    выход только один.
    если мбр передает для ebr dh>4, то это запрос на загрузгу этого раздела.
    а если <4, то это говорит о том что ebr должен сам найти активный(как говорилось в предыдущих постах)
    ТАК УСТРОИТ?
    только не пойму почему ты именно один EBR хочешь. не факт что он больше 1 сектора будет иметь для кода?
     
  5. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Я ничего не путаю. Просто в виндах это не просто бутменеджер, а еще и вторичный загрузчик, загружающий не только ядро, но и много вспомогательных модулей и данных для ядра. Кроме того, я не знаю, насколько хорошо ты знаком с внутренним строением виндов. Давай попробуем без симлинков: \REGISTRY\MACHINE\SYSTEM\Setup\SystemPartiton=\Device\HarddiskVolume1. Так понятнее?

    Ну, Ё ))) Я про параметр ядра: root=/dev/sda1.

    Я об этом и говорю.

    Второе предложение не понял. EBR-код самостоятельно справляется со всеми вложенными разделами, обрабатывая их в цикле. Экономия на отказе от циклической обработки будет минимальная, но зато тебе придется клонировать EPR-код в каждом вложенном разделе, что не очень хорошо.
     
  6. abcd008

    abcd008 New Member

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

    поэтому и собираюсь писать один код ebr(одинаковый), но который будет сидеть в каждом доп разделе.
    а еще не факт что все системы используют именно структуру расширенных разделов как в винде.
     
  7. Phantom_84

    Phantom_84 New Member

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

    Расширенные разделы подобного формата уже давно не являются исключительно Windows-специфичными. Хотя конечно существуют и другие виды "расширенных разделов". Те же слайсы во FreeBSD. В MBR-загрузчике их можно различать по полю типа раздела. Обычные расширенные разделы имеют тип 5 или 0Fh (причем даже между ними имеются различия). Слайсы имеют другой тип.
     
  8. abcd008

    abcd008 New Member

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

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Ну мои установщики выполняют побайтовое сравнение установленного MBR-загрузчика с копией, находящейся в установщике. А так Alter использует два байта, хранящиеся непосредственно перед таблицей разделов. См. к примеру пост #11 в этой теме.
     
  10. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    надо усовершенствовать спецификацию.
    1.например добавить сигнатуру("BS" по определенному адресу от 1b0h по 1b7h)-чтоб можно было понять что mbr соответствует спецификации.
    2. ds:si должны передаваться всегда. это написано например в uefi и edd 4.0 спецификации
     
  11. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    да и если ты собераешься поддержать gpt диски, то не мудри. это описано в edd 4.0.
    и прекрасно совмешается с твоей спецификацией, кстати можно также и самим в ax сигнатуру нередавать, а не прописывать в конец загрузчика.
     
  12. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    я тут подумал, а что если keyflags/444<>0,
    а magicnumber/445=0. то при нажатии клавиши зделать загрузку не из раздела, а из конкретного адреса, прописанного в mbr.
     
  13. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    "BS" может оказаться случайно в MBR-загрузчике, который понятия не имеет о Boot Spec. Мой способ - верняк. Единственное, что можно усовершенствовать, так это попробовать сообщать пользователю текущие значения этих параметров даже в том случае, когда знакомый MBR-код не обнаружен на диске (если конечно найденные значения являются допустимыми для текущей версии установщика).

    Ага, там также написано, что es:di должен передаваться первичному загрузчику )))

    Они уже столько намудрили, что моя "мудрость" им особо не поможет ))) Кстати официально спецификация уже появилась? Если да, есть линк, где можно ее бесплатно скачать? Или ты имеешь в виду приложения к драфту d2132?

    А ты разницу не чувствуешь между моим способом передачи сигнатуры и передачей какого-либо значения в каком-либо регистре? Нужно иметь хоть какую-то защиту от случайностей. У меня эта защита есть, потому что по идее обычные MBR-загрузчики и BIOS не должны передавать управление загрузчикам, у которых нет стандартной загрузочной сигнатуры, или менять эту сигнатуру после загрузки в память. Мы к этому способу тоже пришли не сразу, но когда он появился, все стало предельно просто и надежно.

    Это вариант. Но, если ты заметил, лично я эту комбинацию зарезервировал для интерактивного режима (выбор в меню, ручной ввод номера загрузочного раздела пользователем и т.п.). Также возможно, что за счет этой комбинации я смогу расширить возможности Alter'а по передаче дефолтного номера загрузочного дополнительного раздела EPR-загрузчику, если этот номер будет прописываться в MBR. Хотя мне понравился описанный тобой вариант передавать управление EPR-загрузчику (не передавать номер) при дефолтной загрузке в случае, когда нет ни одного активного первичного раздела. Возможно, именно этот способ я реализую в Alter'е, если "научу" его работать с дополнительными разделами.
     
  14. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    edd 4.0 у меня не выкладывается. вот его название - d2132r3-Enhanced_Disk_Drive_-_4_EDD-4/pdf

    а насчет сравнения патчером побайтно, то так ты сможешь патчить только свой собственный загрузчик, так как ты не опознаешь чужой но совместимый. по этому надо иметь сигнатуру не BS так MBRS(GPTS- для GPT дисков). хотя я не встречал таких комбинаций)
     
  15. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Есть d2132r4.

    Я же объяснил. Можно предположить, что упомянутые два байта содержат соответствующие значения вне зависимости от того, какой MBR-загрузчик установлен на диске. Если они проходят проверку на корректность и соответствие текущей разметке диска, то их можно предложить пользователю за основу, а окончательный естественно выбор он сделает сам. Код загрузчика переписывать в любом случае. Ну, может быть, за исключением случая, когда и загрузчик и на диске уже был установлен, и пользователь ничего не изменил в настройках.
     
  16. abcd008

    abcd008 New Member

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

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    У меня ненормальный загрузчик ))) А вообще где, например, у GRUB'а в stage 1 находится сигнатура? Что-то не припоминаю, чтобы там было что-то подобное. А вообще наши споры постепенно переходят в "религиозное" русло. Делай, как хочешь. Это твое личное дело.
     
  18. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Адреса чего? Сектора? Тогда подумай про дефрагментатор.
     
  19. abcd008

    abcd008 New Member

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

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Ню ню.