Работа с Gumstix Overo
Введение
Компания Gumstix является производителем компьютерных модулей малого размера. Управление модулем осуществляется с помощью операционной системы Linux Angstrom, но при этом на модуль можно установить любую операционную систему, поддерживающую архитектуру ARM.
Компания производит две линейки компьютеров — Overo, базирующийся на Texas Instruments OMAP, и Verdex PRO, базирующийся на Marvell XScale.
Для решения поставленных передо мной задач был куплен модуль Overo Fire с интерфейсной платой Summit, но описанные ниже действия применимы к любому представителю серии Overo.
В данной статье будут рассмотрены основные моменты, связанные с подготовкой модуля к работе и разработкой простейшего ПО.
1. Начало работы
1.1 Подготовка
При покупке компьютерных модулей Gumstix Overo следует учитывать, что сам по себе модуль не предоставляет практически никаких портов для подключения периферии, кроме того, консольный порт и питание также выведены через интерфейсную плату. Gumstix производит несколько различных интерфейсных плат, потому при её выборе надо отталкиваться от задач, которые ставятся перед конечным устройством. В связи с этим мною была выбрана интерфейсная плата Summit, содержащая в себе два USB-разъема, HDMI-разъем, звуковые In и Out, консольный порт для управления компьютерным модулем и 40-пиновый разъем с выведенными на него портами I2C, UART, SPI и т.д. Фотография устройств в разобранном виде представлена на рисунке 1.
Рисунок 1 — Overo Fire COM и плата Summit (слева направо: антенны для Wi-Fi и Bluetooth, компьютерный модуль Overo Fire, интерфейсная плата Summit)
Для начала работы требуется состыковать Overo Fire и Summit. Для этого на интерфейсной плате есть два 70-пиновых разъема, являющихся ответной частью для таких же разъемов на компьютерном модуле. В них и требуется поместить модуль, слегка придавив до щелчка. В комплекте также идут пластмассовые клипсы, служащие для более надежного соединения интерфейсной платы и модуля. Фотография соединенных Overo Fire и Summit представлена на рисунке 2.
Рисунок 2 — Состыкованные Overo Fire и Summit.
1.2 Подключение к компьютеру-хосту
Для подключения Overo Fire к компьютеру понадобится кабель MiniUSB. Сбоку на интерфейсной плате есть порт, промаркированный как «Console» — туда и подключается кабель. На плате Summit консольный порт находится на стороне, противоположной разъему питания, рядом с кнопкой Reset.
Внимание! Питание на плату пока что подавать не следует.
После подключения платы к компьютеру-хосту в списке устройств появится новое. В ОС семейства Linux это устройство отображается как /dev/ttyUSB*. Подключение к нему возможно, как к обычному COM-порту. В примере используется программа kermit из пакета ckermit.
cd /dev
kermit -l ttyUSB0
В kermit необходимо произвести настройки перед подключением к устройству. Для этого вводим следующие команды:
> set speed 115200
> set flow-control none
> set carrier-watch off
> connect
После выполнения этих операций можно подать питание на плату. Должна начаться загрузка устройства с выводом всей загрузочной информации в терминал. Окончание загрузки — приглашение на ввод логина (root по умолчанию).
2. Создание ПО на базе Overo Fire
В подготовке для разработки ПО на базе компьютерного модуля Overo можно выделить следующие шаги: сборка системы со всеми необходимыми пакетами, базовая настройка системы, разработка кода на машине-хосте и компиляция кода на модуле с использованием native-средств.
2.1 Сборка системы
Для сборки операционной системы используется среда для кросс-компиляции OpenEmbedded. Подробно процесс сборки системы и создания загрузочной SD-карты рассмотрен по ссылкам [1] и [2], потому не имеет смысла на этом останавливаться, стоит только сделать несколько ремарок.
- Убедитесь, что у вас свободно минимум 40 Гб в том случае, если собираете систему без графической оболочки. В противном случае понадобится ещё больше.
- Используйте SD-карты размером 2 и более гигабайта.
- В репозиториях зачастую попадаются некорректные сценарии сборки. Если таковое случилось — посмотрите, какой именно пакет вызвал проблему и поищите пути решения. За время работы с платой я практически после каждого обновления репозитория сталкивался с битыми сценариями, но ещё ни разу не было такого, чтобы проблема не решалась.
- Сборка занимает длительное время. На Dell Latitude E5500 сборка образа omap3-console-image занимала около 15 часов.
- В том случае, если требуется заново установить систему на SD-карту, обычно хватает форматирования раздела с корневой файловой системой и повторной распаковкой на нее образа, но если произошло обновление ядра — потребуется замена uImage.bin в загрузочном секторе на обновленную версию.
- Первая загрузка может занять довольно длительное время.
2.2 Настройка системы
К настройкам системы отнесем настройку Wi-Fi, поскольку он является достаточно полезным инструментом при разработке ПО на компьютере-хосте — с его помощью можно копировать новый исходный код на компьютерный модуль по сети, не выключая сам модуль и не вынимая из него SD-карту. Кроме того, через Wi-Fi можно обновить систему либо доставить нужные пакеты. Для запуска Wi-Fi потребуется совершить изменения в двух файлах: /etc/network/interfaces и /etc/wpa_supplicant.conf. Для этого совершаем следующие действия:
- Вводим команду
nano /etc/network/interfaces
- Находим секцию под следующим текстом:
# You will also need to create a /etc/wpa_supplicant.conf file:
# Copy / paste the results of this command into that file :
# wpa_passphrase myssid mypasswordhere
- Меняем закомментированную секцию на приведенную ниже (исправлена проблема с некорректным названием драйвера)
iface wlan0 inet dhcp
pre-up wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf -B
down killall wpa_supplicant
- Сохраняем комбинацией клавиш CTRL+O, выходим.
- Вводим команду
cp /etc/wpa_supplicant.conf /etc/wpa_supplicant.conf.bak
- Вводим команду
nano /etc/wpa_supplicant.conf
- Меняем содержимое на приведенное ниже (настройки для шифрования WPA2 Personal):
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
eapol_version=1
ap_scan=1
fast_reauth=1network={
ssid="your_ssid"
proto=WPA RSN
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP
scan_ssid=1
psk="your_wpa_key"
priority=10
}
- Меняем поля ssid и psk на имя точки доступа и пароль (справедливо для WPA2).
- Сохраняем и выходим.
- Вводим команду
ifup wlan0
. Должен быть вывод, похожий на такой:
ADDRCONF(NETDEV_UP): wlan0: link is not ready
ADDRCONF(NETDEV_UP): wlan0: link is not ready
ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
- Проверяем правильность настройки с помощью пинга.
После настройки Wi-Fi можно обновить систему с помощью следующих команд:
opkg update
opkg upgrade
Для установки какого-либо пакета из интернета используется команда opkg install <имя_пакета>
, к примеру, команда opkg install boost-dev
установит библиотеку Boost.
2.3 Установка Native SDK
Native SDK позволяет вести разработку приложений, используя не средства кросс-компиляции, а инструменты, установленные на компьютерном модуле. Это дает следующие преимущества:
- Не тратится время на создание сценария для OpenEmbedded.
- Незначительные изменения в код можно вносить прямо на модуле, в то время как после использования OpenEmbedded на выходе будет уже собранный пакет.
- Возможность сборки на модуле приложений, которых нет в репозиториях.
Native SDK включает в себя утилиту make, компиляторы под самые распространенные языки, etc.
Существуют следующие способы установки Native SDK:
- С помощью opkg.
- На этапе сборки системы.
Если система уже установлена и настроена, есть доступ в интернет и Wi-Fi, можно установить Native SDK, введя команду opkg install task-native-sdk
. Утилита opkg вычислит все необходимые зависимости, скачает и установит все пакеты.
В том случае, если система еще не собрана, можно создать собственный рецепт для OpenEmbedded, который будет на этапе сборки системы устанавливать в неё все необходимые пакеты. Для этого следует выполнить следующие шаги:
- Переходим в папку, где создана среда OpenEmbedded (~/overo-oe в моем случае):
cd ~/overo-oe
- Создаем папку для пользовательских рецептов:
mkdir user.collection
- Создаем папку recipes внутри пользовательской папки:
cd user.collection
mkdir recipes - Создаем папку для рецепта, к примеру, sdk-image:
cd recipes
mkdir sdk-image - Создаем файл рецепта, к примеру, sdk-console-image:
cd sdk-image
nano sdk-console-image.bb - Добавляем в файл текст, приведенный ниже:
require recipes/images/omap3-console-image.bb
PR="r0"
IMAGE_INSTALL += " \
cmake \
task-sdk-native \
"
Первая строка показывает, что за основу берется рецепт omap3-console-image, поле PR — номер ревизии, потом идет поле, указывающее на установку дополнительных пакетов. В данном случае устанавливается приложение для кросс-компиляции cmake и Native SDK, образ собранной системы будет называться по имени рецепта. Установка на SD происходит по аналогии с тем, как она описывается в [2], но для другого имени образа.
Внимание! Обратите внимание на пробелы в начале каждой строки после IMAGE_INSTALL, если их убрать — во время сборки произойдет ошибка.
2.4 Hello, world!
Для создания простейшего проекта под Overo Fire понадобится среда разработки Eclipse CDT[3]. Создаем новый пустой проект C++, внутри проекта создаем файл исходника main.cpp и пишем внутри код:
#include
using namespace std;
int main() {
cout << "Hello, strange Overo world!" << endl;
return 0;
}
После этого выбираем тип сборки Release и компилируем проект. Теперь в папке проекта появится папка Release, в которой содержится Makefile, автоматически сгенерированный Eclipse. Копируем всю папку с проектом на компьютерный модуль (я для этих целей использую FTP-сервер, поднятый на компьютере-хосте), далее, уже на модуле, переходим в папку <имя проекта>/Release, где выполняем следующие команды:
make clean
make
В папке сгенерируется исполняемый файл под текущую архитектуру.
Заключение
Компьютерные модули Gumstix благодаря своим размерам и быстродействию могут найти применение во многих областях, в частности, в качестве встроенных решений обработки мультимедиа (благодаря DSP-сопроцессору), бортовых компьютеров средств передвижения и т.д. Статья, представленная выше, показывает, что разработка под эти модули также отличается простотой, во многом благодаря установленной на модуле операционной системе.