Сергей Индлин
<indlin на abc92 тчк ru>
JID: serj на abc92 тчк ru
История переиздания
Издание 0.3 05 Dec 2002 Alexandre Prokoudine
Разметка оптимизирована для проекта документации ALT Linux.
Издание 0.2 04 Dec 2002
Добавлена лицензия FDL
Издание 0.1 02 Dec 2002
Начальный вариант
Аннотация
Эта статья посвящена программам под Linux, позволяющим разрабатывать
приложения для PalmOS(TM).
Содержание
1. Введение
2. PalmOS SDK
3. Prc-tools
4. POSE
5. Guikachu и pilrc
6. Отладчик DDD
7. Среда разработки
Глава 1. Введение
-----------------
В этой статье я хотел бы остановиться подробнее на разработке программ
для PalmOS(TM) в Linux. Я использую дистрибутив ALT Linux Master
2.0 (http://www.altlinux.ru/) с настроенным репозитарием пакетов
Sisyphus (http://www.altlinux.ru/index.php?module=sisyphus ), откуда можно
легко установить большинство необходимых программ. Конечно, все
используемые программы можно скачать в интернете, и использовать
бесплатно.
Я не буду подробно описывать технологию программирования в PalmOS(TM)
-- для этого много документации можно найти в Интернете. Главными
справочниками разработчика являются Palm OS Companion and
Reference (http://www.palmos.com/dev/support/docs/palmos50-html.zip).
На том же сайте вы можете найти много полезной документации,
предназначенной для разработчиков: http://www.palmos.com/dev/support/docs/.
Неплохой форум, посвященный разработке под PalmOS(TM) можно найти на сайте
http://pascal.sources.ru/cgi-bin/forum/YaBB.cgi?board=palmos.
Из конференций (news-groups) могу порекомендовать сервер
news://news.falch.net -- конференция pilot.programmer.gcc (на
английском). Хороший каталог ресурсов по разработке для Palm на
OpenNet (http://www.opennet.ru/prog/sml/71.shtml).
Кратко перечислю используемые программы:
PalmOS SDK
библиотеки и заголовочные файлы;
prc-tools
собственно кросс-компилятор gcc и другие инструменты для
компиляции и сборки программ под PalmOS(TM);
pose
эмулятор Palm. Позволяет отлаживать программы с помощью
m68k-palmos-gdb, без риска потерять все данные на реальном
устройстве;
pilrc
компилятор ресурсов для PalmOS(TM). Преобразует rcp (текстовый
файл описания ресурсов) в бинарные файлы формата PalmOS(TM)
guikachu
графический редактор ресурсов PalmOS(TM) (на базе gtk/gnome).
Позволяет "рисовать" интерфейс приложений PalmOS(TM)
ddd
графический frontend к отладчику gdb, включая m68k-palmos-gdb;
gvim
редактор исходных текстов. Подойдет любой привычный редактор
или среда;
Глава 2. PalmOS SDK
-------------------
Для работы с gcc надо на странице http://www.palmos.com/dev/tools/sdk/
перейти в раздел нужной версии SDK и скачать архив в разделе "Unsupported
Palm OS SDK 5.0 for PRC-Tools". Я надеюсь, что rpm установит файлы куда
надо, а для архива tar.gz надо делать так:
1. создать каталог /usr/local/palmdev/sdk35 и линк на неё --
/usr/local/palmdev/sdk (что-бы легко переключаться между версиями SDK):
mkdir /usr/local/palmdev/sdk35
ln -s /usr/local/palmdev/sdk35 /usr/local/palmdev/sdk
2. Из архива скопировать содержимое каталога Palm OS 3.5 Support/Incs
в каталог /usr/local/palmdev/sdk35/include, и Palm OS 3.5
Support/GCC Libraries -- в /usr/local/palmdev/sdk35/lib
Документацию можно найти на http://www.palmos.com/dev/support/docs/ в разных
форматах. Нам больше подойдет вариант в HTML или PDF.
Глава 3. Prc-tools
------------------
Скачать последнюю версию можно с домашней страницы prc-tools
(http://prc-tools.sourceforge.net/). На текущий момент это версия 2.2,
которая поддерживает последние модели Palm-based устройств на
ARM-процессорах и PalmOS SDK 5.
В пакет prc-tools входят программы:
build-prc
строит из бинарных файлов и ресурсов файл .prc готовый к
установки на Palm;
m68k-palmos-ar
позволяет создавать свои библиотеки
m68k-palmos-c++
для Palm можно писать программы на C++ (это тема отдельного
разговора и многочисленных споров);
m68k-palmos-gdb
отладчик программ. Можно использовать линк с реальным
устройством или эмулятором POSE;
Другие инструменты
prc-tools во многом повторяет стандартный пакет gcc, и изначально
являлся хаком 2.95 версии gcc. Поэтому команды и ключи prc-tools не
покажутся необычными программисту, работавшему с gcc. Специфичные для
PalmOS(TM) опции можно посмотреть на соответсвующей странице
(http://prc-tools.sourceforge.net/doc/prc-tools.html).
Глава 4. POSE
-------------
POSE это эмулятор PalmOS(TM)-based машин. Существует версия для
UNIX(TM), MacOS(TM), Windows(TM). Исходники можно найти на
соответствущей странице (http://www.palmos.com/dev/tools/emulator/).
Для дистрибутивов ALT Linux достаточно дать команду apt-get install pose.
Так-же доступны пакеты pose-skins и pose-doc. Пакет pose-skins нужен
для корректной работы с конкретными моделями Palm. Доступны шкурки
для Palm, Handspring, Workpad, HandEra разных моделей.
Для работы понадобиться ещё и образ системной памяти Palm (ROM Image
Files), который по лицензионным ограничениям распространяться в
составе дистрибутива не может. Для получения ROM Image Files
необходимо подписаться на Palm OS Developer Program
(http://www.palmos.com/dev/tools/emulator/#roms ). Также можно
скопировать ROM с самого устройства Palm. Для этого надо:
1. Установить и настроить пакет pilot-link (см. мою статью
Подключение и работа с PalmOS наладонниками в Linux,
http://www.abc92.ru/articles/palm/synclinux);
2. Установить на Palm программу getrom2.prc:
pilot-xfer -i /usr/share/pilot-link/getrom2.prc
Для старых моделей, с объёмом ROM в 512Кб можно использовать
getrom.prc;
3. Запустить на Palm установленную программу getrom и нажать кнопку
Start. В Linux запустить программу pi-getrom;
4. Полученный pilot.rom можно загружать в POSE.
Замечание
На последних моделях Palm getrom2.prc использовать нельзя. Достаточно
нажать кнопку синхронизации и запустить pi-getrom.
Теперь можно запустить и настроить POSE. В открывшемся окне POSE
нажатием правой кнопки мыши вызывается меню. Выберите пункт New и
заполните поля:
* В поле ROM file надо открыть пункт Other и выбрать файл, скачанный
с помощью pi-getrom;
* В поле Device появиться номер модели;
* В поле Skin выберите шкурку;
* В поле RAM size -- размер памяти вашего виртуального Palm;
Теперь можно устанавливать и отлаживать программы.
Глава 5. Guikachu и pilrc
-------------------------
Программа для PalmOS(TM) состоит из ресурсов. Сам код является
специфичным типом ресурса. Также как и текст программы, ресурсы
описываются текстовым файлом (стандартное расширение .rcp), который
можно редактировать напрямую в текстовом редакторе.
Для визуального редактирования ресурсов существуют такие программы как
pilrcedit и guikachu. Pilrcedit (http://www.wn.com.au/rnielsen/pilrcedit/)
-- это Java-приложение, и мне показалось не слишком удобным.
Guikachu написан под Gtk+/GNOME, использует XML, как формат сохраняемых
файлов, и активно развивается. Последняя стабильная версия на текущий
момент -- 1.2.3. Скачать можно с домашней страницы (http://cactus.rulez.org/projects/guikachu).
Для дистрибутивов ALT Linux, guikachu можно установить командой
apt-get install guikachu. Чтобы преобразовать исходный файл guikachu
в RCP-файл, достаточно дать команду guikachu2rcp name.guikachu или выбрать
пункт Экспорт RCP из меню Файл.
Guikachu поддерживает следующие типы ресурсов:
* Форма;
* Диалог;
* Меню;
* Строка;
* Списки строк;
* Текстовые поля;
В формы можно добавлять: статический текст, поля, кнопки, списки,
таблицы, пользовательские элементы. Интерфейс достаточно понятен и
удобен.
После получения rcp файла, его необходимо преобразовать в бинарный
формат. Для этого служит программа pilrc
(http://www.ardiri.com/index.php?redir=palm&cat=pilrc) (пользователи Sisyphus
могут ее установить командой apt-get install pilrc).
Синтаксис достаточно прост: pilrc -H name.h name.rcp. По этой команде
создадутся необходимые .bin-файлы, и заголовочный файл с определениями
идентификаторов.
Замечание
Все идентификаторы ресурсов в PalmOS(TM) должны быть числовыми, но в
программе удобнее пользоваться говорящими именами. Ключ -H позволяет
автоматически сгенерировать заголовочный файл с "#define Имя Число",
давая возможность в программе использовать конструкции типа "case
MY_BEST_BUTTON:" вместо "case 9991:".
Глава 6. Отладчик DDD
---------------------
m68k-palmos-gdb является версией стандартного gdb, пропатченного под
Palm, поэтому можно использовать графические оболочки к gdb. Здесь я
расскажу про отладку под ddd.
Чтобы программа собралась с отладочной информацией, надо добавить ключ
-g в вызове m68k-palmos-gcc. Размер окончательного .prc-файла
увеличится мало -- добавиться только заглушка, передающая управлению
внешнему отладчику на хосте. Вся отладочная информация записывается в
объектный модуль, который и надо загружать в отладчик.
Для запуска ddd в качестве frontend к m68k-palmos-gdb надо дать ключ
--debugger m68k-palmos-gdb:
ddd --debugger m68k-palmos-gdb
Первым делом стоит загрузить (Ctrl-O) объектник с отладочной
информацией (тот файл, который указан в опции -o m68k-palmos-gcc).
Чтобы стартовать сессию отладки в окне gdb надо дать команду target
pilot localhost:6414. По указанному порту POSE общается с отладчиком.
Замечание
Для упрощения, можно создать в ddd кнопку. Для этого надо открыть меню
Commands->Edit Buttons и в пункте Console Buttons ввести: target pilot
localhost:6414. После этого над окном отладчика появиться кнопка с
введенной командой.
Теперь отладчик ждет, когда на pose запустят программу. При старте в
эмуляторе программы, управление немедленно передастся в ddd, и экран
POSE останется черный, пока не пойдет вывод из программы. Теперь можно
как обычно устанавливать точки прерывания, просматривать значения
переменных и т.д.
Глава 7. Среда разработки
-------------------------
Под Linux можно собрать для себя эффективную среду разроботки. Выбор
довольно широк: vi, emacs, Anjuta, KDevelop. Все эти программы можно
настроить для разработки под PalmOS(TM). Универсальным и мощным
средством работы является make.
Ниже приведен примера файла Makefile с комментариями.
# Имя prc файла
PRC = name.prc
# Уникальный идентификатор приложения.
# Должен быть зарегистрирован на сайте
# http://dev.palmos.com/creatorid/
CID = TeSt
# Имя приложения, показываемое в Launcher
NAME = Name
# Объектные файлы, из которых состоит программа
OBJS = module1.o module2.o module3.o
# Файл, созданный guikachu
GUI = name.guikachu
# Файл, создаваемый в результате работы guikachu2rcp
RCP = name.rcp
# Базовая программа вызова компилятора
CCBASE = m68k-palmos-gcc -DOS35 -DPRC2 -fno-exceptions -fno-rtti
# Для окончательного проекта эту опцию можно закомментировать
DEBUG = -g
CC = $(CCBASE) $(DEBUG)
# Вызов команды, генерирующей зависимости файлов
DEPEND = makedepend
# Сначало надо вызывать pilrc, т.к. идентификаторы ресурсов
# уже могут использоваться в программе
all: $(RCP) $(PRC)
# rcp файл зависит от guikachu
$(RCP): $(GUI)
guikachu2rcp $(GUI)
pilrc -H $(NAME).h $(RCP)
# prc файл зависит от ресурсов и объектных модулей
$(PRC): $(RCP) $(OBJS)
$(CC) $(OBJS) -o $(NAME)
build-prc $(PRC) "$(NAME)" $(CID) $(NAME) *.bin
# Выведем результат сборки, что-бы контролировать размер
ls -l *.prc
# Объектные модули получаются в результате компиляции всех файлов
# с расширением .c (или .cpp) -
# нужное раскоментировать
# .cpp.o:
.c.o:
$(CC) -c $<
# Для генерации зависимостей от .h файлов, используйте make dep
#dep: *.cpp
dep: *.c
$(DEPEND) *.c
Обсудить эту статью вы можете на форуме http://forum.abc92.ru/phpBB2/viewforum.php?f=7
Данная статья распространяется под лицензией GNU Free Documentation License
версии 1.2 (http://www.gnu.org/copyleft/fdl.html ). Исходный текст в формате
docbook доступен для загрузки (http://www.abc92.ru/articles/palm/linuxdev/linuxdev.docbook).