Карта отладки следующая: сначала компиляем и запускаем под X86, когда все заработает, берем ARMEL и делаем тоже самое, и, чтобы убедиться окончательно - через SSH на устройстве, дабы проверить на целевом hardware.
Самое удобное - это использовать Debian или Ubuntu, хотя можно и другие дистрибутивы (актуально, если вы любите все делать руками, благо процесс инсталляции хорошо документирован). Я, как пользователь треклятого Windows, поставил виртуальную машину. Тут есть два пути: первый - поставить Debian, например в VirtualBox. Второй, если вам по душе VmWare - то все проще, к нему есть имидж. Может быть, это даже правильнее - там уже все установлено, и, самое интересное - есть окружение не только для chinook (OS2008), но и bora (OS2007). Чтобы пользоваться этим имиджем, не надо покупать VmWare Workstation, достаточно бесплатного VmWare Player-а.
Правда, инсталлятор VirtualBox весит 17Мб, а VmWare Player - 174Mb. С другой стороны, учитывая, сколько придется еще качнуть, это мелочь.
Итак, несколько замечаний по установке, если вы решили не брать готовый имидж.
- Скачайте DVD с .iso debian, причем потребуется первый и третий, подключите первый диск прямо имиджем к виртуальной машине (зверски быстрее, чем прямой доступ к DVD, не тратьте зря болванку!), и ставьте. Не хотите качать третий диск ради одного пакета - качайте i386-пакет здесь и потом инсталлируйте при помощи dpkg -i.
- Создавая виртуальную машину, выделите ей ~400Мб памяти, субъективно ускоряет процесс.
- Инсталлятор принудительно ломится за апдейтами на security.debian.org и если в tasksel вы выбрали список задач по умолчанию, это грозит вытягиванием жирных апдейтов к openoffice. Конечно, наверное есть правильный способ (через параметры инсталлятора), но я просто отключил виртуальную сетевую карту после определения и распознавания сети (учтите, если вы выбрали NAT - а именно он стоит по умолчанию в настройках виртуальной сетевой карты - то просто обязаны выбрать DHCP в гостевой ОС, иначе ничего не заработает) . Это делается через меню окна виртуальной машины - Устройства|Сетевые адаптеры|Адаптер 0
- Для гостевых расширений VirtualBox потребуется поставить пакеты с исходниками ядра (как минимум - linux-kbuild-2.6.18). Мелочь, но приятно, когда курсор не надо освобождать по нажатию на специальную клавишу (правый Ctrl по умолчанию), а также можно пользоваться общим буфером обмена.
- Не забудьте поставить некоторые пакеты, которые могут пригодиться:
apt-get install automake autoconf, если исходники пакета приехали вам без скрипта configure, однако в каталоге есть файлы configure.ac (configure.in) и autogen.sh. Да и вообще, autotools рекомендуется при сборке пакетов в maemo.
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
чтобы система поняла, что вы теперь в группе 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.
Распространенные проблемы:
- You must close your other sessions first. Наш ответ: sb-conf killall. Если не помогает - ищем ps xa | grep scratch и киляем уже по kill -9
. - Забываю команды scratchbox. Наш ответ: sb-menu. И будет, как make menuinstall в ядре linux :)
- Официальная - http://maemo.org/development/documentation/
- Вики от коммьюнити - http://maemo.org/community/wiki/
- Собственно, сами исходники maemo и примеров
Без исходников тяжело, поэтому остановлюсь на способах их добывания отдельно. Можно качать и распаковывать тарболлы, но удобнее поручить это занятие менеджеру пакетов. После установки 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) какойто референс плюс пример скрипта(ну если есть а там расчехлюсь) на С желательно но всеравно вприципи скипт то плевый должен быть
ага, точно, плевый. требуется переписать драйвер USB, я правильно понял?..
Отправить комментарий