Содержание 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.