Как сделать диск C загрузочным, чтоб грузился не Windows, а своя OS?

Тема в разделе "WASM.OS.DEVEL", создана пользователем Meatcoins, 9 мар 2008.

  1. Meatcoins

    Meatcoins New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2007
    Сообщения:
    178
    Прочитал вот эту статью http://www.wasm.ru/article.php?article=pipm02
    Очень понравилось!
    Захотелось попробывать...
    Вот тут-то и столкнулся с проблемой - не могу попробывать, т.к. диск C:\ по умолчанию грузится Windows.
    Я так понимаю, что вначале процессор работает в реальном режиме, а потом, когда начинает грузится Windows, то Windows переводит процессор в защищённый режим и дальше в нём работает.
    Потом нашёл ещё одну статью http://www.codenet.ru/progr/os/
    И опять проблема - всё это работает только с дискетки и то только, если использовать образ дискетки. Если просто тупо перекопировать файлы, то ничего не получится!

    Я так понимаю, что на дискетке или на диске C:\ есть какая-то загрузочная область... что-то смутно слышал об MBR (может оно?)...

    Как изменить эту область, чтобы грузился не Windows, а что-то своё!?
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Meatcoins
    MBR - мастер бут рекорд. Первые 512 байт, которые биос загружает и выполняет.
    Как поменять? Записать. Из под винды вроде можно WinHex использовать -)
     
  3. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    MBR по идее должна быть универсальна для любой ОС, а вот что действительно специфично для загрузки ОС, так это бут-сектор раздела диска. В принципе загрузка с жесткого диска отличается от загрузки со съемного носителя только наличием дополнительного этапа в виде выбора загрузочного раздела кодом MBR-загрузчика. В остальном все тоже самое. Можешь поэкспериментировать с моим загрузчиком для флоппика (см. juneos.narod.ru).
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    BIOS грузит MBR главную загрузачную запись. У каждого раздела также есть своя загрузочная запись. По идее MBR должен загружать загрузочную запись раздела и передовать ей управление. В бутсектор раздела лежит загрузчик ОС, в данном случии виндоувский.

    Если у тебя виндоус семейства NT(2k, XP, 2k3 ..). То можно прописать в Boot.ini
    Код (Text):
    1. [boot loader]
    2. timeout=10
    3. default=F:\MyBoot.bin
    4. [operating systems]
    5. F:\MyBoot.bin="К примеру так"
    6. multi(0)disk(2)rdisk(1)partition(1)\MyBoot.bin="Или так"
    Где MyBoot.bin - образ бутсектора 512байт. Можно и просто записать бутсектор на раздел диска любой из утелит? Но тогда пропадет возможность загруски windows.

    Проблема загрузочного сектора является в том что его объем очень мал 512 байтт минус дополнительная информация
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Pavia
    Насколько я помню, несколько секторов после загрузочного не используются (по крайней мере в FAT), поэтому можно писать и дальше, только в основном коде придется подгружать хвост.
    А вообще нормальный подход исповедует nt loader, размещая в бутсекторе код, который грузит FAT, ищет там ntldr и читает его первый сектор в память. А дальше он уже разбирается что ему делать

    Так что если автору очень нетерпится сделать чтото свое, то можно либо прописаться в boot.ini, либо перезаписать тупо ntldr своим кодом =)
    Либо записать свой бутсектор, который найдет нужный файл - достаточно просто затереть имя "ntldr______" (вместо _ пробелы) своим именем в формате 8.3. Или, если очень неймется, скомпилировать свой :) Формат FAT не так уж сложен, чтобы там можно было запутаться.

    Ой чтото понесло меня кудато) Закругляюсь
     
  6. Meatcoins

    Meatcoins New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2007
    Сообщения:
    178
    Я применил гибридный вариант:
    Скачал WinHex. Читает жесткий диск в бинарном виде.
    В самом начале находится $Boot, который и ответственен за загрузку ОС, как я понял.
    Попробывал следующее:
    Взял и изменил Boot.ini так:
    Код (Text):
    1. [boot loader]
    2. timeout=10
    3. default=C:\bootcode.bin
    4. [operating systems]
    5. C:\bootcode.bin="К примеру так"
    6. multi(0)disk(0)rdisk(0)partition(1)\bootcode.bin="Или так"
    bootcode.bin взял с juneos.narod.ru
    Вроде грузится, но на экране вот это:
    Код (Text):
    1. Disk Error! Press ESC to reboot.
    2. _
    Может быть это-из за того, что это загрузчик для флоппика...
    Есть ли загрузчик для жёстких дисков?
    Можно ли bootcode.bin использовать для загрузки с жёстких дисков?

    Надо полагать, что если в WinHex переписать первые 512 байт жесткого диска на bootcode.bin, то эффект будет такой же...
    Кстати вопрос:
    Есть исходник загрузчика. Как его откомпилировать в .bin???
    MASM'ом, TASM'ом или всё равно???
    Какие должны быть параметры командной строки???
    Код (Text):
    1. ml /c bootcode.asm
    2. link bootcode.obj,,NUL,,,
    3. exe2bin bootcode.exe bootcode.com
    4. PAUSE
     
  7. Meatcoins

    Meatcoins New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2007
    Сообщения:
    178
    Мда!
    Если переписать первые 512 байт на диске с помощью WinHex, то эффект такой же!
    Если переписать первые 512 байт на дискетке на bootcode.bin, то всё это работает так:
    Код (Text):
    1. Disk boot failure! Press ESC to reboot.
    2. _
     
  8. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    На самом деле это не проблема, т.к. большинство современных ФС подразумевают возможность дозагрузки бут-блока, о чем упомянул Great. К сожалению, в FAT32 может потребоваться переформатирование (или по крайней мере переразметка с помощью специальных утилит) раздела для сохранения бут-блока размером больше 512 байт. В некоторых ФС для бут-блока сразу отводится достаточный участок, чтобы сильно не беспокоиться о размещении в нем необходимого количества кода.

    Meatcoins, видимо я ввел тебя в заблуждение, но опубликованный загрузчик предназначен исключительно для 1,44-мегабайтного флоппика, о чем четко написано на странице для скачивания. Возможно, я все-таки опубликую загрузчик для FAT32, хотя делать этого не планировал. Для NTFS к сожалению сделать этого не смогу, потому что сам не использую эту ФС для загрузки своей ОС. Здесь более удачным будет вариант, предложенный Pavia.

    Сообщение Disk boot failure! Press ESC to reboot. появляется в случае отсутствия на дискете системных файлов или их неправильного формата. О сообщениях об ошибках написано здесь, а о формате загружаемых загрузчиком файлов здесь.

    В принципе сам бут-сектор (как MBR, так и бут-сектор отдельного раздела) содержит код, загружаемый и запускаемый с жесткого диска, поэтому разместив там свой код ты уже добъешься загрузки с жесткого диска. Если же ты хочешь загружать именно исполняемые файлы, то могу предложить простейший вариант для запуска COM-файла, но опять-таки пока только для флоппика. Для загрузки исполняемого файла формата COM его нужно разместить на дискете под именем june.fs вместе с файлом june.os, который можно получить из такого исходника, написанного под fasm.
    Код (Text):
    1. ; JUNE.OS stub
    2. ; runs JUNE.FS stub as COM file
    3.  
    4. org     8000h
    5. mov     ax, 830h
    6. xor     bx, bx
    7. cli
    8. mov     ss, ax
    9. mov     sp, bx
    10. sti
    11. push    bx
    12. mov     ds, ax
    13. mov     es, ax
    14. jmp     830h:100h
    15.  
    16. rb      8300h-$
    17. xor     ax, ax
    18. mov     ds, ax
    19. mov     word [ds:472h], 1234h
    20. jmp     0FFFFh:0
    21.  
    22. rb      83FEh-$
    23. dw      0AA55h
    Откомпилированный бинарник можешь взять здесь.
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    да, кстати, кому интересно, могу дать исходники бутсектора Win NT4 различных файловых систем. в личку
     
  10. Meatcoins

    Meatcoins New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2007
    Сообщения:
    178
    Great
    Конечно интересно!!!


    Phantom_84
    А как откомпилировать bootcode.asm в bootcode.bin???
    То есть если я напишу какую-то программулю и вставлю её с помощью WinHex в нулевой раздел жёсткого диска (MBR?), то мой код выполнится? Но этот код должен использовать прерывания, как в DOS, если он работает в реальном режиме.
    А почему только для флоппика? Мне просто не очень нравится с флоппика - размер ограничен 1.44M всего...
    Ещё много непонятного конечно для меня в этой теме...
    Код (Text):
    1. jmp     830h:100h
    Это прыжок в память после префикса программного сегмента PSP, на 83-й сегмент? Т.е. на точку входа com-программы? А почему тогда расширение com-программы не com, а fs (june.fs)?



    Для меня бы идеальным вариантом был бы загрузчик для жёстких дисков с исходниками для разных файловых систем!!! (FAT16, FAT32 и NTFS можно, если есть и ext2 и т.д.)
    Как я понял основной целью загрузчика является загрузить в память и передать управление основной программе или операционной системе.
     
  11. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Meatcoins

    Обычно созданием такого загрузчика и кончаются все проекты самодельных ОС.
    Вот только не пойму твою роль : ты типа тестер чужих разработок ?
    Загрузчики есть и исходники есть - ищи получше.
    Например исходники загрузчиков Линукса.
     
  12. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    valterg
    И обычно по двум причинам: а) лень делать что-либо дальше; б) полное отсутствие представления, что же делать дальше (т.е. отсутствие внятного представления о том, из чего ось состоит, как она работает и т.д.). Сам по себе загрузчик, естественно, в этом не виноват :)

    Загрузчиков полно, но перед тем как нырять в чужие исходники, неплохо бы определиться, что ты там хочешь найти. Например, GRUB грузит чуть ли не что угодно и с чего угодно, но в результате он большой, и продраться через его код будет не так-то просто. Ну а какой-нибудь загрузчик, предназначенный исключительно для одного типа файловой системы, будет куда проще, и "въехать" в него намного легче.

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

    Подменить можно как загрузчик в MBR, так и загрузчик в первом секторе любого раздела. Но в первом случае ещё придётся выбирать, с какого раздела грузиться, а во втором -- просто грузиться из него. Лично мне кажется, что второй способ предпочтительнее, тем более что в MBR может быть установлен не штатный загрузчик, а, например, GRUB, который обладает куда большими возможностями, но способен выполнять и "тупую" загрузку первых секторов любых разделов (а не только активного).

    Наконец, если используется Windows, ничто не мешает сделать на диске два (или больше) раздела и попросить загрузчик Windows загружать при необходимости загрузочный сектор другого раздела, а не саму Windows. Достигается это простым добавлением соответствующей строчки в boot.ini.

    Кстати, загрузчик использует прерывания, но только не ДОСа (которого в памяти просто нет), а исключительно BIOSа. Именно с их помощью он осуществляет загрузку нужной программы в память.
     
  13. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Если речь идет о моем исходнике bootcode.asc, то при помощи fasm'а. Если о твоем, причем написанном не для fasm'а, то может потребоваться дополнительная обработка, например, с помощью exe2bin.

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

    Потому что флоппик - устаревший носитель. Мне не жалко поделиться с народом устаревшими технологиями :) К тому же установка загрузчика на жесткий диск выполняется сложнее, а инсталлятор я еще не написал. В добавок я разделил некогда единый загрузчик на две версии - одна использует EDD, другая традиционный сервис - инсталлятор должен детектить наличие EDD и устанавливать либо одну версию, либо другую. А ты что много грузить собрался?

    Насчет моего кода не парься. Я сделал все за тебя. Ты вообще знаком с форматом COM-файлов?

    ??? Потому что мой загрузчик загружает файл именно с таким именем!

    Примерно так.
     
  14. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Правельно, зачем делать через пень колоду. Когда BIOS предостовляет универсальный способ доступа к любому насителу, с которого происходит загрузка. Через Int 13h. Да и не плохо бы еще вернуть управление BIOS'у в случии неудачной попытки загрузки. Тогда биос может попробовать загрузиться с другого источника.
     
  15. Meatcoins

    Meatcoins New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2007
    Сообщения:
    178
    Вообще-то всё началось с того, что я хотел написать что-нибудь, переводящее процессор в защищённый режим. А потом столкнулся с проблемой, заключающейся в том, что я не смогу это запустить!
    Вывод: Нужен загрузчик!
    Хотелось бы с исходниками!
    Хотелось бы для жёсткого диска!
    Не очень сложный с исходниками, чтоб разобраться...
    А "навороченный" можно использовать, чтоб грузить что-то своё...
     
  16. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Pavia, вообще-то существует соглашение, что при состоявшейся, но неудачной загрузке со съемных носителей нужно выполнять перезагрузку (int 19h), а при неудачной загрузке с фиксированных дисков (например, когда отсутствует активный раздел) - попытаться загрузиться со следующего устройства из цепочки, определенной с помощью BIOS Setup (int 18h). Если проблемы возникли уже на этапе загрузки модулей ОС или вторичного загрузчика, то и в этом случае рекомендуется перезапускать процесс загрузки (int 19h).

    Meatcoins, в сети можно найти множество готовых загрузчиков! Было бы что грузить! Более того правильнее всего, когда загружаемые модули никак не связаны с загружающим их загрузчиком, т.е. мне к примеру не нужно как-то видоизменять системные файлы, чтобы их загрузить с другого носителя, нужно всего-лишь использовать подходящий загрузчик. Поэтому для начала проще загружаться с флоппика, если конечно он у тебя есть (у меня например не на всех компьютерах есть флоппик), т.к. это не требует что-то менять на жестком диске, а со временем, когда загружаемая таким образом программа разовъется во что-то серьезное, ее без изменений можно загружать и с жесткого диска с помощью специального загрузчика. Если ты напишешь что-то стоящее, то я обещаю тебе, что легко поделюсь с тобой всеми своими загрузчиками!
     
  17. Meatcoins

    Meatcoins New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2007
    Сообщения:
    178
    Phantom_84 значит буду искать загрузчики...
    Что-то стоящее я буду долго писать... но за такие перспективы спасибо...
     
  18. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Meatcoins
    Ну так возьми исходники ReactOS - про ее загрузчик столько написано, что думаю сможешь разобраться.
    Только насколько я знаю, установить правильно защищенный режим непросто. Хотя если ты
    хочешь небольшую программу запустить, то это не так сложно.
    Ну и любые другие самодельные ОС, но лучше сильные проекты, чтобы побольше инфы было.
    ----------------------------------
    Ну и не стоит забывать про ДОС. Там все-таки будет файл-менеджер и компиляторы нормальные.
    Не надо писать загрузчик, а можно сразу экпериментировать с защищенным режимом.
    Но лучше все это делать в виртуальной машине, чтоб не угробить диск ненароком.
     
  19. Phantom_84

    Phantom_84 New Member

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

    Meatcoins New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2007
    Сообщения:
    178
    Попробую ещё ReactOS...
    Главное разобраться... тема-то интересная...
    Я практически рельный Windows не использую - у меня там минимум всего стоит - всё на WMware в основном!
    WMware - это вообще БЕШЕННАЯ штука!!!