Как известно, Kolibri OS — Операционная Система, написанная на ассемблере. KolibriOS ответвилась от MenuetOS, когда MenuetOS начал переход на 64 битную версию.
- Форум KolibriOS: http://board.kolibrios.org
- Wiki KolibriOS: http://wiki.kolibrios.org/wiki/Main_Page
- SVN KolibriOS: svn://kolibrios.org
Kolibri OS — небольшая ОС. Хороший кандидат для изучения некоторых внутренностей платформы x86. Я занимаюсь экспериментами, и мне захотелось посмотреть как Kolibri устроена. Я скачал с svn исходники, полистал форум, мне стало интересно загрузить Kolibri OS на реальном железе.
После некоторого количества поисков, я выяснил следущее. Разработчики Kolibri OS как оказалось реализовали довольно экзотическую систему загрузки, свойственную скорее не классической, а embedded системе. Операционная Система написана на ассемблере. Поэтому размер ядра и приложений пока не большой. Это позволяет поместить стандартную инсталляцию Kolibri на дискету.
Однако в современном мире дискет уже не найдешь. Это уже экзотика. Разработчики Kolibri решили эту проблему замечательным образом: при загрузке с «большого» носителя, например с флешки или жесткого диска, в корневой директорий кладется не только ядро Kolibri, но и файл с виртуальной дискетой, на которую записаны необходимые программы стандартной инсталляции. Специальный загрузчик, грузит в оперативную память данные дискеты, затем грузит ядро и передает на него управление.
Загрузчиков есть несколько вариантов. Kolibri может таким образом грузиться с дисков, на которых установлен Windows. Т.е. в корень диска C: записывается специальный модуль mtldr, изменяется конфигурация стандартного загрузчика Windows и Kolibri становится одним из вариантов загрузки.
Я этот вариант подробно рассматривать не буду. Поскольку проводя первый эксперимент, не хотелось бы подвергать свой компьютер большой опасности. Ошибка где-нибудь в конфигурации загрузчика, боюсь мне может дорого обойтись. Поэтому, я пробую настроить загрузку с флешки.
Я сам писал загрузчик с флешки c FAT32. Для начала я попробовал его. Загрузчик загрузил ядро Kolibri, оно вывело загрузочное меню на этом все остановилось. Чтобы загрузка продолжилась в память нужно загрузить еще image дискеты.
Поиск по форуму и svn дал следующее. В svn, здесь
svn://kolibrios.org/programs/hd_load/usb_boot есть всё необходимое для загрузки с флешки.
У меня на флешке уже записан загрузочный MBR взятый из статьи MBR загрузчик в режиме LBA. Поэтому MBR я трогать не стал. Остальное взял из svn:
- BOOT_F32.ASM скопилировал с помощью fasm, получил 512 байтный файл, записал его на флешку предварительно замержив содержимое BPB (BIOS Parameter Block см. статью Чтение FAT32 под Windows, в ней описана структура FAT32 и загрузочного сектора ).
- mtldr.asm скомпилировал с помощью fasm, получил файл, который переименовал в MTLD_F32 и скопировал файл в корневой директорий флешки. Этот файл содержит в себе вторичный загрузчик, выполняющий всю работу. Первичный загрузчик грузит не ядро непосредственно, а этот файл и передает на него управление.
- Скачал с http://builds.kolibrios.org/rus/ (Хранилище ежедневных сборок) последнюю сборку latest-img.7z, распаковал и полученный файл скопировал на флешку в корневой директорий с именем KOLIBRI.IMG
- Собрал в ядро из исходников с помощью build.bat. На вопросы ответил, сказал, что собираю только ядро и язык eng. Скопировал ядро из директория /bin в корневой директорий флешки.
В итоге на флешке получились такие файлы:
С флешки загрузился на своем ноутбуке и получил замечательный экран, скриншот сверху. Скриншот, конечно уже не с реальной машины, а с виртуальной. Но на реальной все выглядело примерно также.
Чтобы загрузиться с виртуальной машины, просто подключил KERNEL.IMG как виртуальный флоппик к VMWare Player и протестировался.
Кроме перечисленных файлов, в указанном директории svn://kolibrios.org/programs/hd_load/usb_boot лежит еще readme и исходники утилит для записи boot сектора и mbr. Я пользовался собственными тестовыми средствами, однако, думаю упомянутые утилиты могут пригодиться.