Aleksey Bragin ([info]alex_bragin) wrote,
@ 2007-10-12 01:11:00
Previous Entry  Add to memories!  Tell a Friend  Next Entry
Entry tags:nt, reactos

Наконец-таки удалось загрузить Windows NT
Я уже долгое время разрабатываю форк загрузчика ReactOS - FreeLdr, под названием WinLdr. Началось всё это ещё с  EFI-версии загрузчика, потом она переформировалась в версию, основанную на FreeLdr, т.к. некоторые вещи на EFI оказалось сделать проблематично.

Пришлось много повозится с фрилодером, практически полностью переписать его менеджер памяти, найти кучу багов, но вот несколько минут назад работа все-таки дала результат - была найдена мелкая ошибка, опечатка можно сказать, в типе выделяемой памяти, из-за чего страницы с GDT и IDT оказывались во временной куче. После перемещения их (а точнее, установке типа памяти MemoryData) всё заработало просто на ура - винда больше не вешается через 5 секунд после загрузки в эксплорер.

Аналогичных по возможности загрузчиков я не встречал, так что смею предполагать уникальность этого эксперимента :-)

Дальнейшее развитие - поддержка более новых версий Windows NT.

Все изменения уже залиты в SVN-репозиторий ReactOS'а, в ветку WinLdr.




(22 comments) - (Post a new comment)


[info]shaplov
2007-10-11 09:26 pm UTC (link)
Нифига не понял...
Поясните неродивым линуксоидам, кто кого куда загружает?
;-)

(Reply to this) (Thread)


[info]alex_bragin
2007-10-11 09:40 pm UTC (link)
Объясняю :)
Единственный путь загрузить (именно boot-process) винду - это использовать её родной загрузчик ntldr (его можно chainload'ить из GRUB'а, или откуда-то ещё).
Загрузить ОС на ядре линукса? Без проблем - никто не делает никаких chainload'ов LILO, а делают вполне простой процесс подготовки памяти, загрузки с диска ядра, и передачи ему управления.

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

Можно сказать, что это опенсорс реализация ntldr-совместимого загрузчика (по сути это конечно диаметрально противоположные вещи, а то ещё найдутся любители сказать, что я прореверсил ntldr - сразу отвечу - ничего подобного, они настолько разные, как Wine и Windows :)).

(Reply to this) (Parent)(Thread)


[info]moose_kazan
2007-10-12 03:26 am UTC (link)
Подсознательно чую что вопрос глупый, однако всё-таки задам: а код WInLdr можно как-то модифицировать и закоммитить в GRUB?

Ибо надо же как-то поддерживать эту аббревиатуру:)

(Reply to this) (Parent)(Thread)


[info]tuliss
2007-10-12 06:57 am UTC (link)
Хорошо спросил =) Так как интересует то же самое!

(Reply to this) (Parent)(Thread)


[info]moose_kazan
2007-10-12 07:22 am UTC (link)
Просто на самом деле интересны два варианта развития:

* Коммитить код в GRUB и GRUB продолжает рвать всех.

* Не коммитить код в GRUB а брать его оттуда. Тогда WinLdr начинает рвать всех:)

(Reply to this) (Parent)(Thread)


[info]alex_bragin
2007-10-12 03:07 pm UTC (link)
Ну-у.. форкать GRUB... Это невходит в мои планы точно :)

(Reply to this) (Parent)


[info]alex_bragin
2007-10-12 03:04 pm UTC (link)
Нет, вопрос неглупый, и возникает не только здесь :)

В теории можно конечно, т.к. winldr/freeldr построены исключительно на опенсорсном коде, и даже модульно. Но... Я вообще говоря несмотрел в исходники GRUB, поддерживает ли он какие-то плагины или типа того. Если поддерживает, то можно было бы замечательно так сделать.

В любом случае freeldr.sys можно грузить как multiboot-compliant ядро :), так что к GRUB'у он хоть сейчас подключается.

(Reply to this) (Parent)(Thread)


[info]moose_kazan
2007-10-14 05:45 pm UTC (link)
Ну на самом деле интересно именно одним загрузчиком всё делать:)

С GRUB там немного хитрее. Плагины там есть, но они там только для поддержки различных файловых систем (/boot/grub/*stage*). Т.е. они используются исключительно для того, чтобы прочитать ядро и initrd с какой либо файловой системы.

Тут наклёвывается два варианта:

1. Патчить сам GRUB, добавляя к нему возможность загрузки ядра NT.

2. Поступить очень ушло: написать некую прослойку, которую GRUB будет грузить как обычное никсовое ядро, а эта прослойка будет дальше грузить NT (Наподобие /boot/LOADER в FreeBSD).

Второе ИМХО интерснее:)

(Reply to this) (Parent)(Thread)


[info]moose_kazan
2007-10-14 05:46 pm UTC (link)
Тьфу блин... Прочитал последний абзац про freeldr.sys и понял что вобщем-то туплю:)

(Reply to this) (Parent)


[info]adriannawirav
2008-07-17 03:38 pm UTC (link)
 Может и поддержку коробочных версии надо как то привязать к партнерам.

(Reply to this) (Parent)


[info]n1ckname
2007-10-11 09:37 pm UTC (link)
поздравляю ;)

(Reply to this)


[info]soonts
2007-10-11 10:43 pm UTC (link)
Хорошее дело делаешь. Это я не тока про загрузчик, но и про ReactOS.
Чем я могу помочь?
Загрузчики, драйвера и ядра операционных систем делать не умею. Зато умею делать всё остальное, что работает под win32.

(Reply to this) (Thread)


[info]alex_bragin
2007-10-12 03:06 pm UTC (link)
Под Win32 вполне есть много разных интересных вещей. Вон Дмитрий Чапышев взялся делать appwiz.cpl для реактоса, так он здорово её развил, она уже интересней, чем обычный виндовый апплет "Установить/удалить программы". А подобных программ-апплетов-и т.п. - море.

(Reply to this) (Parent)(Thread)


[info]soonts
2007-10-16 07:56 pm UTC (link)
А не мог бы ты вместо термина "море" написать списочек из 3-5 win32 приложений, которые тебе хотелось бы видеть работающими под ReactOS? Шоб я выбрал из этого списочка наиболее интересный для меня пункт, и сделал. Бесплатно, разумеется.

Естественно, шоб задачи были не сильно сложные - потому шо сделать с нуля какой-нить w3svc (метабаза с ADSI провайдером для неё, WSH+VBScript.dll для ASP, etc..) займёт у меня слишком дофига времени.

Мои личные предпочтения - всё что связано с COM и/или WSH, всё что связано с Active Directory, оконный интерфейс, 3D (DirectX/OpenGL), сетевые сервисы, audio. Анти-предпочтения - всё что связано с .NET или Java, CryptoAPI, и низкоуровневая работа с драйверами и железками (stisvc, ShellHWDetection, dmserver/dmadmin).

(Reply to this) (Parent)(Thread)


[info]alex_bragin
2007-10-16 08:13 pm UTC (link)
консультант-плюс, гарант, 1с, инфобухгалтер? :-)

Если серьёзно, то.. У нас есть прога такая, Downloader! называется. В ней разный софт прописан. Если брать вариант из релиза, то там софта мало прописано, но зато весь ставится и работает, а вот в версии из SVN - там софта больше, но неработает он. Выбирай любой, если какая помощь нужна - заходи на #reactos-ru, я там часто довольно бываю.

(Reply to this) (Parent)


[info]sdfgh153
2007-10-12 02:30 am UTC (link)
Поздравляю (:

(Reply to this)


(Anonymous)
2007-10-13 12:13 pm UTC (link)
Здравствуйте.
Я не разработчик ОС, но мне всегда хотелось спросить: как отлаживаются ядра? Ведь для отладки необходим отладчик, а для отладчика необходимо ядро, а его надо отладить. Получается дилемма "курицы и яйца".
Заранее спасибо.

(Reply to this) (Thread)


[info]alex_bragin
2007-10-13 12:32 pm UTC (link)
Виртуальные машины и эмуляторы решают этот вопрос. Раньше приходилось сидеть с ком-портом, постоянно перезагружаться, смотреть на втором компе что загрузчик+ядро выдают в порт (отладочная информация, в текстовом виде). С появлением в Qemu возможности подключения через GDB сильно упрощает сию задачу, т.к. можно в любой момент приостановить выполнение, и проанализировать состояние виртуального процессора, памяти, регистров, при желании пройти несколько инструкций, поставить точку останова.
А когда в VMWare 6 добавили такую же возможность, то стало вообще замечательно.

Что касается крупных, функциональных отладчиков (дебаггеров), то они пишутся отдельной программой, можно не обязательно под ту же ОС, которая отлаживается.
По аналогии кстати можно сказать как написали первый компилятор - его же тоже надо было чем-то компилировать, т.к. писать в машинных кодах не очень удобно :)

(Reply to this) (Parent)(Thread)


(Anonymous)
2007-10-13 05:03 pm UTC (link)
Интересно. А можно еще про компилятор? ;)

(Reply to this) (Parent)(Thread)


[info]mcdebugger
2009-07-06 10:23 am UTC (link)
да-да! про него) очень интересная тема, особенно, когда изложена доступным языком :)
Thank you, alex_bragin !

(Reply to this) (Parent)


[info]unxed
2007-10-17 02:40 pm UTC (link)
1. Поздравляю!
2. Не подскажешь, как можно твой загрузчик подцепить вместо родного ntldr, чтобы посмотреть, как оно работает? Если без GRUB. Или только через него можно?
3. А багфиксы, сделанные в процессе разработки загрузчика NT, попали в основную ветку загрузчика ReactOS? Или они (багфиксы) к нему прямого отношения не имеют?
4. Какие версии NT поддерживаются в данный момент?

(Reply to this) (Thread)


[info]unxed
2007-10-21 05:45 pm UTC (link)
и еще один вопрос: как обстоят с ntdetect? freeldr берет на себя его функции тоже, или использует родной, виндовский?

(Reply to this) (Parent)


(22 comments) - (Post a new comment)

Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…