Linux на борту: Разработка приложений для Nokia N800

Настройка и тестирование среды разработки

Заглянем внутрь телефона/Интернет-планшета/Web-камеры Nokia N800 и подробнее рассмотрим среду разработки, построенную на базе scratchbox.

Питер Сибах, автор, Независимый

Питер Сибах (Peter Seebach) работает с компьютерами много лет и постепенно приспособился. Хотя он до сих пор не понимает, почему мышку надо чистить так часто.



13.12.2007

Linux приобрел заслуженную популярность в мобильных и встроенных приложениях, благодаря его способности сокращаться до небольших размеров, необходимых для эффективной работы на компактных устройствах. Коммуникатор Nokia N800 пользуется этим и предлагает широкий спектр общей функциональности, которую может использовать разработчик. Однако моя цель в этом и следующем выпусках Linux на борту состоит не в том, чтобы обсуждать возможности, а в том, чтобы показать, как начать разрабатывать приложения, на реальном примере, используя возможности камеры устройства для создания Web-камеры.

Nokia N800 является весьма зрелым продуктом. Его предшественник Nokia 770 уже отличался развитостью по сравнению с более ранними устройствами, работающими под управлением Linux, а N800 явно разрабатывался с учетом пожеланий пользователей. Тяжелого корпуса больше нет, и вы можете доставать и прятать стилус во время работы с устройством в его нормальной конфигурации. (Недавно вышедшая модель Nokia N810 станет темой одной из следующих статей.)

Вместо одного разъема "RS-MMC" в N800 реализовано два разъема для обычных карт SD. Подставка встроена в устройство. Что еще более важно, увеличена оперативная память, flash-память и скорость процессора. Компания даже наклеила на экран защитную пленку. (Мой опыт обращения с защитными пленками поражает воображение — мне, кажется, удалось однажды поймать целого кота под защитную плёнку для сотового телефона — поэтому я очень высоко ценю эту особенность.) Ниже приведены некоторые наиболее важные технические характеристики и физические параметры N800.

Было улучшено множество характеристик, хотя завершено еще не все; например, код WiFi не поддерживает доверительные серверы корневых сертификатов, хотя пустое выпадающее меню для этого есть. Возможно, эта поддержка будет добавлена в следующей версии.

Одной из наиболее впечатливших меня функций 770 стала его среда разработки, построенная на базе scratchbox. Давайте посмотрим, как эта среда разработки действует на практике.

N800 оборудован встроенной камерой. Когда вы открываете ее, N800 запускает программу видеочата. Это приятно, но не то, что мне нужно. Мне нужна старая добрая Web-камера. N800 выглядит идеальной платформой для Web-камеры: он маленький, переносной, подключен к сети и (не забудьте) у него есть камера. Поэтому давайте вернемся к реальности и начнем работу с кодом.

Настройка

Я настроил в системе терминальную программу и получил права доступа root. На самом деле это необязательно; я это делаю потому, что мне нравится копаться в технике. Я загрузил терминальную программу из каталога приложений maemo Wiki (ссылку можно найти в разделе Ресурсы). Эта программа была разработана специально для 770, но она не привязана к конкретным версиям ядра и прочим мелочам, поэтому отлично работает.

Получение прав root немногим сложнее: вам нужно перевести устройство в режим "R&D", для чего используется утилита flasher, которую можно загрузить с сайта maemo. Утилиту flasher необходимо установить на компьютере под x86 Linux, который является предпочтительной средой для запуска scratchbox. Если у вас нет x86 Linux-компьютера, достаточно мощную для этого x86-машину можно купить по цене одного завтрака (а Linux вообще загрузить бесплатно). Я использовал платформу Kubuntu, но это не имеет особого значения; я делал то же самое под управлением SuSE, а пользователи maemo, по-моему, предпочитают Debian.

Scratchbox

Scratchbox (ссылку можно найти в разделе Ресурсы) - это инструментарий для кросс-компиляции, предназначенный для облегчения разработки приложений для встроенных версий Linux. Он также предоставляет полный набор инструментов для интеграции и кросс-компиляции всего дистрибутива Linux. Одной из наиболее примечательных отличительных особенностей Scratchbox, вероятно, является возможность эмуляции запуска двоичного кода целевой системы на локальной системе, даже если архитектуры этих систем отличаются; это делает кроссплатформенную разработку максимально удобной.

Инструкции по установке, представленные на сайте maemo, отлично работают. Для начала необходимо установить scratchbox. Предоставляемая программа установки отлично работает, хотя у нее есть одна странность - по умолчанию она зачем-то удаляет все уже загруженные вами файлы и загружает их снова. (Вы также можете установить пакет вручную, но я не вижу каких-либо причин для этого.)

Для установки scratchbox требуются права доступа root, но для работы с ним доступ root не нужен. Если вы используете программу установки scratchbox с сайта maemo, все, что вам нужно - это запустить /scratchbox/sbin/sbox_ctl start под пользователем root и /scratchbox/sbin/sbox_adduser <user> под вашей учетной записью. Выйдите из системы и зайдите обратно, чтобы вступило в силу членство в новой группе (группа sbox), и установка будет завершена.

Права доступа root вам больше не нужны. На самом деле программа установки maemo SDK (я использовал maemo-sdk-install_3.1.sh; обновление до новой версии 3.2 устанавливается из SDK) работает не под пользователем root, а под обычным пользователем с правами доступа к scratchbox. Шум, который вы только что услышали, был вздохом облегчения множества системных администраторов.

Мне нравится, что программа установки не требует привилегий root тогда, когда в них нет необходимости. Перед запуском программы установки maemo вам не нужно устанавливать цель; не обращайте внимания на сообщения о необходимости предварительного запуска sb-menu (если не обращать внимания, их можно вообще пропустить, программа установки сама со всем разберется). Хочу выразить отдельную благодарность дружелюбному сообществу канала #maemo сети Freenode, которые заверили меня в том, что эти сообщения об ошибках безобидны.

Если до этого вы не работали со scratchbox, ниже приводится небольшое введение. В прошлом кросс-компиляция порождала множество проблем. Основной из них была сложность отладки программ в целевой среде; если она отличается от среды разработки, это делает задачу настройки крайне нетривиальной.

Scratchbox решает эту проблему наиболее естественным образом: для запуска двоичного кода в среде используется эмуляция процессора. Учитывая, что скорость моего процессора примерно в восемь раз выше целевого процессора, это очень хорошее решение; время разработки экономится невероятно. Этот отличный пример прогресса технологий позволяет нам просто игнорировать проблему, преодолеть которую раньше было очень тяжело.

Scratchbox позволяет иметь несколько сред сборки, в которых вы можете совмещать двоичный код целевой системы и системы разработки. Если вы используете scratchbox для ARM на процессоре x86, двоичный код ARM волшебным образом начинает работать и одновременно создает в виде копии двоичный код ARM. Это замечательная игрушка. Nokia финансировала ее разработку, очевидно, с прицелом на рассматриваемое сегодня устройство и ему подобные.

К слову, если вы вернетесь к этому спустя некоторое время и получите загадочное сообщение "Scratchbox is not properly set up!", вероятно, вам нужно запустить его. Запустите /scratchbox/sbin/sbox_ctl start под пользователем root, и все должно заработать.

Некоторые системы могут отключаться некорректно, если перед их остановом вы не запустили sbox_ctl stop. Если вы по какой-либо причине перезапустили систему между установкой scratchbox и установкой SDK, как это сделал я, и не настраивали систему на запуск scratchbox во время загрузки, это может стать сюрпризом.

Другая распространенная ловушка состоит в том, что apt-get в scratchbox не может найти узел repository.maemo.org. Чтобы исправить это, измените файл /scratchbox/etc/nsswitch.conf и убедитесь, что в строке "hosts:" установлено значение "dns" вместо "mdns". (Обратите внимание, что это не тот же самый файл, что и nsswitch.conf в вашей среде scratchbox.)


Повторение пройденного: создаем "hello, world!"

Первый шаг всегда состоял в получении работающего приложения "hello, world!". Это несложно, но, прежде чем начать, необходимо выбрать цель. Целью называется совокупность настроек и инструментов, соответствующих определенному устройству (N800). В типичной среде scratchbox вам пришлось бы создать её самостоятельно. Однако программа установки maemo сама создает две цели, которые называются SDK_X86 и SDK_ARMEL. Вы можете переключаться между ними с помощью команды sb-conf; например, sb-conf select SDK_ARMEL выбирает цель ARM.

Теперь давайте посмотрим на код:

Листинг 1. Hello, world
#include <stdio.h>

/* stop me if you've heard this one */
int
main(void) {
            printf("hello, world!\n");
            return 0;
 }

Сохраните пример кода в файле. Теперь выполним кросс-компиляцию, и это очень хитрый момент:

Листинг 2. Кросс-компиляция
[sbox-SDK_ARMEL: ~] > cc -o hello hello.c
[sbox-SDK_ARMEL: ~] > file hello
hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.4.17, 
 dynamically linked (uses shared libs), not stripped
[sbox-SDK_ARMEL: ~] > ./hello
hello, world!

Все просто. Возможно, вы спросите: как этот файл попадёт в наш планшет? Если вы установили на планшет командный процессор и в каком-либо из разъемов установлена карта SD, это очень просто: подключите планшет к Linux-системе, смонтируйте файловую систему на появившийся диск и скопируйте на него файл. Размонтируйте диск, отключите устройство и наблюдайте за тем, как диск волшебным образом будет смонтирован на планшете. Конечно же, где-то по пути наш файл потеряет права на исполнение, но вы можете скопировать его с карты и выполнить команду chmod +x.

Такой способ подходит для одного файла, при условии, что вы уже установили программу терминала и тому подобное. В нашем случае, поскольку программа все равно будет запускаться в командном процессоре, имеет смысл поступать таким образом.

Однако этот способ не годится для реальных приложений, особенно графических. В этом случае вам придется создать соответствующий файл пакета (в N800 используются пакеты Debian) и дать пользователю возможность установить его надлежащим образом. Действительно, когда речь заходит о реальных вещах, а не о поделках, не надо ничего откладывать на потом.


Создание пакетов maemo

На developerWorks я нашел лучшую документацию по созданию пакетов Debian из всех виденных мной (см. раздел Ресурсы). Конечно же, этого недостаточно для maemo, поскольку нужно не только установить программу в /usr/bin; вам также нужен способ сказать интерфейсу, как найти пакет и запустить его. Ссылка на пример приложения "hello, world!" не работает на момент написания, но ничего страшного - просто выполните apt-get source hello-world-app в среде scratchbox. Этот пакет все раскладывает по местам, в том числе пиктограммы и конфигурацию запуска.

Создать его достаточно просто: запустите autogen.sh для формирования сценария настройки и выполните dpkg-buildpackage -rfakeroot. Если произойдет ошибка, связанная с тем, что в пути $PATH отсутствует команда dpkg-buildpackage, запустите sb-menu и проверьте, установлен ли у вас инструментарий разработчика debian. Не устанавливайте пакет debian-sarge devkit; он заставит инструменты Debian думать, что вы разрабатываете приложения под архитектуру arm, а не armel, и вы никогда не сможете сделать ничего хорошего. Кроме того, N800 не будет устанавливать ваши пакеты, поскольку они созданы для несовместимой архитектуры. Поэтому не делайте этого.

Приложения maemo создаются с помощью виджетов Gtk. Здесь есть еще немного волшебства: семейство функций "osso_...", которые представляют собой оболочки к обычным функциям Gnome dbus. Если вы не будете использовать их, ваше приложение может работать некорректно в среде maemo. Пример "hello world" - это хорошая отправная точка для изучения среды. Посмотрите на него, создайте пакеты и убедитесь, что чувствуете себя уверенно.

Учитывая всё, что мы узнали, давайте создадим какое-нибудь приложение. Хотя приложение Hello World достаточно поучительно, этот пример в некоторой степени даже избыточен. Типичному приложению не требуется вывод в строку состояния, отображение в панели управления, как службы DBUS и обычного приложения, а также как апплета домашней страницы. Фактически обычно бывает достаточно одной-двух из перечисленных функций. Помимо всего прочего, необходимость выполнять все эти действия привела к тому, что наше приложение было реализовано как библиотека общего доступа, используемая различными компонентами. Это простейший способ организации общего доступа к коду, а также концентрации внимания примеров на реализуемых задачах. Это отлично подходит для обучения и демонстрации, но не всегда является лучшим вариантом для вашего приложения. Какое же приложение мы будем создавать?

У N800 есть очень изящная особенность - небольшая выдвижная камера. По умолчанию, если вы открываете её, незамедлительно запускается небольшая программа ведения интерактивного чата. Она хороша, но не очень гибка. Было бы здорово иметь приложение, которое может делать отдельные снимки и автоматически загружать их на удаленный сервер. Оно использовало бы широкие возможности N800 по подключению по различным сетям и предоставляло нам чуть больше возможностей по управлению количеством отправляемых кадров.

Этот процесс на самом деле весьма сложен, поэтому я не собираюсь разрабатывать полностью завершенное приложение. Вместо этого я собираюсь сконцентрироваться на основах его работы. Очень удобно, что большая часть работы уже выполнена за нас в виде библиотеки gstreamer, обрабатывающей медиа-потоки. Наша цель состоит в том, чтобы извлекать кадры с камеры с определенными интервалами, сохранять их в определенном месте, желательно на другой машине, и, возможно, предоставить пользователю возможность нажимать на кнопку для сохранения кадров.


Подготовка к следующему выпуску

Во второй части этой серии мы рассмотрим программу, которая делает основную работу по формированию потока gstreamer для захвата изображений с Web-камеры на экран или в другую систему. Цель состоит в получении изображений с камеры, их преобразовании в JPEG, а также загрузки куда-нибудь.

Пока же познакомьтесь с gstreamer, если вы еще не сделали этого. В среде gstreamer реализовано множество интересных концепций. Не пожалейте времени и время и установите программу терминала; я рекомендую osso-xterm.


Технические спецификацииN800

В целом Nokia N800 представляет собой переносной Интернет-планшет, который предоставляет доступ к Интернету с применением следующих технологий:

  • Широкий экран высокого разрешения
  • Браузер Opera 8
  • Плагин Adobe Flash 9 для браузера
  • Подключение к Интернету
  • Поддержка Skype
  • Звонки через Интернет с поддержкой Web-камеры
  • Обмен мгновенными сообщениями
  • Многопротокольный клиент электронной почты.
  • Полноэкранная клавиатура
  • Стереодинамики
  • Медиа-проигрыватель
  • Архитектура UPnP
  • Real Rhapsody
  • Расширяемая память
  • Сенсорный экран 800 x 480 пикселов, 65 536 цветов

Устройство выполнено в стандартном серебристо-черном корпусе и имеет следующие параметры:

  • Объём: 138 куб. см.
  • Масса: 206 г.
  • Длина: 75 мм
  • Ширина: 144 мм

Память DDR RAM 128 МБ; и Flash 256 МБ, а также MiniSD 128 МБ с возможностью расширения. Два встроенных разъема карт памяти совместимы с SD, MicroSD, MiniSD, MMC и RS-MMC. Поддерживает карты памяти до 8 ГБ. Карты SD объемом более 2 ГБ должны быть совместимы с SDHC.

Батарея BP-5L рассчитана на время работы в Интернете до 3,5 часов (в режиме ожидания 13 дней).

Встроенная поддержка следующих форматов файлов:

  • Звук: AAC, AMR, AWB, M4A, MP2, MP3, RA (RealAudio), WAV, WMA
  • Изображения: BMP, GIF, ICO, JPEG, PNG, TIFF, SVG-tiny
  • Видео: 3GP, AVI, H.263, MPEG-1, MPEG-4, RV (Real Video)
  • Плейлисты Интернет-радио: M3U, PLS

Поддерживаемые технологии подключения:

  • Беспроводная сеть: 802.11b/g
  • Спецификация Bluetooth: 2.0 (для подключения к Интернету и передачи файлов через телефон)
  • Аудиоразъем Nokia 3,5 мм. Поддерживаемые профили: Коммутируемое сетевое соединение, передача файлов, общий доступ, доступ к SIM, профиль передачи объектов, профиль пользовательского интерфейса и последовательного порта
  • Высокоскоростной режим USB 2.0 для соединения с ПК

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


  • Bluemix

    Узнайте больше информации о платформе IBM Bluemix, создавайте приложения, используя готовые решения!

  • developerWorks Premium

    Эксклюзивные инструменты для построения вашего приложения. Узнать больше.

  • Библиотека документов

    Более трех тысяч статей, обзоров, руководств и других полезных материалов.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Мобильные приложения, Linux
ArticleID=277030
ArticleTitle=Linux на борту: Разработка приложений для Nokia N800
publish-date=12132007