Pull to refresh

Как настроить Maemo 5(4) SDK и начать писать приложения под Windows/Linux/MacOS менее чем за полчаса!

Reading time12 min
Views6.1K
image

Уже нет смысла, я думаю, объяснять что такое Maemo и где он работает. Всем понятно, что это Linux, который сейчас работает на таблетках от Nokia и на новом Nokia N900. Но так как проект open-source, то думаю другим производителям ничто не мешает сделать свое устройство под этой платформой (кто знает, может появится HTC или Motorolla на базе Maemo).

Речь в этой статье пойдет о том как настроить окружение для разработки для Maemo.

Начнем с того, что сейчас существуют два типа SDK — текущий стабильный для Maemo5/4 (Fremantle/Diablo) и новый SDK, который сейчас в бете — MADDE.

Ну давайте начнем со стабильного (относительно и спорно, позже покажу почему) и текущего — Fremantle (на момент написания статьи но был «pre-final 2», теперь в «final»). Он базируется на Diablo и поэтому процесс установки и нструменты те же. И если вам нужен Diablo — инструкция подойдет эта, а далее я буду говорить только о Fremantle, подозревая что по желанию можно использовать Diablo.

Хорошо, предположим, что мы выбрали SDK Fremantle (MADDE я посвящу последующие статьи). У этого SDK есть один недостаток — он моно-платформенный. Он работает только под Linux x86 (желательно debian based, но не обязательно). Для счастливый пользователей этой системы существует простой путь для установки SDK нужно скачать скрипт с этой страницы и действовать согласно этой инструкции.

Что же делать, если рабочая система у нас Windows(самая популярная)/Linux x64/MacOs? Не отчаивайтесь. У вас и тут есть выбор. Самый легкий путь — это скачать отсюда виртуальный образ с настроенным окружением и в нем работать. Все предельно просто — качаем, запускаем из-под VMWare, QEMU, VirtualBox. Там уже стоит ESBox и SDK. Если вы не знаете как установить систему в виртуальной машине, можно подсмотреть в этой статье далее.

image
Ну и последний вариант — если Вы хотите разрабатывать приложения на своей родной платформе — нет проблем! ESBox (забыл представить — это Eclipse+плагины для разработки под Maemo5/4) умеет работать с виртуальной машиной. То есть получается, что вы пишите код в ESBox, он собирает это в виртуальной машине и запускает там, а результат отображается опять же в вашей родной системе. Виртуальная система работает «в тени». Идея прекрасна, не правда ли?

На деле все не так гладко в Windows, под Mac OS и Linux все работает как надо (надеюсь в скором будущем для Windows все отмеченные мною баги будут исправленны). Я столкнулся с несколькими неприятными моментами, плюс часть документации, которую можно найти в разных местах создана не Нокиа, а open source community и иногда встречаются неточности и несоответствия версий

Вот в этой статье далее пойдет речь о том как установить Maemo SDK под Windows (будут замечания, если процесс будет отличатся от Linux, Mac OS вариантов) и более того, я при вас это сделаю менее чем за пол часа. Всё видео и нотации к ним под катом.

Да кстати, это все можно установить не только для разработки, но и для того чтобы познакомится с Maemo не имея реального устройства.

Некоторым кажется, что процесс утсановки сложен и много букв. В действительности не так, просто я постарался описать как можно подробней. В действительности достаточно посмотреть видео, и если что-то непонятно — прочитать описание к этому видео.



UPD: На момент написания статьи образ виртуально системы был «PreFinal2», несколько дней назад вышла версия Final. Но инструкция остается полностью актуальна, так как для данного вида установки ничего не изменилось. Поменялось лишь содержимое образа виртуальной системы, с настроенным окружением maemo.

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

Итак шаг первы: установка и первичная настройка виртуальной машины:


Сслыка на HD YouTube версию.


Последовательность действий такова:
скачиваем Maemo Virtual Image с сайта (при переходе по ссылке необходимо принять лицензионное соглашение). Скачиваем файл «Maemo_Ubuntu_Intrepid_Server_SDK_Virtual_Image.zip». Это образ с некоторыми добавлениями, в частности:
Ubuntu Server 8.10 Intrepid Ibex
Maemo Host PC Connectivity release without GUI applications
Installation wizards for virtualization performance tools
Installer for Official VMWare Tools
Installer for Open VMWare Tools
Installer for VirtuaBox GuestAdditions

Плюс там установлены некоторые патчи.

Далее заходим на сайт VirtualBox и в секции Download скачиваем установщик под Вашу платформу. Ну и соответственно устанавливаем его со всеми параметрами по умолчанию (осторожно: во время установки VirtualBox отвалятся на время сетевые интерфейсы).

Потом распаковываем скачанный виртуальный образ Ubuntu в удобное для вас место (zip формат поддерживается всеми ОС прям «из коробки»).

Запускаем VirtualBox и создаем новую виртуальную машину, в качестве диска подключаем только что скачанный образ.

Запускаем виртуальную машину: логин и пароль: maemo.

запускаем инструмент ~/install_guest_additions_server.sh командой:
sudo /home/maemo/ToolsInstallers/install_guest_additions_server.sh


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


Шаг второй: установка и настройка ESbox+SDK для работы с виртуальной машиной.


Ссылка на HD версию на YouTube.


Заходим в настройки виртуальной машины и в секции «Сеть» меняем тип сетевого подключения с «NAT» на «Сетевой мост».
Вообще, нужно организовать кросс-шару между хост-системой и виртуальной системой. Схема шары такова:
image

Мы маунтим workspace ESbox'a (на схеме — это «C:\maemo\shared») на соответствующие папки на виртуальной машине, для того, чтобы SDK мог добраться до них для компиляции и запуска из виртуальной системы. Шара организована через smb-протокол.

Но для комфортной работы можно еще сделать обратную шару из виртуальной машины на хост машину, чтобы подключить заголовочные файлы из SDK и таким образом можно было их видеть из ESBox и задействовать автозавершение. Это не обязательно, но удобно.

Если будет сетевое подключение через NAT на виртуальной машине, то придется делать перенаправление 22 порта, поэтому проще сделать «Bridge» сеть, таким образом виртуальная машина появится в сети как отдельный экземпляр. Это даст возможность по сети с другого компа вести разработку (например повесить жене на компьютер этот виртуальный образ, а самому на буке кодить, зачем мощностям простаивать :-) или удаленно работать с виртуальной машиной (вариантов много)).

НО стоит учесть один момент. Сеть может такое не позволить или если рутер не сильно умный, то передача данных между хостом и виртуальной машиной может спокойно идти через интернет (через провайдера) — даже при небольшом трафике в таком случае могут быть жуткие тормоза. Поэтому не отбрасываю и вариант использования NAT Networking, инструкция по настройке перенаправлению портов можно найти здесь.

Далее необходимо скачать ESbox с этого сайта..
Необходимо скачать два файла:
esbox_2.0.0-R20091216-common.zip
esbox_2.0.0-R20091216-win32.win32.x86.zip — для Windows (или соответсвующий для вашей платформы).

R20091216 — номер доступной версии на момент написания статьи, естественно нужно качать последнюю.

Первый архив — это плагины и фичи, а второй платформо-зависимые файлы (выполняемые и сопутствующие).
Распаковываем оба файла в одну и ту же папку ( если например распаковать в C:\, то программа будет находиться в C:\ESBox), архив zip поддерживается всеми платформами без сторонних продуктов.

Запускаем распакованный ESBox и приступим к его первичной настройке.
Сначала нас спросят, где находится наше рабочее пространство (workspace). Рекомендую указать C:\maemo\shared. (В видео выбран неправильный каталог, но в субтитрах написан правильный путь, я позже за кадром поменял путь к workspace'у).
Ставим галочку, сообщая что это рабочее пространство по умолчанию, и больше не нужно спрашивать при запуске о его размещение.

Далее подключаем справку (не обязательно).
Сначала подключается on-line репозиторий справки, параметры при заполнении:
Name: Maemo Docs Libraray
Host: library.maemodocs.nokia.com
Path: /fremantle


Так же по желанию можно установить off-line помощь.
Для этого добавляем новый репозиторий:
Location: maemoide.nokia.com/downloads/fremantle

Выбираем нужные пакеты (в моем случае все), принимаем лицензионное соглашение и устанавливаем.

После этого закрываем ESBox.

Следующее действие только для пользователей Windows — установка X-server. Под Mac OS сервер идет «из коробки» и работает нормально (проверял). Для Linux необходимо установить Xephyr:
sudo apt-get install xserver-xephyr


Под Windows у вас есть выбор между XServer'ами. Разработчики Maemo SDK предлагают Cygwin/X, я предлагаю XMing. Оба работают одинаково (одинаково неправильно, смотри следующую главу).

Чтобы установить Cygwin/X, необходимо зайти на сайт cygwin.org и скачать файл по этой ссылке.

После этого запускаем инсталятор и добавляем три пакета: X11/xorg-server, X11/xinit, X11/xdpyinfo.
Внимание для пользователей Windows 7. Cygwin/X версии 1.7 падает из-за бага. Он связан с composition расширением (об этом подробней в четвертой шаге).

Чтоб установить XMing, скачайте установщик с sourceforge.net. Запустите установщик и действуйте согласно инструкции (я оставил все параметры по умолчанию).

Как по мне, так XMing установить проще и быстрее.

Далее необходимо настроить виртуальную машину, идем в настройки ESbox->Build Machines и выбираем в списке виртуальных машин VirtualBox.

В первой вкладке нужно изменить путь к выполняемому файлу Virtual Box (убираем лишние символы «xVM », если вы установили все по умолчанию, как я) и выбираем из списка нашу виртуальную машину.
Во второй вкладке настраиваем сетевые интерфейсы.
Для этого запускаем виртуальную машину и заходим на нее: логин/пароль — maemo/maemo.
набираем команду:
ifconfig

Команда выведет нам адрес виртуальной машины, а в выпадающем списке интерфейсов для хост машины, выбираем соответствующий IP адрес.
И обязательно нажимаем кнопочку «Apply».
Далее щелкаем по ссылке сверху «Click here for maemo installers».
Сначала устанавливаем Scratchbox.
Выбираем целевую платформу (Fremantle или Diablo). Соглашаемся на предложенный патч autoconfs'a, и перезагружаем виртуальную машину.

Опять щелкаем по этой ссылке и устанавливаем цели для Scratchbox (соответственно Fremantle или Diablo).
Тут необходимо принять лицензионное соглашение.
После установки целей будет предложено установить комерческие(закрытые) двоичные файлы от Nokia.
Это необходимый шаг для Fremantle.
Тут хитрое лицензионное соглашение, необходимо перейти по ссылке сверху, прочитать в броузере лицензионное соглашение, ввести код проверки и получить путь на deb-репозиторий. Вот этот путь нужно скопировать и ввести в соответствующее поле инсталятора.
После этого уже устанавливаются нужные пакеты.

Настройки сетевых ресурсов пока не трогаем, с этого мы начнем в следующей главе.

Шаг третий: окончание настройки и попытка собрать и отладить первое приложение.


Внимание: следующее видео предполагает, что вы сделали сетевой доступ к папке C:/maemo/shared и дали локальному пользователю права на изменение файлов.
Сетевой ресурс должен быть организован по протоколу Samba. Как это сделать на Windows/Linux/Mac Os вы можете легко найти в гугле.
Ссылка на HD версию на YouTube.


Заходим в настройки виртуальной машины во вкладку «Shared Folders» (смотри схемку выше). Проверяем пути и нажимаем кнопочку «Validate Machine».
ESbox попробует смонтировать C:\Maemo\shared в соответствующие каталоги на виртуальной машине и спросит имя пользователя и пароль для подключения (он их запомнит и больше спрашивать не будет).
Вот Mac OS и Linux все должно пройти без ошибок.
На Windows он выдаст сообщение, что все смонтировалось хорошо, но недоступно. Игнорируем это сообщение. Ну и потом выскочит исключение. Баг номер 1. Не обращаем на это внимание, просто проверим, что в Windows появилось два диска T и S (или другие, если вы изменили настройки).

Дальше создаем новый проект Maemo C++ -> Hello World.
ESbox попросит проверить установленные зависимости. Если вы запускаете первый раз, то он поставит несколько пакетов (у меня уже стоит).

Запускаем среду maemo, нажав на кнопочку с логотипом maemo. Будет предложено убрать не поддерживаемые параметры для запуска X-server (я пробовал ни на что они не влияют, но лучше согласиться ).
Если вы установили XMing по моей рекомендации, у вас ничего не запустится, то ничего страшного. Все равно работать оно как надо не будет, просто посмотрите видео. А инструкции по настройке ESbox для работы c XMing читайте в следующей главе.

На видео там куча значков сбилась в левом углу (у меня уже установлены виджеты), у вас будет только значок твиттера. Нажав на него снизу будет полоса прокрутки (это броузер запустится).
Это баг номер 2, как его обойти я опишу в следующей главе. Этот баг проявляется только под Windows, на Linux и Mac OS у вас все красиво должно отображаться (если нет, то смотри в конце этого шага).

Как вы видите, оконный менеджер не работает как нужно. Приложение «погода» показывается без заголовка.

Выключаем среду Maemo и закрываем руками X-server(еще один баг, ESBox не может закрыть X-server).

Теперь пытаемся собрать приложение, в качестве цели используем выбранный FREMANTLE_X86(Debug). И опс, ничего не происходит. У нас ошибка в консоли (не может найти скрипт) и исключение плагина (еще баг).
Не переживайте. Просто нужно выбрать другую цель сборки и все заработает, после этого будет собираться и цель, которая не собиралась. Я думаю это связано с тем, что не инициализируются какие-то начальные значения, а при переключении целей они заполняются.
После долгой отработки autoconf'a мы готовы запустить наше приложение.

Стартуем среду Maemo и запускаем в режиме отладки наше приложение.
Приложение остановится в точке останова, значит gdb работает как надо, но после выполнения на экране черным-черно. Так и должно быть. Это приложение имеет только один элемент управления в заголовке окна, но так как заголовков у нас нет(не запустился оконный менеджер, но об этом позже), то его не видно.

Для пользователей Mac OS и Linux все должно уже работать и правильно отображаться. Если у вас отображается также, то проверьте, чтоб не стояло опции -extension Composite при запуске X-server. Эта опция была в Diablo, а в Fremantle она не нужна.

Шаг четвертый, окончательный: настройка XMing, обходим баги и отлаживаем наше приложение.


Ссылка на HD версию на YouTube.


Сначала инструкция для тех, кто меня послушал и поставил XMing.
Заходим в настройки ESbox->X Server и меняем значения:

Command template to launch server: «C:\\Program Files\\XMing\\XMing.exe»
Additional PAth entries for server: "«C:\\Program Files\\XMing»


Теперь для всех видов иксов нужно дописать такие параметры:
+extension Composite +extension «Generic Events»


Запустим, должен запустится XMing.

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

Теперь разберемся, почему не отображается все правильно.
С Cygwin/X есть проблема, что matchbox (оконный менеджер на maemo) не может распознать, что установлено расширение composite на X-server. И не запускается. Результат — сбившиеся иконки и нет заголовков и всего прочего. Баг этот известен, но немного другой. Суть такова, что нужно проверить поддержку Cygwin 1.7 с Fremantle SDK.

Вроде написано , что вместо Cygwin 1.7 лучше использовать версию 1.5.25-15. Но старые версии Cygwin нельзя установить официальным установщиком (самая старая версия Xorg-server в официальном репозитории — xorg-server-1.6.5-1), а найти и скачать по быстрому у меня не удалось. Да и не факт что это решит проблему (описано было в багах падение, а не отсутствие поддержки composite extension). Если кто попробует, отпишитесь пожалуйста об успехах.

Второй вариант — это XMing. Тут у нас не поддерживается Generic Events (XGE) и он вообще падает с включенным расширением Composition. Без ошибок, просто молча падает. Дебажить его нет желания, тем более, что разработка его ушла уже очень далеко вперед, и судя по анонсам, в версии 7.5.0.14 это уже поправлено (последняя версия 7.5.0.16). Может и проблему с Composite Extension тоже поправили. Но в публичный доступ выкладываются версии с большим опозданием(сейчас лежит версия 6.9.0.31), и чтобы получить доступ к последним версиям, нужно получить донорский код (для этого нужно внести пожертвование в проект). Если бы я пользовался X сервером под Windows, то обязательно бы это сделал. Но моя основная платформа — Mac Os. Опять же, если у кого появится возможность проверить на последнем XMing — отпишитесь, очень интересно.
Да, кстати, в XMing можно добавить опцию -clipboard, чтоб задействовать буфер обмена.
Ну а теперь как же сделать, чтоб все работало.

Схема такая. Среда Maemo, запускается на виртуальной машине, но экран она должна использовать не тот, который ему передаст ESBox, а локальный. Локально будет запущен Xephyr (этот X-server, который встраивается в другой XServer (вложены, nested)). Экраном для XServer будет уже XMing/Cygwin. Получается между maemo средой и виндовым XServer теперь вставляем Xephyr на виртуальной машине.

Сделать это достаточно несложно.
Теперь отпустите паузу с видео, поехали дальше настраивать.

Заходим на виртуальную машину и устанавливаем Xephyr:
sudo apt-get install xserver-xephyr


Потом создаем скрипт для его запуска:
touch ./start1.sh
chmod a+x ./start1.sh
vim ./start1.sh


Естественно вместо vim можете использовать другой редактор: nano, mcedit.

Содержание скрипта будет выглядеть таким образом:
#!/bin/bash
export DISPLAY=192.168.1.152:2
Xephyr :2 -host-cursor -screen 800x600x16 -dpi 96 -ac -kb

Вместо 192.168.1.152 — укажите айпишник Вашей хост машины.
И запускаем скрипт, он должен выругаться, что не может подключится к экрану.
Запускаем XServer из-под ESbox и запускаем скрипт снова.
Должен появится вывод как у меня в консоль.
Чтоб завершить работу Xephyr, нажмите Ctr+C (для переключения между консолями в виртуальной машине, используйте комбинацию Alt+<стрелка врпаво/влево>).

Теперь нам нужно поправить зайти в scratchbox и поправить там скрипт запуска среды maemo, чтоб он отображался в локальном Xephyr-сервера, а не в нашем Xming.
/scratchbox/login
vim /usr/bin/af-sb-init.sh


в начале добавляем такую строку
export DISPLAY=127.0.0.1:2


Ну теперь запускаем Xming на Windows, запускаем наш скрипт для Xephyr на виртуальной машине и запускаем среду Maemo из ESbox.

Вот у нас почти рабочая Maemo (некоторые приложения все же не запустились, например браузер и аудиоплеер).

Теперь давайте запусти наш helloworld в режиме отладки, тут тоже немножко нужно изменить параметры. В переменные окружения нужно добавить такую строку:
DISPLAY=127.0.0.1:2

Для того, чтоб наше приложение тоже отображалось в Xephyr а не на XMing.
Как вы видите все работает как надо.

Кстати вы можете в менеджере приложений наставить всякого софта, как это сделал я и таким образом познакомится с системой.

Заключение.


Поздравляю Вас, если вы дошли до заключения.
Конечно мы получили не идеальное окружение, но оно работает.
Из основных недостатков:
при компиляции используется мощность виртуальной машины, а не полная мощность всего компьютера
отображение не так красиво и быстро работает, как должно
достаточно сложно настроить (общее время на видео 25 минут, но оно не учитывает время на загрузку пакетов)
среда Eclipse(ESBox) сама по себе не лишена недостатков (скорость, память, ошибки)

Но есть альтернатива — это MADDE. Эта SDK еще находится в разработке, но ее уже можно использовать.
Она кросс-платформенная. Требует минимум установки и существует поддержка этого SDK в Qt-creator'e (но пока экспериментально). На сегодняшний момент на MADDE можно писать приложения, но только имея реальное устройство. О том как установить и пользоваться MADDE я расскажу в последующих статьях.

В следующей статье я расскажу как написать Qt-приложени и собрать пакет, чтоб другие могли его установить.

Также жду ваших советов и соображений по поводу решения проблемы с XMing и Cygwin/X.

Приятного вам знакомства с Maemo.
UPD: как всегда, традиционно, английский вариант стаьи можно найти на моем личном блоге erudenko.com. Правда они появляются с некоторым запозданием (трудности перевода :-) ).
Tags:
Hubs:
Total votes 64: ↑54 and ↓10+44
Comments44

Articles