SL - Secondary Loader

Kernel boot-loaders discussion
  • Кстати, о blue screen. Иногда при сохранении режимов в синем экране при следующей загрузке вместо видеорежима отображаются какие-то крякозяблы и что-то вроде 65536. Если при этом ничего не менять, то ОС дальше не грузится. (Работаю преимущественно в QEMU).
  • Кто кроме меня хочет дорабатывать вторичный загрузчик для КООС ?
    Attachments
    Вторичный загрузчик
    SL.png (11.39 KiB)
    Вторичный загрузчик Viewed 14007 times
  • А под какой лицензией ?
  • Думаю под BSD - http://ru.wikipedia.org/wiki/Лицензия_BSD, но возможно и под GPL. Меня интересует сколько человек реально готовы продолжить работу над кодом.
  • Выкладываю образ 1.44 дискеты с вторичным загрузчиком для ознакомительных целей.
    Образ можно запускать под эмулятором, я использую QEMU. В образе SL собран с выводом отладочной информации. Существует рабочая документация.
    Пока SL не может создать динамически образ рам диска с файловой системой FAT12 за 1-м МБ ОЗУ.
    Attachments
    kord.7z (84.02 KiB)
    SL- вторичный загрузчик
    Downloaded 531 times
  • как я понимаю желающих нет ....
  • Ну выложи его на svn. Или жалко ?
  • <Lrz>
    1) не горячись - может со временем и найдутся желающие. просто сейчас не у всех есть свободное врямя...
    2) почему BSD, а не GPL? (я ничего не имею против BSD, просто интересно)
  • Выложу вечером на svn код SL - код вторичного загрузчика. Под лицнзией BSD. Код модуля blue screen под GPL лицензией т.к. он базируется на коде ядра Kolibri OS - модуле blue screen.
  • Веселые вы парни, однако :)
    Ну маркетинговой-то работой пренебрегать не надо же до такой степени.
    Скажем, тупым я себя не считаю
    Но вот случилась такая беда, что не знаю что такое GRUB, вторичный загрузчик и какая великая народно-хозяйственная польза от это может приключиться.
    В смысле, догадываюсь о чем-то, конечно же (кстати, накаких персоналий, про APM например - тоже самое)

    А может знал бы, так все бросил бы, и еще 5 помошников с собой привел :D
    Это шутка конечно же...
    Но в каждой шутке ведь, есть доля и... шутки :)
  • Galkov wrote:Но вот случилась такая беда, что не знаю что такое GRUB, вторичный загрузчик и какая великая народно-хозяйственная польза от это может приключиться.
    Колибри ОС, имеет достаточно много вариантов загрузки, но большинство этих вариантов основано на концепции загрузки образа рам диска в ОЗУ. Эта концепция загрузки заключается, в том, что первичный загрузчик находит файл kernel.mnt, (который может быть расположен или на носителе, или в составе образа) загружает его в память и передает ему управление, устанавливая некоторые флаги, в зависимости от того, с какого носителя произошел старт. Дальнейшие действия kernel.mnt заключаются в том, что бы считать образ файла в ОЗУ в реальном режиме и переместить образ за пределы 1 Мб (ограничение на адресацию в реальном режиме) 0х87 функцией 0х15 прерывания BIOS. При загрузке с дискеты происходит считывание данных по трекам. В результате этого достигается наибольшая скорость загрузки, чем, если бы производили чтение по секторам. Таким образом, происходит создание образа рам диска в памяти ОЗУ. В случае старта с HDD используется несколько вариантов загрузки, но они объединены общим подходом. Первичный загрузчик самостоятельно перекидывает за 1 Мб образ рам диска, и выставляет флаги, которые сигнализируют, что образ виртуального диска уже создан.
    Самым неудобным моментом является то, что каждый раз нужно иметь специально написанный первичный загрузчик, и к нему нужно иметь образ, который будет загружен за 1-ый Мб. В данном случае - это является недоработкой, поскольку невозможно создать динамически формируемый рам диск произвольного размера, как следствие не возможно простыми средствами изменять файлы, и конфигурацию ОС Колибри.
    Для Колибри ОС наличие рам диска является задачей, которая определяет концепцию ОС. Поскольку ядро, драйверы и некоторые небольшие программы хранятся на этом диске. И даже когда невозможно произвести чтение с носителей, можно использовать набор программного обеспечения, которое размещено на этом диске. Сейчас рам диск имеет фиксированный размер. Именно невозможность динамически менять размеры, и его содержимое, подручными средствами, не привлекая для этой работы другие ОС или программы, является задачей, которую необходимо решить. Имея рам диск, который можно динамически создавать из файлов находящихся на носителе позволит иметь несколько вариантов загрузки ОС с различными свойствами, которые могут быть настроены как динамически, так и заранее. Это даст возможность гибко конфигурировать систему, в зависимости от потребностей пользователя или программиста.

    Основной поставленной задачей является разработка универсального кода вторичного загрузчика, который должен производить загрузку ОС Колибри с любого носителя. В качестве взаимодействия была выбрана схема с первичным и вторичным загрузчиком. К плюсам этой схемы можно отнести:
    универсальность для платформы x86, как и для других платформ;
    модульную схему работы;
    открытый интерфейс взаимодействия, причем в качестве первичного загрузчика может выступать любой модуль, поддерживающий интерфейс взаимодействия и callback функции.
    Код вторичного загрузчика должен предоставлять возможность расширить свои базовые возможности, используя принцип загрузки модулей. Разработка должна проходить под эмулятором, но практическая проверка должна быть осуществлена на реальной системе. В качестве эмулятора предполагается использовать QEMU или VMware player, эти продукты имеют бесплатное распространение, и позволяют эмулировать среду персонального компьютера.

    Концепция и функциональность
    Составим основные требования для написания кода вторичного загрузчика:
    устранение недостатков существующих подходов к решению этой проблемы;
    обеспечение стандартности модулей;
    расширение возможностей;
    масштабируемость.
    Концепция и предполагаемая функциональность:
    Необходимо создать универсальный вторичный загрузчик для загрузки операционной системы Колибри с различных носителей, имея стандартный интерфейс с первичным загрузчиком, то есть, при изменении носителя достаточно было бы изменить или сделать код первичного загрузчика, отвечающий интерфейсу взаимодействия с первичным загрузчиком.
    Осуществить поддержку динамического формирования рам диска с возможностью выбора файловой системы.
    Обрабатывать файл сценария, и в зависимости от его содержимого осуществлять различные действия.
    Сделать поддержку модульности вторичного загрузчика, (что бы функциональность можно было расширить с помощью модулей, которые бы имели один интерфейс взаимодействия с вторичным загрузчиком).
    Областью применения для данного загрузчика является загрузка операционных систем, как и любой другой ОС на платформе х86, если написан для ее загрузки специальный модуль. Основная задача загрузчика - это загрузка ОС, и настройка ее окружения. Под этим понимается загрузка драйверов, утилит и конфигурирование в зависимости от порядка указанном файле с расширением *.ini.
    При написании кода вторичного загрузчика, должны быть использованы эффективные методы, соблюдена концепция эффективного подхода к разработке продукта, сочетающая эффективность логического подхода и реализацию кода на аппаратном уровне. Планируется использовать принцип разделения, вся задача выстраивается в общий легко понимаемый алгоритм, который состоит из основных блоков. Каждый блок может состоять из под блоков в зависимости от специфики реализации внутренней логической работы, в свою очередь, и те под блоки могут быть разбиты до составляющих, которые просто решаемы с применением команд х86 процессора.
    Планируемые системные требования к оборудованию:
    процессор класса i586 или выше;
    поддержка 0x87 функции 0x15 прерывания (перемещение блока размером до 64 кб за 1 Мб);
    поддержка 0х88 функции 0х15 прерывания;
    поддержка 0х3 функции 0х10 прерывания;
    поддержка 0х0 функции 0х16 прерывания;
    первичный загрузчик с поддержкой callback сервиса.

    Планируемые спецификации на модули вторичного загрузчика:
    размер вторичного загрузчика не превышает 64 Кб;
    размер startos.ini файла конфигурации не превышает 64 Кб;
    размер создаваемого рам диска не превышает 16 Мб.

    на рисунке 5.1. Логика работы его заключается в следующем:
    Вторичный загрузчик получает управление от первичного загрузчика, с поддержкой callback сервиса. Далее происходит загрузка файла сценария дальнейшей загрузки startos.ini, если его нет переход на настройки определенные по умолчанию (default). Происходит обработка ini файла, если ошибка при обработке ini файла серьезная, то происходит переход на предопределенные настройки по умолчанию (default), для пользователя отображается сообщение о характере ошибки. Согласно сценарию происходит настройка среды для ОС, а затем передача управления ядру загруженной ОС.

    Описание первичного загрузчика
    Первичный загрузчик представляет собой программный модуль, задача которого произвести считывание с физического устройства код вторичного загрузчика в память, передать управление вторичному загрузчику и осуществить поддержку callback сервиса. Спецификация на первичный загрузчик (Приложение А), оговаривает каким образом происходит взаимодействие между первичным и вторичным загрузчиками. Первичный загрузчик может быть реализован в виде отдельного модуля, если программный код, заложенный в нем, может уместиться в предоставленный объем первого сектора носителя. Возможен случай, когда дополнительные функции, размещены в виде дополнительного файла, расположенного на носителе. Задача первичного загрузчика в этом случае произвести догрузку нужных функций в ОЗУ, и затем, уже загрузить вторичный загрузчик.

    Модульная структура вторичного загрузчика
    Вторичный загрузчик спроектирован как набор модулей, задача который обеспечит наивысшую производительность и в тоже время гибкость программе. На рисунке 6.1 показана общая схема функционирования вторичного загрузчика. Согласно спецификации первичный загрузчик, вторичный загрузчик получает управление с данными, переданными в регистрах общего назначения (POH). Сохраним эту информацию. После передачи управления вторичному загрузчику, необходимо произвести сброс регистров, инициализацию стека, установку режима 80х25. Вывести на экран информацию, что вторичный загрузчик загружен. Определение типа процессора имеет важное значение. Допустимо использовать вторичный загрузчик для процессоров серии i586 и выше, это обусловлено тем, что с каждой серией процессоров расширяется набор команд у микропроцессора.

    Следующим шагом является загрузка файла сценария загрузки, однако, если он не будет загружен успешно, или в процессе его работы будут существовать критические ошибки, программа переходит на выполнение настроек определенные по умолчанию. Такой шаг оправдан тем, что не всегда можно произвести успешное чтение с носителя, допустим, если он имеет повреждение. Callback сервис первичного загрузчика при ошибках возвращает код ошибки, которую можно идентифицировать. На рисунке 6.1 показан алгоритм определения ошибок. Ошибки могут быть следующие:
    файл имеет размер больше чем 64 кб;
    файл не найден;
    файл не может быть прочитан;
    неопределенная ошибка.
    В любом случае происходит отображение информации на дисплее компьютера, и затем используется сценарий загрузки по умолчанию. Если произошло успешное считывание файла сценария загрузки, обработка его осуществляется модулем use_parse.
    ....
    и так далее.....

    PS. Это часть документации по SL.
  • SL - залит на SVN ревизия 1065.
  • Архив скачали 10 раз, и ни одного отзыва. Всем все понятно выходит ?
  • Все полностью - понятно не бывает :)

    А вот про магическую строку на синем экране (использовать уже загруженный, или еще какой - образ) - без тебя понять было просто невозможно :!:
    Отсюда и понимание смысла мероприятия...
    И того, что тут неделькой работы не отделаешься :)
  • Who is online

    Users browsing this forum: No registered users and 2 guests