Linux на борту: Разработка приложений для Nokia N800
Заглянем внутрь телефона/Интернет-планшета/Web-камеры Nokia N800 и подробнее рассмотрим среду разработки, построенную на базе scratchbox. Linux приобрел заслуженную популярность в мобильных и встроенных приложениях, благодаря его способности сокращаться до небольших размеров, необходимых для эффективной работы на компактных устройствах. Коммуникатор Nokia N800 пользуется этим и предлагает широкий спектр общей функциональности, которую может использовать разработчик. Однако моя цель состоит не в том, чтобы обсуждать возможности, а в том, чтобы показать, как начать разрабатывать приложения для этой платформы.
Nokia N800 является весьма зрелым продуктом. Его предшественник Nokia 770 уже отличался развитостью по сравнению с более ранними устройствами, работающими под управлением Linux, а N800 явно разрабатывался с учетом пожеланий пользователей. Тяжелого корпуса больше нет, и вы можете доставать и прятать стилус во время работы с устройством в его нормальной конфигурации.
Вместо одного разъема "RS-MMC" в N800 реализовано два разъема для обычных карт SD. Подставка встроена в устройство. Что еще более важно, увеличена оперативная память, flash-память и скорость процессора. Компания даже наклеила на экран защитную пленку (мой опыт обращения с защитными пленками поражает воображение — мне, кажется, удалось однажды поймать целого кота под защитную пленку для сотового телефона — поэтому я очень высоко ценю эту особенность.) Ниже приведены некоторые наиболее важные технические характеристики и физические параметры N800. Было улучшено множество характеристик, хотя завершено еще не все; например, код WiFi не поддерживает доверительные серверы корневых сертификатов, хотя пустое выпадающее меню для этого есть. Возможно, эта поддержка будет добавлена в следующей версии.
Одной из наиболее впечатливших меня функций 770 стала его среда разработки, построенная на базе scratchbox. Давайте посмотрим, как эта среда разработки действует на практике.
настройка
Я настроил в системе терминальную программу и получил права доступа root. На самом деле это необязательно; я это делаю потому, что мне нравится копаться в технике. Я загрузил терминальную программу из каталога приложений maemo Wiki. Эта программа была разработана специально для 770, но она не привязана к конкретным версиям ядра и прочим мелочам, поэтому отлично работает.
Получение прав root немногим сложнее: вам нужно перевести устройство в режим R&D, для чего используется утилита flasher, которую можно загрузить с сайта maemo. Утилиту flasher необходимо установить на компьютере под x86 Linux, который является предпочтительной средой для запуска scratchbox. Если у вас нет x86 Linux-компьютера, достаточно мощную для этого x86-машину можно купить по цене одного завтрака (а Linux вообще загрузить бесплатно). Я использовал платформу Kubuntu, но это не имеет особого значения; я делал то же самое под управлением SuSE, а пользователи maemo, по-моему, предпочитают Debian.
Инструкции по установке, представленные на сайте maemo, отлично работают. Для начала необходимо установить scratchbox. Предоставляемая программа установки отлично работает, хотя у нее есть одна странность - по умолчанию она зачем-то удаляет все уже загруженные вами файлы и загружает их снова (вы также можете установить пакет вручную, но я не вижу каких-либо причин для этого).
Для установки scratchbox требуются права доступа root, но для работы с ним доступ root не нужен. Если вы используете программу установки scratchbox с сайта maemo, все, что вам нужно - это запустить /scratchbox/sbin/sbox_ctl start под пользователем root и
/scratchbox/sbin/sbox_adduserпод вашей учетной записью. Выйдите из системы и зайдите обратно, чтобы вступило в силу членство в новой группе (группа 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.
Теперь давайте посмотрим на код:
#include
/* stop me if you've heard this one */
int
main(void) {
printf("hello, world!\n");
return 0;
}
Сохраните пример кода в файле. Теперь выполним кросс-компиляцию, и это очень хитрый момент:
[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
Создать пакет достаточно просто: запустите 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" - это хорошая отправная точка для изучения среды. Посмотрите на него, создайте пакеты и убедитесь, что чувствуете себя уверенно.
Питер Сибах.
Nokia N800 является весьма зрелым продуктом. Его предшественник Nokia 770 уже отличался развитостью по сравнению с более ранними устройствами, работающими под управлением Linux, а N800 явно разрабатывался с учетом пожеланий пользователей. Тяжелого корпуса больше нет, и вы можете доставать и прятать стилус во время работы с устройством в его нормальной конфигурации.
Вместо одного разъема "RS-MMC" в N800 реализовано два разъема для обычных карт SD. Подставка встроена в устройство. Что еще более важно, увеличена оперативная память, flash-память и скорость процессора. Компания даже наклеила на экран защитную пленку (мой опыт обращения с защитными пленками поражает воображение — мне, кажется, удалось однажды поймать целого кота под защитную пленку для сотового телефона — поэтому я очень высоко ценю эту особенность.) Ниже приведены некоторые наиболее важные технические характеристики и физические параметры N800. Было улучшено множество характеристик, хотя завершено еще не все; например, код WiFi не поддерживает доверительные серверы корневых сертификатов, хотя пустое выпадающее меню для этого есть. Возможно, эта поддержка будет добавлена в следующей версии.
Одной из наиболее впечатливших меня функций 770 стала его среда разработки, построенная на базе scratchbox. Давайте посмотрим, как эта среда разработки действует на практике.
настройка
Я настроил в системе терминальную программу и получил права доступа root. На самом деле это необязательно; я это делаю потому, что мне нравится копаться в технике. Я загрузил терминальную программу из каталога приложений maemo Wiki. Эта программа была разработана специально для 770, но она не привязана к конкретным версиям ядра и прочим мелочам, поэтому отлично работает.
Получение прав root немногим сложнее: вам нужно перевести устройство в режим R&D, для чего используется утилита flasher, которую можно загрузить с сайта maemo. Утилиту flasher необходимо установить на компьютере под x86 Linux, который является предпочтительной средой для запуска scratchbox. Если у вас нет x86 Linux-компьютера, достаточно мощную для этого x86-машину можно купить по цене одного завтрака (а Linux вообще загрузить бесплатно). Я использовал платформу Kubuntu, но это не имеет особого значения; я делал то же самое под управлением SuSE, а пользователи maemo, по-моему, предпочитают Debian.
Инструкции по установке, представленные на сайте maemo, отлично работают. Для начала необходимо установить scratchbox. Предоставляемая программа установки отлично работает, хотя у нее есть одна странность - по умолчанию она зачем-то удаляет все уже загруженные вами файлы и загружает их снова (вы также можете установить пакет вручную, но я не вижу каких-либо причин для этого).
Для установки scratchbox требуются права доступа root, но для работы с ним доступ root не нужен. Если вы используете программу установки scratchbox с сайта maemo, все, что вам нужно - это запустить /scratchbox/sbin/sbox_ctl start под пользователем root и
/scratchbox/sbin/sbox_adduser
Права доступа 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.
Теперь давайте посмотрим на код:
#include
/* stop me if you've heard this one */
int
main(void) {
printf("hello, world!\n");
return 0;
}
Сохраните пример кода в файле. Теперь выполним кросс-компиляцию, и это очень хитрый момент:
[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
Создать пакет достаточно просто: запустите 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" - это хорошая отправная точка для изучения среды. Посмотрите на него, создайте пакеты и убедитесь, что чувствуете себя уверенно.
Питер Сибах.
Сетевые решения. Статья была опубликована в номере 01 за 2008 год в рубрике программирование