Содержание 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). |
Во время сборки осуществляются следующие шаги:
- Чтение конфигурационных файлов.
- Создание заголовочных файлов с конфигурационными параметрами.
- Сборка библиотек.
- Сборка ядра.
- Сборка приложений.
- Создание образа файловой системы (RAMFS), содержащего ядро, конфигурацию корневой приложения Alpha и все приложения.
- Сборка загрузчика, содержащего стартовый код системы и образ файловой системы (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.