Процесс загрузки 3OS.Embedded

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

Сам процесс загрузки для встраиваемых систем жестко регламентирован, например, для загрузки из ПЗУ или РПЗУ, объемы и организация, которых не предполагают использование файловых систем. Соответственно ядро 3ОС и его сервисные, драйверные и прикладные потоки и процессы, не могут быть выделены в качестве структурных единиц – файлов. Выходом в подобной ситуации может стать загрузочный пакет 3ОС, объединяющий все модули 3ОС и прикладные задачи в один пакет с заранее заданной структурой, например такой:

Загрузочный пакет размещается линейно на устройстве носители информации и так же линейно boot - загрузчиком перегружается в ОЗУ, а управление передается «предварительному загрузчику», a затем и «окончательному загрузчику».

Окончательный загрузчик отрабатывает в следующем порядке:

  1. настраивает аппаратную часть;
  2. вычисляет адрес начала (BundleAddr) индексного дампа потоков по сигнатуре дампа "index_dump",0x0D,0x0A. Затем, используя информацию из индексного дампа вычисляется размер (BundleSize) связки «индексный дамп» + «дамп потоков».
    Результатом этапа 2 является настройка менеджера кучи (менеджера памяти) таким образом, что бы кусок памяти с адреса BundleAddr протяженностью BundleSize считался бы уже выделенным и занятым под нужды ОС
  3. Затем смещение каждого потока в дампе потоков, определяется по индексам в дампе индексов, и потоки создаются и загружаются содержимым (кодом и данными)
  4. Куча, представляющая до этого «дамп индексов» и «дамп потоков» освобождается через менеджер памяти.

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

0x0000 Сигнатура "index_dump",0x0D,0x0A
0x000C размер индексного дампа (16 bit) 0x????
0x000E размер содержимого 1 потока (16 bit) 0x????
0x0010 размер содержимого 2 потока (16 bit) 0x????
0x00YY размер последнего потока (16 bit) 0x????

Индексный файл создается достаточно просто такими средствами как компилятор ассемблера или C--. Индексный файл и файлы потоков откомпилированные пристыковываются к основному пакету ОС и записываются на носитель.