ОСРВ MULTEX-ARM
Полное описание
Сборка проекта

Сборку проекта пользователя с использованием библиотек MULTEX-ARM рекомендуется производить на инструментальной машине под управлением ОС Ubuntu, либо Debian с использованием Linaro toolchain. Для настройки проекта пользователя, включения опций и подключения модулей, используются файлы config.h и Makefile. Оба файла должны лежать в директории проекта. Подробнее о структуре проекта смотри в соответствующем разделе.

Результатом сборки является бинарный файл, содержащий скомпилированный проект пользователя собранный вместе с библиотеками ядра MULTEX-ARM, пригодный для исполнения в качестве программы на целевой платформе. Такой файл вместе с дополнительными файлами проекта должен быть записан на загрузочную карту памяти целевой платформы.

Карта памяти — постоянное запоминающее устройство, с которого выполняется загрузка операционной системы на целевой платформе. В общем случае в качестве загрузочной используется карта памяти uSD вставленная в один из слотов целевой платформы. В некоторых случаях это может быть установленная на целевой платформе микросхема памяти NAND или eMMC. Иногда загрузка целевой платформы начинается с загрузчика записанного в памяти NAND или eMMC, который проверяет наличие карты памяти uSD и передаёт управление найденному там бинарному файлу. В любом случае под загрузочным будет пониматься постоянное запоминающее устройство, с которого выполняется загрузка и запуск исполняемого бинарного файла, содержащего MULTEX-ARM с процедурами пользователя.

Целевая платформа — физическое устройство (плата, вычислитель, контроллер управления и т.п.) на базе одного из поддерживаемых процессоров, для которого выполняется сборка MULTEX-ARM вместе с процедурами пользователя.

Инструментальная машина — персональный компьютер с установленным инструментарием для компиляции, сборки и копирования собранных файлов на целевую платформу (по сети, либо через интерфейс UART).

Среда сборки

Предполагается, что сборка пользовательского проекта ведётся на инструментальной машине под управлением Ubuntu. Для сборки проекта под Windows рекомендуется использовать виртуальную машину WSL.

Подготовка WSL

Этот раздел нужен только пользователям Windows для запуска и настройки виртуальной машины Linux. Изначально WSL не содержит ни одной установленной виртуальной машины. Для сборки проектов рекомендуется установить дистрибутив Ubuntu. Для этого из командной строки Windows следует выполнить следующую команду:

wsl --install -d Ubuntu

В процессе установки потребуется создать нового пользователя и задать пароль.

На инструментальной машине может быть установлено несколько дистрибутивов Linux. Просмотреть список установленных можно с помощью команды:

wsl -l -v

Удобно использовать дистрибутив Ubuntu как дистрибутив по умолчанию. Если это не так, выбрать основной дистрибутив можно с помощью команды:

wsl -s Ubuntu

Далее предполагается что все действия в ОС Windows производятся через консоль WSL с запущенной виртуальной машиной Ubuntu.

Установка пакетов

Для сборки проектов понадобятся следующие пакеты:

  • make — утилита работы с файлами;
  • Linaro toolchain — набор инструментов для компиляции проектов под ARM.

Все последующие команды набираются в консоли Linux либо в консоли WSL при работе в ОС Windows. Для установки необходимых пакетов рекомендуется воспользоваться следующей последовательностью команд:

sudo apt update
sudo apt install make
sudo dpkg --add-architecture armhf
sudo apt update
sudo apt install g++-arm-linux-gnueabihf
sudo apt install build-essential git debootstrap u-boot-tools device-tree-compiler

Проверить установку компиляторов можно с помощью следующих команд:

arm-linux-gnueabihf-gcc --h
arm-linux-gnueabihf-gcc --version

Настройка переменных окружения

При компиляции проекта используются специальные утилиты, поставляемые вместе с библиотеками MULTEX-ARM. При сборке в Linux все пути прописываются в Makefile и никаких дополнительных действий предпринимать не нужно. В Windows путь к утилитам удобно прописать в переменную окружения PATH. Для сборки на виртуальной машине WSL, пути можно прописать в Переменных среды. После перезагрузки компьютера виртуальная машина подключит прописанные пути. Проверить переменные окружения WSL можно из командной строки с помощью команды:

wsl env

Описание структуры проекта пользователя

Частью Makefile каждого проекта является файл multex.mk поставляемый вместе с библиотеками MULTEX-ARM, в котором задана предполагаемая структура проекта пользователя. Данная структура может быть изменена, но в этом разделе будет описана структура проекта заданная по умолчанию. Подкаталоги проекта создаются автоматически (если ещё не созданы) при первом запуске сборки проекта.

Новые проекты рекомендуется размещать в директориях, создаваемых на том же уровне, на котором расположена папка с библиотеками multex_arm. В новую папку проекта следует скопировать файлы config.h и Makefile. Эти файлы можно скачать на сайте set-code.ru в составе демонстрационных примеров для различных плат, либо создать самостоятельно по описаниям приведённым ниже.

Рекомендованная структура проекта выглядит следующим образом:

  • multex_arm — Директория с файлами MULTEX-ARM.
    • bin — Утилиты сборки.
    • include — Заголовочные файлы.
    • lib — Библиотеки.
  • myProject — Директория проекта пользователя.
    • src — Исходные тексты. В этой папке следует размещать все компилируемые и заголовочные файлы проекта. Все файлы из этой директории будут скомпилированы и присоединены к проекту. Допускается создание вложенных директорий и поддиректорий (уровень вложенности не ограничен).
    • out — Директория готовых бинарников и вообще всего, что должно быть скопировано на карту памяти целевой платформы (см. Запуск на целевой платформе).
    • config.h — Файл конфигурации работы ядра.
    • Makefile — Файл настройки сборки.

Файл конфигурации config.h

config.h — это файл, содержащий набор макросов, используемых ядром MULTEX-ARM для настройки аппаратных и программных модулей. В данном разделе описаны макросы такого файла.

Выбор платформы

Для начала необходимо указать целевой процессор с помощью макроса ARCH_PROC. Значение следует выбирать из из соответствующей группы макросов. Например, для процессора V3s в файле config.h следует записать следующую строку:

#define ARCH_PROC ARCH_PROC_V3S

Сопроцессор

Для того, чтобы иметь возможность использовать в проекте инструкции сопроцессора NEON, необходимо указать макрос:

#define INCLUDE_NEON

Кэш память

Для задействования внутреннего кэша процессора задается макрос:

#define DCACHE_ENABLE

Так как при отключении кэша быстродействие процессора существенно снижается, не рекомендуется использовать проекты с отключенным макросом разрешения кэша. Так, работа с сетью будет приводить к ошибкам при сильной нагрузке на нее. Поэтому работа в таком режиме желательна только в отладочных целях.

Отладочная консоль

Для подключения отладочной консоли по последовательному интерфейсу UART следует указать макрос:

#define INCLUDE_SIO_CONSOLE

Файловая система ОС MS-DOS

Для подключения в проекте файловой системы ОС MS-DOS следует использовать макрос:

#define INCLUDE_DOSFS

Сеть

Если в проекте предусматривается использование сети Ethernet, то нужно указать макрос:

#define INCLUDE_NETINET

Кроме того, необходимо задать IP-адрес целевой платформы, например:

#define IP_ADDRESS "10.0.3.27"

Для активации стека протоколов TCP/IP и библиотеки сетевых сокетов следует указать:

#define INCLUDE_TCP

Если планируется взаимодействие с целевой платформой через консоль по протоколу UDP, следует указать:

#define INCLUDE_NET_CONSOLE

Если же взаимодействие необходимо по протоколу TCP/IP, то следует указать:

#define INCLUDE_TCP_CONSOLE

Если в проекте необходимо использование FTP-сервера (для копирования файлов, или быстрой замены версии), следует указать:

#define FTP_SERVER

Процедуры пользователя

В файле config.h есть возможность указать две процедуры пользователя, которые будут вызваны на различных этапах загрузки MULTEX-ARM.

Первая из них может быть вызвана в середине загрузки — сразу после загрузки ядра. Такая процедура может быть использована, например, для вывода логотипа на дисплей (если такой имеется на целевой платформе). После вывода логотипа загрузка будет продолжена, что визуально может сократить время реакции системы на включение питания. Такое поведение актуально для процессоров с низкой производительностью. Для указания имени процедуры исполняемой после загрузки ядра следует записать макрос вида:

#define DRAW_LOGO usrDraw

Вторая процедура запускается после окончания всех программных модулей. Например, для запуска такой процедуры с именем mainProc() следует записать:

#define USER_PROC mainProc

Если макрос USER_PROC не указан, то после запуска системы будет вызван Интерпретатор команд SHELL.

Пример написания config.h

Ниже приведён пример файла конфигурации для проекта пользователя на базе процессора V3s, который может использоваться как основа для файлов конфигурации пользователя.

#ifndef _CONFIG_H_
#define _CONFIG_H_
#define PROJECT_BRIEF "Multex-ARM Project V3s"
#define PROJECT_VERSION_NUMBER 1
#define PROJECT_VERSION_SUB_NUMBER 0
#include <arch/archdef.h>
#define ARCH_PROC ARCH_PROC_V3S
#define INCLUDE_NEON
#define DCACHE_ENABLE
#define INCLUDE_SIO_CONSOLE
#define INCLUDE_DOSFS
#define INCLUDE_NETINET
#ifdef INCLUDE_NETINET
#define IP_ADDRESS "10.0.3.35"
#define CHECK_PRIMARY_IP_ADDRESS
#define INCLUDE_NETLOADER
#define INCLUDE_TCP
#ifdef DEBUG
#define FTP_SERVER
#define FTP_ALLOW_TO_CHANGE_WORK_DRIVE
#define INCLUDE_NET_CONSOLE
#define INCLUDE_TCP_CONSOLE
#endif
#endif
#define DRAW_LOGO startScreen
#define USER_PROC startProject
#endif
Зарезервированные строки описания аппаратной части.

Конфигурация аппаратной части

Конфигурация аппаратной части — это текстовое описание целевой платформы составленное пользователем в определённом формате и предназначенное для настройки библиотечных модулей при запуске ядра MULTEX-ARM. Такое описание содержит в себе название процессора, название платы, описание подключения используемых периферийных устройств. Описание составляется пользователем в текстовом виде и размещается в файле с расширением arc на карте памяти целевой платформы. В начале загрузки ядра MULTEX-ARM преобразует текстовый файл в список параметров.

Список параметров конфигурации — набор пар ключзначение созданный ядром MULTEX-ARM на этапе загрузки на базе текстового описания конфигурации аппаратной части. Созданный системой список параметров доступен для проекта пользователя только на чтение и добавление данных и может быть дополнен в исходном коде пользователя с помощью функций описанных в arch.h. Для описания аппаратной части используются зарезервированные строки-ключи описанные в файле archdef.h.

См. также
Функции работы с описанием аппаратной части, а также зарезервированные строки-ключи в файлах arch.h и archdef.h.

Описание аппаратной части строится на базе списков программного модуля mapstr.h. Структура списка параметоров не является жёсткой в отличие от структур и перечислений стандарта языка Си. В процессе развития операционной системы и добавления новых полей параметров структура описания аппаратной части не будет нарушена и все библиотеки будут иметь доступ к используемым ими полям списка параметоров без необходимости пересборки.

Предупреждения
Каждая запись в описании занимает 512 байт ОЗУ. При необходимости в итоговом проекте занимаемую память можно освободить с помощью archFree() после инициализации всех библиотек. Учитывая такую политику использования, при разработке новых библиотек рекомендуется забирать нужные для работы значения из списка параметоров в функции инициализации и не обращаться к списку параметоров после её завершения.

Пример чтения списка параметоров конфигурации — блок настройки аппаратных модулей характерных для каждого процессора:

bool ok;
const char *cpu = archGetString (ARCH_CPU, &ok);
if (ok && archCheckString (cpu, ARCH_PROC_V3S)) {
printf ("V3s seetup...\n");
// Some actions for V3s ...
} else
if (ok && archCheckString (cpu, ARCH_PROC_A40)) {
printf ("A40 seetup...\n");
// Some actions for A40 ...
}
const char * archGetString(const char *key, bool *ok)
Получить строковое значение из списка.
bool archCheckString(const char *value, const char *pattern)
Функция сравнения строк.
#define ARCH_PROC_A40
Definition: archdef.h:128
#define ARCH_CPU
Название процессора.
Definition: archdef.h:44
#define ARCH_PROC_V3S
Definition: archdef.h:126
int printf(const char *restrict format,...)

Приоритет записей в списке параметров конфигурации

Записи в созданном ядром MULTEX-ARM списке параметоров могут дублироваться, так как заполняются системой из разных источников. Поиск параметров по ключу в списке выполняется с начала списка до первого совпадения. Следовательно, записи в начале списка параметоров имеют более высокий приоритет. Загрузка списка выполняется ядром системы с учётом этой особенности – вначале грузится список из файла с расширением arc на карте памяти (если таковой имеется). Для плат, название которых содержится в файле archdef.h, список параметоров может содержать только название платы, остальные параметры конфигурации для таких плат будут подгружены автоматически из ядра системы. Далее подгружаются данные о типе процессора и затем данные из библиотек, основанные на типе процессора. Итоговый список выводится в консоль в сборке debug. Если какие-то из загруженных параметров нужно изменить их следует внести в файл конфигурации (файл с расширением arc на карте памяти).

Файл конфигурации

Файл описания конфигурации аппаратной части может размещаться на одном из дисков, монтируемых при старте системы (uSD, eMMC, NAND). Название файла не имеет значения, так как поиск файла производится системой по расширению arc. Все найденные файлы с таким расширением будут загружены в общий список до инициализации основных модулей системы. В таком файле рекомендуется указать как минимум название платы, выбрав его из зарезервированных строк-ключей файла arch.h. Остальные параметры будут подгружены позже при старте программных модулей, на основании выбранной платы. Также в файле можно указать некоторые параметры конфигурации, используемые программными модулями. Так как файлы конфигурации загружаются до инициализации модулей — такие записи будут иметь более высокий приоритет, чем записи, вносимые библиотеками. Это позволяет изменять параметры конфигурации, заложенные в библиотеках. Для новых (ещё не поддержанных) плат возможно составить полное описание аппаратной части с помощью такого файла.

Файл описания является текстовым, где каждая строка является одной записью. Каждая запись состоит из набора полей, разделённых точкой с запятой. Некоторые поля могут содержать набор значений разделённых запятой. В файле могут содержаться закомментированные строки, начинающиеся со знака решётки. Первая строка файла конфигурации обязательно должна содержать подпись #MAPSTORE. Стандартный набор полей одной записи описан ниже.

Набор полей файла описания конфигурации:

  • Параметр — зарезервированная строка-ключ, по которой будет осуществляться поиск значений. Может содержать любые символы латинского алфавита, кроме пробела (пробелы будут удалены при поиске). Все известные строки-ключи описаны в файле arch.h.
  • Тип данных — служит для правильной интерпретации значений при поиске. Может содержать следующие зарезервированные строки:
    • STR — строковое значение;
    • INT — набор десятичных значений (частный случай - одно значение).
  • Значение — для строковых полей это зарезервированная строка, описанная в arch.h. Для десятичных значений это набор, состоящий как минимум из одного значения.
  • Описание — необязательный параметр, служащий для лучшего понимания десятичных значений при просмотре файла.

Пример файла конфигурации приведён в листинге ниже. Для примера взята плата SE8351-00, описание аппаратной части которой уже содержится в ядре MULTEX-ARM (см. ARCH_BOARD_SE8350_00 в файле archdef.h). Описание такой платы может быть сгенерировано автоматически, а значит достаточно указать её название. Остальные параметры будут подгружены системой в список после загрузки файла. Параметр backlight-pwm (выбор канала ШИМ для подсветки дисплея) показан для примера. Но, при желании, можно изменить этот параметр на единицу, чтобы перенаправить управление подсветкой на другой вывод процессора.

Заметки
Некоторые параметры конфигурации используются не во всех проектах. При этом система производит поиск всех системных параметров и выводит в консоль предупреждения о параметрах, которые не были найдены. Такие системные параметры конфигурации, как линии системных светодиодов (см. ARCH_LED_SYSTEM и ARCH_LED_DISK), можно указывать с пустым полем value, чтобы убрать предупреждения из лога загрузки, выводимого в консоль.
#MAPSTORE
#     parameter; type;      value;  desc.
#--------------------- ------------------
     board-name;  STR;  SE8351-00;
  backlight-pwm;  INT;          0;   PWM0
     led-system;  STR;
       led-disk;  STR;

Файл сборки Makefile

Makefile — это файл, содержащий набор инструкций, используемых утилитой make в инструментарии автоматизации сборки. В данном разделе описаны параметры такого файла, используемого при сборке MULTEX-ARM.

При создании директории нового проекта в неё следует скопировать уже имеющийся Makefile из аналогичного проекта, например из одного из примеров на сайте set-code.ru. Либо данный файл можно составить самостоятельно. Пример готового Makefile приведён в конце раздела. Основная (универсальная для всех проектов) часть инструкций функции и цели сборки, находится в файле include/all/multex.mk, поставляемом вместе с библиотеками MULTEX-ARM. Этот файл следует включить в Makefile проекта после определения всех переменных.

include $(MULTEX_PATH)/include/all/multex.mk

Остальные инструкции, уникальные для каждого проекта, следует записать в Makefile самостоятельно, либо изменить уже имеющиеся. Ниже приведено описание используемых в Makefile уникальных инструкций.

Имя выходного файла

Результатом сборки проекта является исполняемый бинарный файл, либо библиотека. Имя собираемого файла можно настроить. Указывать имя файла следует без расширения. Расширение будет добавлено в зависимости от выбранной цели сборки. Для проектов пользователя рекомендуемое имя — multex, так как именно такое имя указано по умолчанию в используемых загрузчиках. Для определения имени выходного файла следует записать инструкцию:

PROJ_NAME = multex

Определение флагов компилятора

Компиляция файлов исходных кодов осуществляется с оптимальным набором флагов компилятора. Пользовательские флаги компилятора могут быть добавлены при необходимости с помощью переменной USR_CFLAGS:

USR_CFLAGS =

Настройка многопоточной сборки

Компиляция файлов исходных кодов может выполняться в несколько потоков. Эта возможность реализована средствами утилиты make. По умолчанию сборка будет выполняться в 8 потоков. Количество потоков рекомендуется выбирать соответствующим количеству ядер процессора инструментальной машины и может быть изменено с помощью переменной STREAM_COUNT:

STREAM_COUNT = 8

Распределение памяти

В Makefile выполняется управление распределением памяти ОЗУ. При сборке итогового проекта линковщику передаётся значение адреса, по которому будет размещена запускающая процедура MULTEX-ARM. Данное значение размещается в переменной MX_TEXT. Это значение должно совпадать со значением записанным в загрузчике в качестве адреса запуска. Кроме того, в здесь же определяются значения адресов начала и конца ОЗУ. Они записываются в переменные DRAM_START и MEM_POOL_END соответственно и используются самой операционной системой для корректного выделения памяти. Ниже приведены адреса, записываемые в Makefile по умолчанию:

DRAM_START      = 0x40000000
MX_TEXT         = 0x48000000
MEM_POOL_END    = 0x80000000

Переменные DRAM_START и MX_TEXT одинаковы для большинства поддерживаемых плат и их значения можно не указывать в Makefile проекта. Значение адреса MEM_POOL_END соответствует 1 Гб используемого ОЗУ и должно быть изменено, если на плате установлена память меньшего объёма. Максимальные значения переменной MEM_POOL_END для разных объёмов памяти приведены ниже:

  • 1 Гб — 0x80000000
  • 512 Мб — 0x60000000
  • 256 Мб — 0x50000000
  • 64 Мб — 0x44000000

Настройка путей

В разделе Описание структуры проекта пользователя описана структура проекта по умолчанию. Такое взаимное расположение директорий учтено в файле include/all/multex.mk и если придерживаться структуры директорий по умолчанию, то дополнительная настройка путей не потребуется. Однако в некоторых случаях структуру проекта можно изменить или дополнить. Такие изменения взаимного расположения директорий проекта и MULTEX-ARM можно сделать с помощью инструкций описанных в этом разделе.

Путь к текущей версии MULTEX-ARM можно задать с помощью следующей инструкции:

MULTEX_PATH = ../multex_arm

Список исходных файлов проекта и директорий, содержащих исходные файлы можно изменить или дополнить с помощью инструкции SRC_PATHS. В процессе компиляции и сборки проекта утилита make пройдёт по указанным директориям и всем вложенным в неё и соберёт все исходные файлы. По умолчанию подключается одна папка src, лежащая в корне проекта. Если директории по умолчанию не существует, то она будет создана при первом запуске сборки. Все дополнительные файлы и папки следует добавить в переменную SRC_PATHS. Если используется директория по умолчанию — переменную добавлять не нужно. Пример определения пути к исходным файлам проекта:

SRC_PATHS = ./src

Путь к собираемому бинарному файлу или библиотеке следует задать, если он отличается от значения по умолчанию out. Указанная папка будет создана при сборке, если ещё не создана. Если используется директория по умолчанию — переменную добавлять не нужно. Пример определения пути к собираемому бинарному файлу:

OUT_PATH = ./out

В переменную INCLUDES по умолчанию помещается путь к заголовочным файлам MULTEX-ARM. Если в проекте используются дополнительные папки с заголовочными файлам их следует добавить к этой переменной, например:

INCLUDES += ../my_includes

При сборке библиотеки имеет смысл указать заголовочные файлы, которые будут скопированы в multex_arm/include. При этом сама библиотека копируется в multex_arm/lib. Например, для копирования двух заголовочных файлов библиотеки шрифтов можно записать:

OUT_HEADERS += src/fonts.h
OUT_HEADERS += src/fontsdefines.h

Для размещения заголовочных файлов копируемых библиотек в подкаталоге директории multex_arm/include следует указать имя подкаталога в переменной OUT_HEADERS_PATH. Иначе заголовочные файлы библиотек будут скопированы непосредственно в multex_arm/include. Например для копирования заголовочных файлов библиотеки в папку multex_arm/include/multimedia следует записать:

OUT_HEADERS_PATH = multimedia

Настройка подключаемых библиотек

К каждому проекту при сборке подключается набор библиотек. Часть библиотек (например, библиотеки ядра MULTEX-ARM) подключаются неявно, остальные подключаемые библиотеки нужно указывать в Makefile с помощью инструкции LIBRARIES. Все файлы библиотек MULTEX-ARM по умолчанию находятся в папке multex_arm/lib. Библиотеки пользователя рекомендуется помещать сюда же. Сборка ядра MULTEX-ARM возможна с минимальным набором библиотек. Их набор может варьироваться в зависимости от использования в проекте различных аппаратных модулей. Рекомендации по подключению конкретных файлов библиотек содержатся в описаниях подсистем операционной системы. Например, для подключения библиотеки аппаратной поддержки графики с поддержкой формата PNG следует указать:

LIBRARIES += -l_a20graph
LIBRARIES += -l_png -l_z

Подключение примеров и тестовых функций

В комплект поставки MULTEX-ARM входят файлы исходных кодов, содержащих примеры использования различных библиотек операционной системы. Для подключения этих функций к собираемому бинарному файлу следует добавить путь к одной из папок с примерами в переменную SRC_PATHS. Например, подключить примеры для процессора V3s можно с помощью следующей записи:

SRC_PATHS += $(MULTEX_PATH)/include/examples/v3s

Все подключенные тестовые функции можно вызывать из консоли Shell.

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

Пример написания Makefile

Ниже приведён пример простого Makefile для процессора V3s, который можно использовать в качестве основы для проектов пользователя:

#------------------------------------------
# Makefile сборки проектов и библиотек
# для запуска Multex-ARM на процессоре V3s
#   © ООО «Сэт Код», 2023 (set-code.ru)
#------------------------------------------
PROJ_NAME = multex
MX_TEXT = 0x41000000
MEM_POOL_END = 0x44000000
MULTEX_PATH     = ../multex_arm
LIBRARIES += -l_enet -l_tcp
include $(MULTEX_PATH)/include/all/multex.mk

Сборка проекта (библиотеки)

Файлы проекта вместе с библиотеками и ядром MULTEX-ARM собираются с помощью утилиты make из директории проекта. В результате сборки в проекте появится папка (по умолчанию out) с бинарным файлом (по умолчанию multex.bin), который следует скопировать на запоминающее устройство целевой платформы. Это и есть запускаемый файл проекта.

Сборка проекта осуществляется с помощью Makefile поставляемого вместе с библиотеками. В файле уже имеются специализированные цели сборки проектов, библиотек и объектных файлов. Ниже описаны основные цели сборки, имеющиеся в предоставляемом Makefile.

Вызов справки

Краткую помощь по целям сборки можно получить с помощью цели:

make help

Отладочная сборка

Для сборки отладочной версии проекта используется цель debug. В итоге такой сборки получается версия бинарного файла содержащая таблицу символов. При этом появляется возможность вызывать функции по имени из консоли. Кроме того, при компиляции файлов определяется макрос DEBUG, который можно использовать для отладочного вывода. Для отладочной сборки следует использовать цель:

make debug

Сборка поставочной версии

Для сборки поставочной версии проекта используется цель release. В такой версии не собирается таблица символов и определяется макрос RELEASE. Для сборки поставочной версии следует использовать цель:

make release

Сборка библиотек

Для сборки библиотеки и копирования её вместе с указанными заголовочными файлам в директорию MULTEX-ARM следует использовать цель:

make lib

Если пересборка библиотеки не нужна а нужно только скопировать итоговый бинарный файл библиотеки вместе с заголовочными файлами в директорию MULTEX-ARM, то можно использовать цель:

make copy

Прочие цели сборки

Очистка проекта от временных и объектных файлов выполняется с помощью цели:

make clean

Также реализована возможность компилировать объектные файлы из исходных по имени. Например для файла filename.c команда компиляции будет выглядеть так:

make filename.o

Запуск на целевой платформе

Для запуска собранного проекта на целевой платформе следует:

Для копирования файлов на карту памяти uSD через кардридер инструментальной машины можно воспользоваться целями сборки Makefile. Для копирования всех файлов из папки out:

make install

Для обновления только собранного бинарного файла:

make update

Для копирования файлов проекта на заранее подготовленный установочный диск:

make installer
Заметки
Для копирования файлов на загрузочную карту памяти uSD средствами Makefile следует предварительно указать переменную окружения DEVNAME, определяющую имя устройства в системе, на которое будет произведено копирование. Копирование файлов производится на первый том карты памяти. Монтирование нужного тома будет произведено средствами Makefile.
export DEVNAME=sda

Кроме того, бинарный файл можно заменить по сети на уже работающей целевой платформе. Для этого на ней должен быть запущен FTP-сервер. За запуск сервера отвечает параметр FTP_SERVER файла конфигурации. При подключении к серверу будет доступна файловая система целевой платформы и бинарный файл можно заменить стандартными командами FTP.

Параметры для соединения с запущенным FTP-сервером:

  • Адрес — параметр, указанный в IP_ADDRESS файла конфигурации.
  • Имя учётной записи — anonymous.
  • Пароль — gremlin.
  • Режим обмена — пассивный.