Загрузка Kolibri OS с флешки

Как известно, Kolibri OS — Операционная Система, написанная на ассемблере. KolibriOS ответвилась от MenuetOS, когда MenuetOS начал переход на 64 битную версию.

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. Я пользовался собственными тестовыми средствами, однако, думаю упомянутые утилиты могут пригодиться.

    Другие статьи по OSDev…

Оставьте комментарий