Contents 2.1 Overview 2.2 Build environment variables 2.3 Project configuration parameters 2.4 Platform configuration parameters 2.5 Alpha run-time configuration
2.1 Overview [up]
All configuration files generally are located in cfg/ directory. It contains project configurations that describe target system parameters, building parameters, toolchain path, kernel parameters, list of target applications, alpha configuration and other. For convenience all files are grouping at 3 directories:
| cfg/plt/ | Platform configurations. They describe target platform parameters — CPU, memory, clock frequency, timer, UART and MMU. | 
| cfg/prj/ | Project configurations. They describe building parameters, list of applications, path to toolchain. Here including platform file from cfg/plt/ directory and specify alpha configuration file from cfg/alph/. | 
| cfg/alph/ | Root-task configurations. They are processing by root-task Alpha in run-time. They describe applications to run and their capabilities. | 
Some mandatory parameters are defined in cfg/base.cfg.
Configuration looks like this:
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 Build environment variables [up]
While building in Makefiles and configuration files are available the next variables:
| wrmdir | root of WrmOS sources directory | 
| blddir | build directory specified by build options B=<build-dir-name> | 
2.3 Project configuration parameters [up]
Project configuration file is locate in cfg/prj/ directory and must contents the next parameters:
| Parameter | Description | Example | 
|---|---|---|
| plt_file | Path to platform configuration file. | plt_file = $(wrmdir)/cfg/plt/x86-qemu-q35.plt | 
| gccprefix | Prefix for GCC toolchain. | gccprefix = i686-linux- | 
| usr_lib_dbg | Debug flags for libraries, kernel, applications and bootloader. My be 0 or 1. It allows to use debug configuration with asserts, additional debug outputs and other (for 1) or use release configuration (for 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 | Kernel logging enable flag. May be 0 or 1. It enables internal kernel logging, that allow to see kernel activities and actions. | usr_krn_log = 1 | 
| usr_ramfs | List of RAMFS files. These files will be built and put to RAMFS. Each list item has format: | usr_ramfs = config.alph:$(wrmdir)/cfg/alph/hello.alph usr_ramfs += hello.elf:$(blddir)/app/hello/hello.elf | 
After all parameters must be including of cfg/base.cfg file:
include $(wrmdir)/cfg/base.cfg
2.4 Platform configuration parameters [up]
Platform configuration file is locate in cfg/plt/ directory and must contents the next parameters:
| Parameter | Description | Example | 
|---|---|---|
| System parameters | ||
| arch | Target CPU architecture. It specifies architecture specifics for libraries, kernel and applications. | arch = x86 | 
| arch_ver | Version of target CPU architecture. It specifies specifics for architecture version components of libraries, kernel and applications. | arch_ver = armv7-a | 
| cpu | Target CPU model. It specifies CPU specifics for libraries, kernel and applications. | cpu = q35 | 
| plat | Target platform name. It specifies platform specifics for libraries, kernel and applications. | plt = qemu | 
| brd | Target board name. It specifies board specifics for libraries, kernel and applications. | brd = qemu_q35 | 
| max_cpus | Maximum numbers of CPU cores. | max_cpus = 2 | 
| sys_clock_hz | System clock in hertz. | sys_clock_hz = 1193182 | 
| ram_start | Start address of physical RAM memory. | ram_start = 0x100000 # skip 1 MB for low-memory, needs for x86 | 
| ram_sz | Size of physical RAM memory in bytes. | ram_sz = 0x800000 | 
| page_sz | Page size in bytes. | page_sz = 0x1000 | 
| Kernel parameters | ||
| krn_vaddr | Start of kernel virtual addresses. | krn_vaddr = 0xf0100000 # skip 1 MB for low-memory, needs for x86 | 
| krn_tick_usec | Kernel tick in microseconds. Kernel periodically timer will tick every krn_tick_usec microseconds. | krn_tick_usec = 10000 | 
| krn_uart_paddr | Kernel UART physical address. For x86 architecture it specifies MMIO device address (page aligned part of address) and IO-port (lowest 12 bits). | krn_uart_paddr = (0xb8000 + 0x3f8) # video_mem + ioport_COM1_addr | 
| krn_uart_sz | Kernel UART size in bytes. For x86 architecture it specifies MMIO device size (0x10 aligned part of size) and IO-port size (lowest 4 bits). | krn_uart_sz = (0x1000 + 0x8) # video_sz + ioport_COM1_sz | 
| krn_uart_bitrate | Kernel UART bitrate. | krn_uart_bitrate = 115200 | 
| krn_uart_irq | Kernel UART interrupt number. | krn_uart_irq = 4 | 
| krn_intc_paddr | Interrupt Controller physical address. For x86 architecture don't need and must be 0x1 to disable kernel mapping of Interrupt Controller. | krn_intc_paddr = 0x1 # lowest bit 1 — don't need kmap | 
| krn_intc_sz | Interrupt Controller size in bytes. For x86 architecture don't need and must be 0. | krn_intc_sz = 0x0 | 
| krn_timer_paddr | Kernel Timer physical address. For x86 architecture don't need and must be 0x1 to disable kernel mapping of Kernel Timer. | krn_timer_paddr = 0x1 # lowest bit 1 — don't need kmap | 
| krn_timer_sz | Kernel Timer size in bytes. For x86 architecture don't need and must be 0. | krn_timer_sz = 0x0 | 
| krn_timer_irq | Kernel Timer interrupt number. | krn_timer_irq = 0 | 
| Bootloader parameters | ||
| ldr_uart_paddr | Bootloader UART physical address. For x86 architecture it specifies MMIO device address (page aligned part of address) and IO-port (lowest 12 bits). | ldr_uart_paddr = (0xb8000 + 0x3f8) # video_mem + ioport_COM1_addr | 
| ldr_uart_bitrate | Bootloader UART bitrate. | krn_uart_bitrate = 115200 | 
| Base platform devices | ||
| plt_uart | Platform UART name. It specifies UART driver for Kernel and Bootloader. | plt_uart = x86_8250 | 
| plt_intc | Platform Interrupt Controller name. It specifies kernel driver for Interrupt Controller. | plt_intc = x86_8259 | 
| plt_timer | Platform Timer name. It specifies kernel driver for Timer. | plt_timer = x86_8253 | 
| plt_mmu | Platform MMU name. It specifies kernel driver for MMU. | plt_mmu = x86_mmu | 
2.5 Alpha run-time configuration [up]
Alpha run-time configuration file has the next view:
# 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 run-time configuration contents 3 sections:
- device table
- named memory table
- application table
File format
Configuration file format has the following rules:
- every line starting from '#' is comment and ignored;
- every section is started from its name — DEVICES, MEMORY or APPLICATIONS.
Device table
The device table has the view:
DEVICES
        #name     paddr        size        irq
        uart      0x12345678   0x100       12
Device table describes of used system devices. Table starts from key word DEVICES. Every table row corresponds to one device. Table consists from 4 columns:
| Column | Field name | Description | 
| 1 | name | Name of MMIO device. This name will be used by user application to get access to it. | 
| 2 | paddr | Physical address of MMIO device. | 
| 3 | size | Size of MMIO devices in bytes. | 
| 4 | irq | Interrupt number of MMIO devices. Value '-1' means interrupt does not used. | 
Named memory table
The named memory table has the view:
MEMORY
        #name      sz      access  cached  contig
        uart_buf   0x1000  rw      0       1
Named memory table describes of named memory regions. Named memory needs to allows to user applications use memory with required properties — size, access permissions, cached or not, contiguous or not. Table starts from key word MEMORY. Every table row corresponds to one memory region. Table consists from 5 columns:
| Column | Field name | Description | 
| 1 | name | Name of memory region. This name will be used by user application to get access to it. | 
| 2 | size | Size of memory region in bytes. | 
| 3 | access | Access permissions of memory region. Value may be combination of characters — 'r', 'w' and 'x' (read, write and executable). | 
| 4 | cached | Cached flag of memory region. 0 — not cached, 1 — cached. | 
| 5 | contiguous | Contiguous flag of memory region. 0 — not contiguous, 1 — contiguous. | 
Application table
The application table has the view:
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
    }
Application table describes of user applications and their parameters. It will be used by root-task Alpha to start applications on system startup. Every application description is started by line with character '{' and terminated by line with character '}'. Between this lines there is a application parameters. Every parameter there is in separate line. Parameter starts from "parameter-name:", after that there is a parameter value. There are the next parameters:
| Name | Mandatory | Description | 
| name | mandatory | Application name. | 
| short_name | mandatory | Application short name — 4 characters. It is used to prefixed application output. | 
| file_path | mandatory | Path to executable file path in RAMFS. It has view "ramfs:/filename.elf". | 
| stack_size | mandatory | Stack size for main (first) thread in application. | 
| heap_size | optional | Size of memory that root-task Alpha will give to application on its startup. Application may get this memory by Memory Pool WrmOS API. Default value is 0. | 
| aspaces_max | mandatory | Number of address spaces allowed for this application. Must be >=1. | 
| threads_max | mandatory | Number of threads allowed for this application. Must be >=1. | 
| prio_max | mandatory | Maximal value of thread priority from range: 1 (lowest) .. 255 (highest). | 
| fpu | optional | FPU enable flag. 0 — application does not use FPU. 1 — application use FPU. By default 0. | 
| malloc_strategy | optional | Memory allocating strategy. on_startup — allocate all memory (data, code, bss) for application on its startup, it allows be sure memory enough; on_pagefault — allocate memory (data, code, bss) for application page by page on pagefault, it allows not allocate memory if not need. on_startup requires some time for allocating on application startup, but not need any time for allocating in run-time. | 
| devices | optional | Comma separated list of device names. Names must be correspond devices from Device Table. | 
| memory | optional | Comma separated list of named memory names. Names must be correspond memory regions from Named Memory Table. | 
| args | optional | Space separated strings. They will accessible by user application as main(argc, argv[]) function incoming argument list. | 
 
     English
 English
 Russian
 Russian