⌨ Labor omnia vincit ☮

aarch64: SoftIron Overdrive 1000

Posted in ARM, SuSE [ru] by anaumov on 13.07.2016

24 июня, во время openSUSE Conference 2016, Norman Fraser (Chief Executive Officer из компании SoftIron Ltd.) представил новую aarch64 серверную out-of-the-box систему. Overdrive 1000 привлек внимание многих и не только потому, что она продается с предустановленной openSUSE. По словам Нормана, это тчательно продуманная 64-битная ARM® developer-система с AMD Opteron A1100™ процессором. Многие разработчики хотят больше, чем могут предложить обычные development-board embedded системы. Все помнят обсуждение ARM как десктопной архитектуры после LinuxCon Europe в конце прошлого года.
Overdrive 1000Overdrive 1000 продается с openSUSE Leap 42.1, где уже установленны Apache Web-сервер, MySQL, PHP, Xen, KVM, Docker и openJDK. Таким образом, пользователи могут приступать к работе сразу же после загрузки ОС. Напомню, что для aarch64 существуют установочные образу практически для всех известных дистрибутивов. Пользователи tumbleweed, к примеру, могут скачать установочные образы отсюда.

Overdrive 1000 стоит всего $599. За эти деньги мы получаем:

  • Processor cores 4 x 64-bit ARM Cortex A57 Cores
  • 2 x RDIMM with 8GB DDR4 DRAM (можно увеличить до 64 GB)
  • 1 x 1GBase-T Ethernet
  • 2 x USB 3.0 ports
  • 2 x SATA 3.0 ports
  • 1 x 1TB HDD
  • Wirespeed 1Gbps throughput
  • Low and predictable energy consumption at 45 watts max

Собираюсь ли я заказывать эту систему? Однозначно ДА! Docker уже поддерживает aarch64 (раз, два), а это был пожалуй единственный вопрос, который меня беспокоил. Пока я работал только с 32-битными ARM системами, пора переходить на 64 😉

ARM cross compilation using OBS

Posted in ARM, SuSE [ru] by anaumov on 05.10.2012

Кросс-компиляция — это процесс компиляции кода для другой платформы, т.е. отличной от той, на которой она выполняется. Причин для кросс-компиляции может быть несколько, например скорость сборки, или просто недоступность той архитектуры, для которой нужно собрать проект. Я в двух словах расскажу о кросс-компиляции для ARM процессоров. Эта архитектура становится все более популярной.

Для знакомства с ARM я раздобыл RaspberryPi. Она представляет из себя так называемую development-board систему, на борту которой два USB, один 10/100 Ethernet, слот для SD/MMC/SDIO карт (с нее и стартует ОС), GPIO-разьем, HDMI, Broadcom BCM2835 чипсет, 256 MB памяти SDRAM и 700 MHz ARM11 процессор. Питание через microUSB (5V/700 mA). Стоит это удовольствие не больше стакана хорошего виски, т.е. порядка 20-30 € (в зависимости от цены за доставку). Думаю, что те, кто понимает, что речь идет о самой перспективной в мире архитектуре для мобильных устройств, не будут долго раздумывать о цене 🙂
Но вернемся к кросс-компиляции…

Первое, о чем хочется сказать – это о принципе кросс-компиляции и работы OBS вообще. Для того, чтобы скомпилировать и слинковать программу для другой архитектуры нам понадобиться окружение, в котором будет доступен инструментарий разработки для этой архитектуры. Недостаточно просто сказать компилятору, чтобы он транслировал, к примеру, С-код программы для ARM, потому что даже для hello world будет использоваться внешняя библиотека glibc. Линковка объектного ARM-кода с x86_64-библиотекой в лучшем случае приведет к segmentation fault. В этом плане принцип кросс-компиляции один в один повторяет принцип работы OBS: для каждого процесса сборки OBS создает специальное окружение. Это окружение представляет из себя изолированную псевдо-систему, внутри которой запускается свой компилятор или интерпретатор, который опрашивет “свои” библиотеки. Так, к примеру, OBS работает под управлением 64-битной openSUSE, а в build-окружении может быть 32-битная Debian-система.

> cat /proc/cpuinfo 
Processor       : ARMv6-compatible processor rev 7 (v6l)
BogoMIPS        : 697.95
Features        : swp half thumb fastmult vfp edsp java tls 
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xb76
CPU revision    : 7

Hardware        : BCM2708
Revision        : 0002
Serial          : 000000003f1fd8df

Ок, 32- и 64-битные архитектуры все же как-никак совместимы, а что делать в случае с ARM? Для этого добавляется еще один необольшой, но очень важный компонент сборки – эмулятор процессора qemu. Использование эмулятора позволит нам на x86_64 процессоре собрать бинарные пакеты для архитектур armv5el и/или armv7l.

Packaging

Давайте теперь соберем тестовый пакет для RaspberryPi. Создадим самый простой spec и какой-нибудь hello world на С. Я думаю, что примеры этих файлов давать не надо, выглядеть они дожны точно так же как и для x86_64 арихитектуры (никаких особых параметров компилятору передавать не надо, но не забудьте установить пакет qemu-linux-user). После этого в том же каталоге соберем rpm следующей командой:

> osc build --alternative-project=openSUSE:Factory:ARM armv5el armv5el *.spec --clean

Как вы видтие, для создания окружения мы используем “альтернативный проект” openSUSE:Factory:ARM, репозиторий armv5el для арихитектуры armv5el. Именно из этого репозитория будут установленны необходимые для ARM-сборки компоненты. Все окружение будет развернуто за пару минут. Если ошибок в коде и spec-файле нет, то мы получим rpm для armv5el. Если вы решили начать с чего-то посложнее, то не забывайте, что процесс портированая openSUSE на ARM еще не закончен. Не все библиотеки, доступные для i586 и x86_64, пересобранны для ARM. Полный список для armv5el тут.

То же самое касается сборки для других дистрибутивов: внимательный читатель уже наверное заметил, что мы собрали rpm, а на RaspberryPi по дефолту скорее всего будет Raspbian. В OBS пока не собранно достаточно deb-пакетов для создания ARM-окружения. По этой причине придется либо использовать alien, либо вручную распаковывать rpm и собирать deb. Для “поиграть” такой метод еще пойдет, но о непрерывной интеграции (в случае использования Raspbian на производстве) пока не может быть и речи.

В сети вы можете найти много мануалов о создании ARM-окружения при помощи различных toolchain. Описание создания такого окружения для кросс-компиляции занимает как правило около полстраницы. OBS создает это окружение одной командой, предоставляя разработчику готовые к инсталяции пакеты.