1. WrmOS: система сборки

2. WrmOS: конфигурирование →

Содержание
1.1 Описание
1.2 Конфигурирование
1.3 Опции сборки
1.4 Сборка
1.5 Сборка внешнего (external) проекта

1.1 Описание [наверх]


WrmOS имеет основанную на make систему сборки. Это позволяет легко модифицировать систему сборки в соответствии с вашими потребностями.

WrmOS содержит следующие директории:

mk/ Сборочные скрипты (мэйкфайлы).
cfg/

Конфигурационные файлы. Эта директория содержит конфигурационные файлы проекта, которые описывают параметры целевой системы, параметры сборки, путь к тулчейну, параметры ядра, список целевых приложений, конфигурацию корневого-приложения и т.д. Более подробную информацию можно найти в разделе конфигурирование.

lib/ Библиотеки. Каждая библиотека имеет собственную директорию. Она содержит C/C++ исходники, загаловочные файлы и скрипт (Makefile) для сборки библиотеки. Некоторые библиотеки могут содержать только загаловочные файлы.
krn/ Исходники ядра. Содержит общую часть ядра и архитектуро-зависимые части ядра.
app/ Приложения. Каждое приложение имеет собственную директорию. Она содержит C/C++ исходники, заголовочные файлы и скрипт (Makefile) для сборки приложения.
ldr/ Загрузчик. Содержит исходники загрузчика и скрипт (Makefile) для сборки загрузчика и создания образа файловой системы (RAMFS).


Во время сборки осуществляются следующие шаги:

  1. Чтение конфигурационных файлов.
  2. Создание заголовочных файлов с конфигурационными параметрами.
  3. Сборка библиотек.
  4. Сборка ядра.
  5. Сборка приложений.
  6. Создание образа файловой системы (RAMFS), содержащего ядро, конфигурацию корневой приложения Alpha и все приложения.
  7. Сборка загрузчика, содержащего стартовый код системы и образ файловой системы (RAMFS).
make-param-P --> cfg/prj/project-name.prj --> build-system
                               ↑  ↑  ↑          ↓
   cfg/plt/platform-name.plt --+  |  |          +--> environment variables
   cfg/alph/alpha-config.alph ----+  |          +--> generate configuration h-file
   cfg/base.cfg ---------------------+          +--> build libraries
                                                +--> build kernel
                                                +--> build applications
                                                +--> build RAMFS with alpha config and ELFs
                                                +--> build bootloader with RAMFS image

1.2 Конфигурирование [наверх]


Параметры проекта могут быть определены в конфигурационном файле проекта cfg/prj/project-file-name.prj. Параметры проекта содержат:

  • параметры целевой системы (CPU, память, базовые устройства, частота системной шины и т.д.);
  • параметры сборки библиотек (debug flags);
  • параметры сборки ядра (debug flags, UART, timer, MMU);
  • параметры сборки приложений (debug flags);
  • список приложений;
  • конфигурация корневого приложения Alpha.

Более подробную информацию можно найти в разделе конфигурирование.

1.3 Опции сборки [наверх]


Опции сборки — это  аргументы командной строки и переменные окружения. Обычно сборка начинается посредством такой команды:

make build P=cfg/prj/hello-qemu-x86.prj B=../build/hello-qemu-x86 -j

Сиситема сборки поддерживает следующие опции:

target mandatory моежт быть build, clean или rebuild (clean & build)
P=project-file-name.prj mandatory определяет путь к конфигурационному файлу проекта
B=build-dir-name mandatory определяет путь к сборочной директории, в ней будут находиться все собранные файлы
E=external-project-dir-name optional определяет путь к директории внешнего (external) проекта, используется для сборки внешнего (external) проекта (см. ниже)
V=0|1 optional флаг verbose, может иметь значение 0 или 1, позволяет скрыть детали сборки (V=0, по умолчанию) или печатать их (V=1)
-j optional параметр make, позволяет запустить параллельную сборку, это делает сборку быстрее

1.4 Сборка [наверх]


Перед сборкой необходимо создать конфигурационный файл проекта. Смотрите раздел конфигурирование для более подробной информации. Так же могут быть использованы демонстрационные проекты WrmOS — "hello" и "console".

Сборка начинается посредством команды вида:

make build P=cfg/prj/hello-qemu-x86.prj B=../build/hello-qemu-x86 -j

Промежуточные файлы сборки (сгенерированные заголовочные файлы, объектные файлы, испольняемые файлы) будут находиться в сборочной директории, определённой параметром B. Главный результат сборки — это исполняемый файл загрузчика:

../build/hello-qemu-x86/ldr/bootloader.elf

или образ диска с загрузчиком:

../build/hello-qemu-x86/ldr/bootloader.img

Этот файл может быть загружен на целевую плату или запущен на виртуальной машине QEMU:

qemu-system-i386 -display none -serial stdio -drive \
    format=raw,file=$(realpath ../build/hello-qemu-x86/ldr/bootloader.img)

1.5 Сборка внешнего (external) проекта [наверх]


В предыдущем разделе было описано как сбрать демонстрационный проект Hello для архитектуры x86. В том примере были использованы файлы (конфигурация, библиотеки, приложения) из WrmOS директории. Для реальных проектов необходимо создавать собственные конфигурацию, библиотеки и приложения. Чтобы при этом не модифицировать оригинальную директорию  WrmOS, существует возможность собрать внежний (external) проект.

Для этого необходимо создать внешнюю директорию как показано на схеме ниже:

ext-project-dir -+- cfg -+- prj --+- ext-proj-file.prj
                 |       +- plt --+- ext-plat-file.plt
                 |       +- alph -+- ext-alph-file.alph
                 |
                 +- lib -+- ext-lib-name-1
                 |       +- ext-lib-name-2
                 |       +- ext-lib-name-...
                 |
                 +- app -+- ext-app-name-1
                         +- ext-app-name-2
                         +- ext-app-name-...

и при запуске сборки определить опцию E=<ext-project-dir>:

make build P=<ext-project-dir>/cfg/prj/hello-qemu-x86.prj \
    B=../build/hello-qemu-x86 E=<ext-project-dir> -j

При этом система сборки будет использовать конфигурацию, библиотеки и приложения из <ext-project-dir>. Если оригинальная директормя WrmOS содержит библиотеки или приложения с таким же именем как и в <ext-project-dir>, система сборки будет использовать файлы из <ext-project-dir>. Это позволяет переопределить файлы из оригинальной директории WrmOS.

Дополнительную информацию можно найти в статье Простейший проект Hello World.

2. WrmOS: конфигурирование →