2008-05-22

Первый шаг к разработке для maemo

Чтобы начать писать что-то под maemo, надо принять как данность, что без на Linux - никак. Основной инструмент - среда кросс-компиляции Scratchbox, которая после инсталляции maemo-SDK получает два окружения - CHINOOK_X86 и CHINOOK_ARMEL. Окружения - суть одно и то же, что и набор приложений на таблетке (даже нокиевские бинарники ставятся), плюс утилиты для компиляции и отладки.

Карта отладки следующая: сначала компиляем и запускаем под X86, когда все заработает, берем ARMEL и делаем тоже самое, и, чтобы убедиться окончательно - через SSH на устройстве, дабы проверить на целевом hardware.

Самое удобное - это использовать Debian или Ubuntu, хотя можно и другие дистрибутивы (актуально, если вы любите все делать руками, благо процесс инсталляции хорошо документирован). Я, как пользователь треклятого Windows, поставил виртуальную машину. Тут есть два пути: первый - поставить Debian, например в VirtualBox. Второй, если вам по душе VmWare - то все проще, к нему есть имидж. Может быть, это даже правильнее - там уже все установлено, и, самое интересное - есть окружение не только для chinook (OS2008), но и bora (OS2007). Чтобы пользоваться этим имиджем, не надо покупать VmWare Workstation, достаточно бесплатного VmWare Player-а.

Правда, инсталлятор VirtualBox весит 17Мб, а VmWare Player - 174Mb. С другой стороны, учитывая, сколько придется еще качнуть, это мелочь.

Итак, несколько замечаний по установке, если вы решили не брать готовый имидж.
  1. Скачайте DVD с .iso debian, причем потребуется первый и третий, подключите первый диск прямо имиджем к виртуальной машине (зверски быстрее, чем прямой доступ к DVD, не тратьте зря болванку!), и ставьте. Не хотите качать третий диск ради одного пакета - качайте i386-пакет здесь и потом инсталлируйте при помощи dpkg -i.
  2. Создавая виртуальную машину, выделите ей ~400Мб памяти, субъективно ускоряет процесс.
  3. Инсталлятор принудительно ломится за апдейтами на security.debian.org и если в tasksel вы выбрали список задач по умолчанию, это грозит вытягиванием жирных апдейтов к openoffice. Конечно, наверное есть правильный способ (через параметры инсталлятора), но я просто отключил виртуальную сетевую карту после определения и распознавания сети (учтите, если вы выбрали NAT - а именно он стоит по умолчанию в настройках виртуальной сетевой карты - то просто обязаны выбрать DHCP в гостевой ОС, иначе ничего не заработает) . Это делается через меню окна виртуальной машины - Устройства|Сетевые адаптеры|Адаптер 0
  4. Для гостевых расширений VirtualBox потребуется поставить пакеты с исходниками ядра (как минимум - linux-kbuild-2.6.18). Мелочь, но приятно, когда курсор не надо освобождать по нажатию на специальную клавишу (правый Ctrl по умолчанию), а также можно пользоваться общим буфером обмена.
  5. Не забудьте поставить некоторые пакеты, которые могут пригодиться:
    apt-get install automake autoconf, если исходники пакета приехали вам без скрипта configure, однако в каталоге есть файлы configure.ac (configure.in) и autogen.sh. Да и вообще, autotools рекомендуется при сборке пакетов в maemo.
Итак, машина есть. Теперь надо запастись высокоскоростным интернетом (предстоит качать около 300-400 Mb), и приступать к установке scratchbox. Все описано здесь: http://repository.maemo.org/stable/chinook/INSTALL.txt, надо только не полениться и прочитать. В двух словах:


wget http://repository.maemo.org/stable/chinook/maemo-scratchbox-install_4.0.1.sh
chmod a+x maemo-scratchbox-install_4.0.1.sh
sudo ./maemo-scratchbox-install_4.0.1.sh


после установки надо добавить себя в список пользователей scratchbox-а:

/scratchbox/sbin/sbox_adduser yes

чтобы система поняла, что вы теперь в группе sbox, можно отлогиниться и подлогиниться вновь (для продвинутых - замените это действие на newgrp sbox). Дальше попробуйте:

/scratchbox/login

если оно вас пустило - значит треть дела сделана. Жмем Ctrl-D и ставим maemo-sdk:

wget http://repository.maemo.org/stable/chinook/maemo-sdk-install_4.0.1.sh
chmod a+x maemo-sdk-install_4.0.1.sh
./maemo-sdk-install_4.0.1.sh


в процессе оно спросит про то, какое окружение вы хотите. Если не знаете - выбирайте 4 -ый максимальный вариант, хуже не будет. И бинарники нокиевские вы тоже хотите, не отказывайтесь, набирайте "I agree" после прочтения лицензии.

Третья фаза, завершающая. Для отображения разработчики рекомендуют пользовать специальный X-server xephyr, который "отличается высокой скоростью". На наше счастье, в Debian это чудо есть бинарным пакетом. Монтируйте третий DVD и ставьте, примерно так:

apt-cdrom add
apt-get update
apt-get install xserver-xephyr


Теперь из своего любимого X window manager-а запускаете X-term:

$ export DISPLY=:0
$ Xephyr :2 -host-cursor -screen 800x480x16 -dpi 96 -ac -extension Composite &


Появится окошко Xephyr-а, пока пустое. Это нормально. Обратите внимание, что таким образом из одной X-сессии вы запустили другую, у вас теперь два дисплея! Выставляя переменную окружения DISPLAY в значение :0 или :2 можно запускать приложения двух разных X server-ах. Об этом надо помнить и в scratchbox-е:

$ /scratchbox/login
[sbox-CHINOOK_X86:~] > export DISPLAY=:2

[sbox-CHINOOK_X86:~] > af-sb-init.sh start

Скрипт af-sb-init.sh - это запуск избранных сервисов таблетки на вашем Debian из-под Scratchbox-а. Обращаю внимание, именно избранных - запустится далеко не всё. В процесее загрузки вас по-всячески обругают. Это ничего, главное - что в окошке Xephyr-а появился hildon-овский стол. Он слегка не похож на тот, что на таблетке, но не смущайтесь: если вы можете запустить приложение с контактами через меню - у вас все запустилось.

Кстати, не вздумайте запускать Xephyr после логина в scratchbox. Это - самая распространенная ошибка ;) Запускайте его строго снаружи, перед /scratchbox/login.

Распространенные проблемы:
  1. You must close your other sessions first. Наш ответ: sb-conf killall. Если не помогает - ищем ps xa | grep scratch и киляем уже по kill -9 .
  2. Забываю команды scratchbox. Наш ответ: sb-menu. И будет, как make menuinstall в ядре linux :)
Что дальше? Хороший вопрос. Хороший ответ: нужна документация. Она делится на три больших категории:
Думаю, очевидно, что разыскивая как делаются какие-то определенные вещи, надо перебирать все источники по-очереди. Общие знания, щедро приправленные ссылками, находятся в официальной части для разработчика.

Без исходников тяжело, поэтому остановлюсь на способах их добывания отдельно. Можно качать и распаковывать тарболлы, но удобнее поручить это занятие менеджеру пакетов. После установки Scratchbox-а у нас образовался второй файл с репозиториями пакетов. Берем файл

/scratchbox/users/<ваш_логин>/targets/CHINOOK_X86/etc/apt/sources.list

(не забывайте про такой же, но для CHINOOK_ARMEL)

дописываем туда несколько строчек и получается приблизительно так:

deb http://repository.maemo.org/ chinook free non-free
deb-src http://repository.maemo.org/ chinook free
deb file:/home/id/maemo-sdk-nokia-binaries_4.0.1 chinook explicit
deb-src http://repository.maemo.org/ os2008 free non-free
deb-src http://repository.maemo.org/rtcomm/ chinook free


апдейтим базу пакетов (из-под scratchbox-а, разумеется!): apt-get update. Далее:

cd && mkdir work-maemo && cd work-maemo
apt-get source maemo-examples


После этих манипуляций apt-get стащит для нас из репозитория пакет с примерами и услужливо распакует исходники в отдельный каталог.

cd maemo-examples-2.0/
make


Если у вас все настроено правильно - соберется туча примеров к туториалу. Можно попробовать запустить их:

$ run-standalone.sh ./example_abook

(Если опустить run-standalone, то не подсоурсятся нужные переменные окружения и приложение не запустится)

К вопросу об избранных приложениях. Типичный пример - example_alarm - после запуска сообщит вам, что имеет место быть ошибка 6. Эта ошибка возвращается на вызов функций библиотеки libalarmd, если собственно сам демон не запущен. А он и действительно не запущен: нет его в af-sb-init.sh. Что же делать? Сам бинарник alarmd есть, поэтому можно выйти из ситуации вполне тривиально:

run-standalone.sh alarmd &
run-standalone.sh ./example-alarm


(Хорошим такой прием не назовешь, более правильный способ я опишу в следующих сериях)

Те примеры, которые есть на сайте maemo.org тоже можно использовать (путем копирования текста из html-страницы в любимый текстовый редактор), но надо давать себе отчет в том, что в Makefile-ах придется ручками расставить табуляции, которые навсегда пропадают в файлах html-страниц. Лучше ищите в конце ссылку на то, как получить их через анонимный svn.

Ну вот на сегодня и всё... так сказать, happy maemo hacking!

2 комментария:

Анонимный комментирует...

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

id комментирует...

ага, точно, плевый. требуется переписать драйвер USB, я правильно понял?..