Содержание 2.1 Описание 2.2 Переменные среды сборки 2.3 Параметры конфигурации проекта 2.4 Параметры конфигурации платформы 2.5 Конфигурация корневого приложения Alpha
2.1 Описание [наверх]
Все конфигурационные файлы обычно находятся в директории cfg/. Она содержит конфигурационный файл проекта, который описывает параметры целевой системы, параметры сборки, путь к тулчейну, параметры ядра, список целевых приложений, файл конфигурации корневого приложения и т.д. Для удобства использования все конфигурационные файлы сгруппированы в 3 директории:
| cfg/plt/ | Конфигурационные файлы платформы. Они описывают параметры целевой платформы — CPU, память, частоту системной шины, таймер, UART и MMU. | 
| cfg/prj/ | Конфигурационные файлы проекта. Они описывают параметры сборки, список приложений, путь к тулчейну. В этом файле подключается файл конфигурации платформы из директории cfg/plt/ и определяется файл конфигурации корневого приложения из cfg/alph/. | 
| cfg/alph/ | Конфигурационные файлы корневого приложения. Они обрабатываются корневым приложением Alpha во время выполнения. Они описывают приложения для запуска и их параметры. | 
Некоторые обязательные параметры определены в базовом конфигурационном файле cfg/base.cfg.
Конфигурация выглядит следующим образом:
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
2.2 Переменные среды сборки [наверх]
Во время сборки в сборочных скриптах (Makefiles) и в конфигурационных файлах доступны следующие переменные:
| wrmdir | директория с исходниками WrmOS | 
| blddir | сборочная директория, определённая в параметре сборки B=<build-dir-name> | 
2.3 Параметры конфигурации проекта [наверх]
Файл конфигурации проекта находится в директории cfg/prj/ и должен содержать следующие параметры:
| Параметр | Описание | Пример | 
|---|---|---|
| plt_file | Путь к конфигурационному файлу целевой платформы. | plt_file = $(wrmdir)/cfg/plt/x86-qemu-q35.plt | 
| gccprefix | Префикс для тулчейна GCC. | gccprefix = i686-linux- | 
| usr_lib_dbg | Отладочные флаги для библиотек, ядра, приложений и загрузчика. Может быть 0 или 1. Позволяет использовать отладочную конфигурацию с assert'ами, дополнительной отладочной выдачей и т.д. (для значения 1) или использовать релизную конфигурацию (для занчения 0). | usr_lib_dbg = 1 | 
| usr_krn_dbg | usr_krn_dbg = 1 | |
| usr_app_dbg | usr_app_dbg = 1 | |
| usr_ldr_dbg | usr_ldr_dbg = 1 | |
| usr_krn_log | Флаг включения логирования в ядре. Может быть 0 или 1. Флаг включает внутреннее логирование в ядре, это позволяет видеть активность и собятия ядра. | usr_krn_log = 1 | 
| usr_ramfs | Список файлов для файловой системы (RAMFS). Эти файлы будут собраны и помещены в RAMFS. Каждый элемент списка имеет следующий формат: | usr_ramfs = config.alph:$(wrmdir)/cfg/alph/hello.alph usr_ramfs += hello.elf:$(blddir)/app/hello/hello.elf | 
После определения всех параметров должен быть подключён базовый конфигурационный файл cfg/base.cfg:
include $(wrmdir)/cfg/base.cfg
2.4 Параметры конфигурации платформы [наверх]
Файл конфигурации платформы находится в директории cfg/plt/ и должен содержать следующие параметры:
| параметр | Описание | Пример | 
|---|---|---|
| Параметры системы | ||
| arch | Архитектура целевого процессора. Определяет архитектуро-зависимые компоненты библиотек, ядра и приложений. | arch = x86 | 
| arch_ver | Версия архитектуры целевого процессора. Определяет зависимые от версии архитектуры компоненты библиотек, ядра и приложений. | arch_ver = armv7-a | 
| cpu | Модель целевого процессора. Определяет процессоро-зависимые компоненты библиотек, ядра и приложений. | cpu = q35 | 
| plat | Имя целевой платформы. Определяет платформо-зависимые компоненты библиотек, ядра и приложений. | plt = qemu | 
| brd | Имя целевой платы. Определяет плато-зависимые компоненты библиотек, ядра и приложений. | brd = qemu_q35 | 
| max_cpus | Максимальное возможно количество ядер процессора для данной платформы. | max_cpus = 2 | 
| sys_clock_hz | Частота системы в Герцах. | sys_clock_hz = 1193182 | 
| ram_start | Стартовый адрес RAM памяти. | ram_start = 0x100000 # skip 1 MB for low-memory, needs for x86 | 
| ram_sz | Размер RAM памяти в байтах. | ram_sz = 0x800000 | 
| page_sz | Размер страницы памяти в байтах. | page_sz = 0x1000 | 
| Параметры ядра | ||
| krn_vaddr | Стартовый адрес виртуального адресного пространства ядра. | krn_vaddr = 0xf0100000 # skip 1 MB for low-memory, needs for x86 | 
| krn_tick_usec | Тик ядра в микросекундах. Периодический таймер ядра будет генерировать прерывание каждые krn_tick_usec микросекунд. | krn_tick_usec = 10000 | 
| krn_uart_paddr | Физический адрес UART для ядра. Для архитектуры x86 этот параметр определяет адрес MMIO устройства (выравненная по размеру страницы часть параметра) и старовый номер IO порта (младшие 12 бит). | krn_uart_paddr = (0xb8000 + 0x3f8) # video_mem + ioport_COM1_addr | 
| krn_uart_sz | Размер UART для ядра в байтах. Для архитектуры x86 этот параметр определяет размер MMIO устройства в байтах (выравненная по границе 0x10 байт часть параметра) и размер IO-port региона (младшие 4 бита). | krn_uart_sz = (0x1000 + 0x8) # video_sz + ioport_COM1_sz | 
| krn_uart_bitrate | Битовая скорость UART ядра. | krn_uart_bitrate = 115200 | 
| krn_uart_irq | Номер прерывания UART ядра. | krn_uart_irq = 4 | 
| krn_intc_paddr | Физический адрес контроллера прерываний. Для архитектуры x86 этот параметр не используется и должен иметь значение 0x1, чтобы не активировать маппинг для контроллера прерываний. | krn_intc_paddr = 0x1 # lowest bit 1 — don't need kmap | 
| krn_intc_sz | Размер контроллера прерываний в байтах. Для архитектуры x86 этот параметр не используется и должен иметь значение 0. | krn_intc_sz = 0x0 | 
| krn_timer_paddr | Физический адрес таймера ядра. Для архитектуры x86 этот параметр не используется и должен иметь значение 0x1, чтобы не активировать маппинг для таймера ядра. | krn_timer_paddr = 0x1 # lowest bit 1 — don't need kmap | 
| krn_timer_sz | Размер таймера ядра в байтах. Для архитектуры x86 этот параметр не используется и должен иметь значение 0. | krn_timer_sz = 0x0 | 
| krn_timer_irq | Номер прерывания таймеря ядра. | krn_timer_irq = 0 | 
| Параметры загрузчика | ||
| ldr_uart_paddr | Физический адрес UART для загрузчика. Для архитектуры x86 этот параметр определяет адрес MMIO устройства (выравненная по размеру страницы часть параметра) и старовый номер IO порта (младшие 12 бит). | ldr_uart_paddr = (0xb8000 + 0x3f8) # video_mem + ioport_COM1_addr | 
| ldr_uart_bitrate | Битовая скорость UART загрузчика. | krn_uart_bitrate = 115200 | 
| Базовые устройства платформы | ||
| plt_uart | Имя UART для описываемой платформы. Этот параметр определяет драйвер UART для ядра и загрузчика. | plt_uart = x86_8250 | 
| plt_intc | Имя контроллера прерываний для описываемой платформы. Этот параметр определяет драйвер ядра для контроллера прерываний. | plt_intc = x86_8259 | 
| plt_timer | Имя таймера для описываемой платформы. Этот параметр определяет драйвер ядра для таймера. | plt_timer = x86_8253 | 
| plt_mmu | Имя MMU для описываемой платформы. Этот параметр определяет драйвер ядра для MMU. | plt_mmu = x86_mmu | 
2.5 Конфигурация корневого приложения Alpha [наверх]
Конфигурация времени выполнения корневого приложения Alpha имеет следующий вид:
# config for roottask
# mmio devices
DEVICES
        #name     paddr        size        irq
        uart      0x12345678   0x100       12
# named memory regions
MEMORY
        #name      sz      access  cached  contig
        uart_buf   0x1000  rw      0       1
# applications
APPLICATIONS
    {
        name:             hello
        short_name:       hell
        file_path:        ramfs:/hello.elf
        stack_size:       0x1000
        heap_size:        0x0
        aspaces_max:      1
        threads_max:      3
        prio_max:         100
        fpu:              off
        malloc_strategy:  on_startup
        devices:
        memory:
        args:             arg1=123, arg2=345
    }
Конфигурация времени выполнения корневого приложения Alpha содержит 3 секции:
- таблица устройств
- таблица именованной памяти
- таблица приложений
Формат файла
Формат конфигурационного файла имеет следующие правила:
- каждая строка, начинающиеся с символа '#' является комментарием и игнорируется;
- каждая секция начинается с её имени — DEVICES, MEMORY или APPLICATIONS.
Таблица устройств
Таблица устройств имеет вид:
DEVICES
        #name     paddr        size        irq
        uart      0x12345678   0x100       12
Таблица устройств описывает используемые системные устройства. Таблица начинается с ключевого слова DEVICES. Каждая строка таблицы соответствует одному устройству. Таблица состоит из 4-ёх столбцов:
| Столбец | Имя поля | Описание | 
| 1 | name | Имя MMIO устройства. Это имя будет использовано пользовательским приложением для доступа к этому устройству. | 
| 2 | paddr | Физический адрес MMIO устройства. | 
| 3 | size | Размер MMIO устройства в байтах. | 
| 4 | irq | Номер прерывания MMIO устройства. Значение '-1' означает, что прерывание для данного устройства не используется. | 
Таблица именованой памяти
Таблица именованной памяти имеет вид:
MEMORY
        #name      sz      access  cached  contig
        uart_buf   0x1000  rw      0       1
Таблица именованной памяти описывает именованные регионы памяти. Именованная память необходима, чтобы позволить пользовательским приложениям использовать память с требуемыми свойствами — размер, права доступа, кэшируемая или нет, непрерывная или нет. Таблица начинается с ключевого слова MEMORY. Каждая строка таблицы соответствует одному региону памяти. Таблица состоит из 5 столбцов:
| Столбец | Имя поля | Описание | 
| 1 | name | Имя региона памяти. Это имя будет использоваться пользовательским приложением для доступа к этой памяти. | 
| 2 | size | Размер региона памяти в байтах. | 
| 3 | access | Права доступа к региону памяти. Допустимое значение может быть комбинацией символов — 'r', 'w' и 'x' (read, write и executable). | 
| 4 | cached | Флаг кэшируемости региона памяти. 0 — некэшируемая память, 1 — кэшируемая. | 
| 5 | contiguous | Флаг физической непрерывности региона памяти. 0 — не непрерывная память, 1 — физически непрерывная память. | 
Таблица приложений
Таблица приложений имеет вид:
APPLICATIONS
    {
        name:             hello
        short_name:       hell
        file_path:        ramfs:/hello.elf
        stack_size:       0x1000
        heap_size:        0x0
        aspaces_max:      1
        threads_max:      3
        prio_max:         100
        fpu:              off
        malloc_strategy:  on_startup
        devices:
        memory:
        args:             arg1=123, arg2=345
    }
Таблица приложений описывает пользовательские приложения и их параметры. Она используется корневым приложением Alpha для запуска приложений во время старта системы. Описание каждого приложения начинается со строки с единственным символом'{' и заканчивается строкой с единственным символом '}'. Между этими строками находятся параметры приложения. Каждый параметр находится на отдельной строке. Параметры начинаются с имени параметра вида "parameter-name:", вслед за которым идёт значение параметра. Имеются следующие параметры:
| Имя | Обязательный | Описание | 
| name | обязательный | Имя приложения. | 
| short_name | обязательный | Краткое имя приложения — 4 символа. Краткое имя используется в качестве префикса для вывода приложения. | 
| file_path | обязательный | Путь к исполняемому файлу в файловой системе RAMFS. Путь имеет вид "ramfs:/filename.elf". | 
| stack_size | обязательный | Размер стэка для главного (первого) трэда в приложении. | 
| heap_size | опциональный | Размер памяти, которую корневое приложение передаст запускаемому приложению при его старте. Приложение может получить память посредством Memory Pool WrmOS API. По умолчанию значение параметра 0. | 
| aspaces_max | обязательный | Максимальное количество адресных пространств, разрешённых для данного приложения. Значение должно быть >=1. | 
| threads_max | обязательный | Максимальное количество трэдов, разрешённых для данного приложения. Значение должно быть >=1. | 
| prio_max | обязательный | Максимальное значение приоритета для трэдов данного приложения из диапазона: 1 (наименьший) .. 255 (наибольший). | 
| fpu | опциональный | Флаг включения FPU. 0 — приложение не использует FPU. 1 — приложение использует FPU. По умолчанию значение параметра 0. | 
| malloc_strategy | опциональный | Стратегия аллоцировния памяти. on_startup — аллоцировать всю память (data, code, bss) для приложения во время его запуска, это позволяет быть уверенным, что памяти достаточно; on_pagefault — аллоцировать память (data, code, bss) для приложения постранично во время пэйджфолта, это позволяет не аллоцировать память, пока она действительно не потребуется. Стратегия on_startup требует некоторого времени на аллоцирование памяти во время старта приложения, но убирает необходимость тратить на это время во время выполнения приложения. | 
| devices | опциональный | Разделённый запятыми список имён устройств доступных для данного приложения. Имена должны соответствовать устройствам в Таблице Устройств (Device Table). | 
| memory | опциональный | Разделённый запятыми список регионов именованной памяти доступных для данного приложения. Имена должны соответствовать регионам памяти в Таблице Именованной Памяти (Named Memory Table). | 
| args | опциональный | Разделённые пробелами строки. Ини будут доступны пользовательскому приложению в качестве списка входящих аргументов функции main(argc, argv[]). | 
 
     English
 English
 Russian
 Russian