Документация
ОС Аврора 5.1.1

Scratchbox2

Scratchbox2 (sbox2 или sb2) — это набор инструментов для кросс-компиляции, предназначенный для облегчения разработки приложений для систем, встроенных в Linux.

В Linux при сборке программного обеспечения многие параметры определяются автоматически на основе хост-системы. Когда нужно собрать проект для встроенной цели (кросс-компиляция), большинство обнаруженных параметров оказываются неверны, так как конфигурация хоста не совпадает с конфигурацией встроенной цели. Scratchbox2 позволяет настроить «виртуальную» среду, которая заставит автоинструменты и исполняемые файлы «думать», что они напрямую работают на встроенной цели с её конфигурацией.

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

sb2 является частью пакета Аврора SDK и находится в /usr/bin/sb2 в chroot SDK.

Команда sb2

Синтаксис:

sb2 [OPTION]... [COMMAND] [PARAMETERS]

Если COMMAND не указана, запускается оболочка bash в среде scratchbox2.

Опции:

  • -v — вывести версию;
  • -L level — включить ведение журнала (levels= один из error,warning,notice,net,info,debug,noise,noise2,noise3);
  • -d — режим отладки: протоколировать все перенаправления;
  • -t TARGET — цель для использования, нужно использовать sb2-config -d TARGET, чтобы установить значение по умолчанию;
  • -e — режим эмуляции;
  • -m MODE — использовать режим сопоставления MODE;
  • -M file — читать правила отображения из файла;
  • -n NET_MODE — использовать сетевые правила NET_MODE;
  • -s DIRECTORY — загрузить сценарии сопоставления из альтернативного местоположения;
  • -Q BUGLIST — эмулировать ошибки старой версии scratchbox 1 (BUGLIST состоит из букв: x включает эмуляцию ошибок проверки прав доступа);
  • -O options — установить параметры для выбранного режима отображения (options — это строка, зависящая от режима);
  • -R — использовать смоделированные root-права (активирует подсистему Vperm);
  • -U UID.GID — использовать UID и GID в качестве владельца и группы «неизвестных» файлов (для всех файлов, которые неизвестны подсистеме Vperm);
  • -p — не симулировать специальные привилегии FS пользователя root, когда активна опция -R;
  • -S file — записать информацию о сеансе в файл;
  • -J file — не создавать новую сессию; присоединиться к существующей (см. - S);
  • -D file — удалить старый сеанс (см. - S). Предупреждение: действие не проверяет, используется ли сеанс в данный момент!
  • -P file — распечатать все журналы, относящиеся к постоянному сеансу (см. - S);
  • -W dir — использовать dir в качестве каталога сеанса при создании сеанса (dir должен быть абсолютным путём и не должен существовать. Длинные пути здесь могут вызвать проблемы с операциями с сокетами);
  • -c — при создании сеанса также создать личную копию target_root (roottrap). Следует обратить внимание, что это может работать очень медленно, в зависимости от размера orig.target_root;
  • -C dir — при создании сеанса создать копию dir и использовать её в качестве target_root (roottrap);
  • -T dir — использовать dir в качестве tools_root (переопределяя значение из конфигурационного файла);
  • -u — отключить автоматическое обновление конфигурации;
  • -g — создать новый сеанс с setsid(); полезно при выполнении команд в фоновом режиме;
  • -G file — добавить номер группы процессов в файл;
  • -b dir — создание графиков и сводок журналов в каталоге dir (подразумевается -L info, графики создаются с помощью sb2-logz и dot, если доступен пакет graphviz);
  • -B dir — как -b, но также включает данные учета процессов. (Может потребовать специальных разрешений, потому что используется системный вызов acct(2));
  • -q — тишина; не выводить подробности отладки на стандартный вывод и т. д.;
  • -N — не удалять каталог сеанса, даже если сценарий sb2 не может войти в сеанс;
  • -x OPTIONS — указать дополнительные опции для sb2d.

Опции sb2-init

Параметры sb2-init означают:

  • -d — сделать указанную цель целью по умолчанию;
  • -L — опции компоновщика;
  • -C — параметры компилятора;
  • -c — какой эмулятор QEMU использовать;
  • -m — какое отображение использовать по умолчанию;
  • -n — не собирать libtool;
  • -N — не делать локализацию для цели;
  • -t — расположение инструментов сборки.

Использование Scratchbox2

Создание простой программы на C

Код программы-примера расположен в ~/src/hello.c. Данный файл создаётся следующим образом:

mkdir ~/src
cat <<EOF >~/src/hello.c
#include <stdio.h>
int main(int argc, char **argv)
{
   printf("Hello World\n");
   return 0;
}
EOF

Компиляция данной программы:

sb2 gcc ~/src/hello.c -o ~/src/hello

Результат:

 sb2: Error: No target specified and none set as default, aborting.

Когда sb2 запускается, ему нужно знать, где взять заголовочные файлы и библиотеки и какую архитектуру и кросс-компилятор использовать. Это называется целью (target). SB2 может быть настроен для работы с несколькими именованными целями.

Использование нескольких целей

Можно использовать несколько целей с SDK. Чтобы выполнить какое-либо действие для конкретной цели, необходимо добавить опцию -t:

sb2 -t <target> ...

Чтобы перечислить все установленные цели, можно использовать:

sb2-config -l

Установка цели по умолчанию:

sb2-config -d <target>

Когда цели создаются, информация о цели помещается в каталог ~/.scratchbox2/, поэтому для удаления цели можно просто удалить каталоги оттуда:

rm -r ~/.scratchbox2/<target_name>

Следует уточнить, что если каталог ~/.scratchbox2/ находится внутри виртуальной машины Build Engine, то полный путь будет /home/mersdk/.scratchbox2.

Если работа осуществляется с Platform SDK, который устанавливается в домашнюю директорию пользователя, то полный путь к ~/.scratchbox2/ будет содержать путь к домашней директории, где установлен Platform SDK.

Сборка пакетов для ОС Аврора средствами sb2

Сначала нужно запустить виртуальную машину Аврора SDK.

Теперь можно установить все зависимости сборки, необходимые для программного обеспечения. Рекомендуется объявить их в файле спецификации (.spec), чтобы они автоматически устанавливались при сборке пакета с помощью команды mb2. Для этого примера он состоит только из CMake.

Вход в систему с помощью SSH:

sfdk engine exec

Прежде чем идти дальше, необходимо проверить, что всё правильно установлено и что вход выполнен на правильную машину. Можно запустить следующую команду:

sdk-assistant list

Она должна вывести список целей, аналогичный следующему:

AuroraOS-armv7hl
AuroraOS-i486

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

Комплекты armv7hl и aarch64 используются для мобильных устройств, i486 и x86_64 — для эмулятора.

В примере используются оба, поэтому нужно установить CMake для обоих целевых типов. Это достигается с помощью следующих двух команд:

sb2 -t AuroraOS-armv7hl -m sdk-install -R zypper in cmake
sb2 -t AuroraOS-i486 -m sdk-install -R zypper in cmake

Сборка пакетов

Пакет можно собрать под целевую платформу. Если настроен файл спецификации, команды просты:

mb2 -t AuroraOS-i486 build
mb2 -t AuroraOS-armv7hl build

После завершения сборки можно найти пакеты RPM в каталоге RPMS. Если нужно собрать проект вручную, следует просто обернуть собственные команды сборки sb2 следующим образом:

sb2 -t AuroraOS-i486 -m sdk-build cmake [cmake options]
sb2 -t AuroraOS-i486 -m sdk-build make

Теперь можно выйти из машины сборки.

exit

Дополнительно о командах для сборки проектов можно прочитать в документации о командах для машины сборки.

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.