Этот мануал я написал когда-то давно, специально для форума MotoFan.Ru. Он поможет собрать, протестировать и создать пакет приложения для телефона, основанного на платформе MotoMAGX.
Для портирования и сборки приложений для нашей платформы, в первую очередь нам нужны:
- Компьютер с дистрибутивом GNU/Linux или MS Windows с установленной программой виртуализации VirtualBox или VMware Player. В крайнем случае под MS Windows можно воспользоваться AndLinux’ом или Cygwin’ом;
- SDK & Toolchain’s для MotoMAGX + исходники необходимых программ или приложений;
- Разработчик или начинающий программист (1 штука).
Я рассмотрю наиболее приемлемый многим начинающим разработчикам способ, с использованием популярного дистрибутива GNU/Linux (Ubuntu 11) в виртуальной машине VMware Player в MS Windows. Те пользователи, у которых уже стоит GNU/Linux на компьютере, могут скачать SDK & Toolchain’s и сразу перескочить на пункт #4. Итак, начнём, благословясь!
1. Загрузка необходимых для разработки инструментов и файлов
1.1. Скачиваем ISO-образ диска с Ubuntu 11. Я качал себе в городской сетке с огромной скоростью, посмотрите в своих тоже, может найдёте. На всякий случай, ссылка: [Download | Скачать] на скачивание с официального сайта. Там вы можете выбрать любую конфигурацию под архитектуру своего процессора (x86_64/x64). Лично я советую именно 32-битную сборку.
1.2. Скачиваем VMware Player. Скачать можно с официального сайта: [Download | Скачать], или тут: [Mirror | Зеркало].
1.3. Скачиваем SDK & Toolchain’s для MotoMAGX. [Download | Скачать] — полная версия, включающая в себя два SDK: от испанцев и от Ant-ON‘a) а так же Python, BennuGD, Boost и множество других библиотек. Инструкция по установке есть внутри или ниже можно прочитать подробно. Тем, кто хочет разрабатывать приложения на SDL, можно скачать небольшой SDK для сборки приложений: [Download | Скачать], [Mirror | Зеркало]. Подробности и дополнительные ссылки на зеркала и последний SDK можно получить здесь.
2. Мануалы по установке VMware Player, Ubuntu 11 и SDK & Toolchain’s в картинках
Картинки лучше всего открывать в новом окне, нажав колёсико мышки (или среднюю кнопку). После открытия воспользуйтесь масштабированием в браузере или, например, в стандартном просмотрщике картинок.
2.1. Установка программы виртуализации VMware Player для самых маленьких.
2.2. Установка GNU/Linux в программу VMware, на примере Ubuntu 11.
2.3. Установка дополнительных инструментов (VMware Tools) в Ubuntu 11. Необходимо для перемещения файлов между Ubuntu в виртуальной машине и MS Windows (хостовая система).
Слева направо: 2.1, 2.2, 2.3.
3. Мануал по установке VMware Tools текстом
3.1. Установка VMware Tools для Ubuntu 11
3.1.1. Стартуем Ubuntu 11, вверху нажимаем «Virtual Machine», затем «Install VMware Tools…».
3.1.2. Ждём загрузки инструментов (требуется подключение к интернету), затем снова вверху нажимаем «Virtual Machine» => «Install VMware Tools…».
3.1.3. С открывшегося диска копируем архив в формате TAR.GZ например в /home/user/ (user — ваше имя при установке Ubuntu 11), распаковываем его.
3.1.4. Запускаем терминал и выполняем в нём следующее:
1 2 |
cd /home/user/vmware-tools-distrib sudo ./vmware-install.pl |
После команды sudo надо ввести пароль, который вы указывали при установке Ubuntu.
3.1.5. Умный скрипт сам предложит вам вводить нужные значения (написанные в квадратных скобках), вводите их или нажимайте клавишу «Enter».
3.1.6. После успешной установки инструментов перезагрузите виртуальную машину.
3.1.7. Данные инструменты помогут с лёгкостью переносить файлы из MS Windows в Ubuntu, просто копируя их или перенося из окна в окно, как вы это делали в Windows. Кроме того, появится множество разрешений для экрана системы.
3.2. Общие папки между системами для обмена файлами
3.2.1. Стартуем Ubuntu 11, вверху нажимаем «Virtual Machine», затем «Virtual Machine Settings».
3.2.2. Переходим на вкладку «Options», выбираем «Shared Folders».
3.2.3. Переключатель «Folder sharing» ставим в положение «Always enabled», нажимаем кнопку «Add».
3.2.4. На хостовом компьютере выбираем любую папку, добавляем её, жмём ОК.
3.2.5. Теперь в Ubuntu 11, в папке /mnt/hgfs/ видим добавленную нами папку из MS Windows.
4. Установка SDK & Toolchain’s
4.1. Скачиваем архив SDK с расширением TAR.GZ, перемещаем его в папку /home/user/ (user — ник при установке Ubuntu 11).
4.2. Выполняем команды, новая строка — «Enter», вместо user, естественно, пишем своё имя, после команды sudo потребуется ввести пароль, который мы указывали при установке Ubuntu 11.
1 2 3 4 5 6 7 8 9 10 11 |
sudo mkdir /mmc sudo chown user -R /opt sudo chown user -R /home sudo chown user -R /mmc sudo ln -s -d /opt/toolchains/motomagx/arm-eabi -t / mkdir /opt/toolchains mkdir /home/z6 mkdir /mmc/mmca1 tar -C /opt/toolchains -xzvf /home/user/motomagx-toolchains_12_08_2011.tar.gz cp /opt/toolchains/motomagx/setenv-z6.sh /home/z6 cp /opt/toolchains/motomagx/setenv-z6-2.sh /home/z6 |
4.3. Обратите внимание на имя скаченного вами архива SDK. Именно его нужно вводить в девятой строке кода, приведённого выше.
4.4. Установленный SDK выглядит так:
5. Запуск окружения, компиляция программ и HelloWorld’ов
5.1. Окружение для сборки
Чтобы запустить окружение для компиляции под MotoMAGX, достаточно выполнить в терминале следующее:
1 2 |
cd /home/z6 . setenv-z6.sh |
После этого, компиляторы, библиотеки и заголовочные будут браться из нашего SDK, а не из дебрей системы.
5.2. HelloWorld на языке программирования C
5.2.1. Создаём пустой файл с именем hello.c в папке /home/z6/ (правой клавишей по пустому месту, «Create Document» => «Empty File»).
5.2.2. Редактируем его содержимое следующим образом, сохраняем:
1 2 3 4 5 6 7 8 9 |
// Hello World for Motorola Magx! #include <stdio.h> int main(void) { printf ("Hello Moto!\n"); return 0; } |
5.2.3. Компилируем:
1 2 |
cd /home/z6 arm-linux-gnueabi-gcc hello.c -o hello |
5.2.4. Полученный исполнительный файл hello кидаем на телефон или карту памяти и запускаем через Telnet:
1 2 3 4 |
Mobilinux(TM) 4.1 Welcome 2 Motorola ZN5! [root@Symbiosis ~] #> /mmc/mmca1/hello Hello Moto! |
5.3. Работа с утилитой make и SDL-библиотекой
Утилита make позволяет компилировать достаточно сложные проекты. Подробнее об этом тут.
5.3.1. Скачиваем следующие исходники, распаковываем в папку /home/z6/: [Download | Скачать].
5.3.2. Запускаем терминал и окружение для компиляции, переходим в папку с проектом, выполняем команду
make:
1 2 |
cd /home/z6/ballgame_src make |
После выполнения команды будет выполнена компиляция проекта и создан MGX-пакет. Для очистки проекта от скомпилированного объектного кода и исполнительных бинарников, следует выполнить
make clean, а для создания MGX-пакета — команду
make mgx.
5.3.3. Теперь можно кинуть пакет на карту памяти и попробовать запустить (для SDL-приложений вам потребуются установленные SDL-библиотеки).
5.3.4. Структура простейшего Makefile для компиляции HelloWorld’a:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# MakeFile for HelloWorld # Motorola MotoMAGX CC = arm-linux-gnueabi-gcc STRIP = arm-linux-gnueabi-strip CFLAGS = # Необходимые флаги LDFLAGS = # Необходимые флаги OPTIMIZATION = -march=armv6j -mtune=arm1136jf-s -mfpu=vfp -O2 # Оптимизация под процессор INCLUDE = $(CFLAGS) $(OPTIMIZATION) -I/dir # Путь к нужным хэдэрам. LIBS = $(LDFLAGS) -L/dir # Путь к нужным либам BIN = hello # Бинарник all: $(CC) -c hello.c -o hello.o $(INCLUDE) $(CC) -o $(BIN) hello.o $(LIBS) $(STRIP) $(BIN) clean: rm -f ./*.o $(BIN) |
Если положить данный Makefile рядом с файлом hello.c, и выполнить
make, получим исполнительный файл.
5.3.5. Замена строк, для портирования SDL-приложений:
1 2 3 4 5 6 7 8 9 10 11 12 |
CC:=gcc ---> CC:=arm-linux-gnueabi-gcc cc=gcc ---> CC=arm-linux-gnueabi-gcc cxx=g++ ---> CXX=arm-linux-gnueabi-g++ ld=ld ---> LD=arm-linux-gnueabi-ld ar=ar ---> AR=arm-linux-gnueabi-ar as=as---> AS=arm-linux-gnueabi-as oc=oc ---> OC=arm-linux-gnueabi-objcopy ranlib=ranlib ---> RANLIB=arm-linux-gnueabi-ranlib strip=strip ---> STRIP=arm-linux-gnueabi-strip В INCLUDE или CFLAGS добавляем `sdl-config --cflags` В LIBS или LDFLAGS добавляем `sdl-config --libs` -lнеобходимая_библиотека |
5.4. Работа со скриптом configure и SDL-библиотекой
Скрипт configure создаёт Makefile и позволяет компилировать сложные проекты, состоящие из множества файлов. Подробнее можно прочитать тут.
5.4.1. Пример работы. Скачиваем исходники, распаковываем в папку /home/z6/: [Download | Скачать].
5.4.2. Выполняем следующее:
1 2 3 |
cd /home/z6/PTC-demos ./configure --host=arm-linux-gnueabi make |
После этих команд у нас появятся исполнительные файлы Fire и Tunnel. Копируем их в корень карты памяти телефона.
5.4.3. Запускаем эти файлы через Telnet следующим образом:
1 2 3 |
export LD_LIBRARY_PATH=/mmc/mmca1/games/lib:$LD_LIBRARY_PATH chmod +x /mmc/mmca1/Fire /mmc/mmca1/Fire |
5.4.4. Для установки файлов в нужную директорию используется prefix и команда make install:
1 2 3 4 5 |
mkdir /home/z6/test cd /home/z6/PTC-demos ./configure --host=arm-linux-gnueabi --prefix=/home/z6/test make make install |
После этого нужные нам файлы будут в папке /home/z6/test/.
5.4.5. Для чистки объектного кода и бинарников используется команда
make clean, a для удаления сконфигурированных Makefile‘ов используется команда
make distclean (полная очистка).
5.5. Дебаггер «Segmentation fault»
5.5.1. Качаем motomagx debug tools и распаковываем архив на карту памяти, в папку /mmc/mmca1/games/. Исполнительные файлы должны быть собраны с флагом компилятора
-g и не должны быть пострипаны.
5.5.2. Выполняем (gdb):
1 2 3 4 5 |
ulimit -c unlimited ./<bin_app> Segmentation fault (core dumped) файл <core> будет создан ../bin/gdb ./<bin_app> <core> |
5.5.3 Выполняем (strace):
1 |
../bin/strace ./<bin_app> |
5.6. Скрипт запуска для SDL-приложений
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/sh mypath=${0%/*} LIBDIR1=/ezxlocal/download/mystuff/games/lib LIBDIR2=/mmc/mmca1/games/lib LIBDIR3=$mypath/lib export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LIBDIR1:$LIBDIR2:$LIBDIR3 export HOME=$mypath export SDL_QT_INVERT_ROTATION=1 cd $mypath sleep 1 exec $mypath/<bin_app> |
5.6.1. Если нужен вывод лога в файл, заменяем последнюю строку в скрипте на:
1 |
exec $mypath/bin_app >$mypath/stdout.txt 2>$mypath/stderr.txt |
5.7. HelloWorld с использованием GUI и функций телефона
5.7.1. Скачиваем архив, распаковываем в /home/z6/: [Download | Скачать].
5.7.2. Выполняем:
1 2 |
cd /home/z6/папка с нужным проектом make PLATFORM=EZX-ZN5 |
или просто
make.
5.7.3. Кидаем исполнительные файлы на телефон и пробуем запустить, должно получиться что-то типа этого:
5.8. Собираем MgxBox
5.8.1. Скачиваем архив, распаковываем в /home/z6/: [Download | Скачать].
5.8.2. Выполняем:
1 2 3 4 5 6 |
cd /home/z6/MgxBox/MgxBox_GUI_ru make PLATFORM=EZX-ZN5 cd /home/z6/MgxBox/p7zip_9.20.1 make all2 make install cp -r /mmc/mmca1/p7zip/lib/p7zip /home/z6/MgxBox/Release/app/p7zip |
5.8.3. Кидаем папку /home/z6/MgxBox/Release/ на телефон и пробуем запустить бинарник в папке Release/app/, если всё нормально, то на экране телефона будет отображено главное окно MgxBox:
6. Создание пакетов вручную
6.1. Создание MGX-пакета
6.1.1. Создаём папку, помещаем в нее необходимые файлы (Data-файлы приложения, исполнительные файлы, скрипт запуска, иконку).
6.1.2. Создаём в папке файл Имя_папки.cfg, редактируем его содержимое следующим образом:
1 2 3 4 5 6 |
Name = Test Exec = run.sh Icon = icon.png Author = Ant-ON Version = 1.0 Comment = Port for ZN5 by EXL |
Где, Name — имя программы, Exec — запускаемый файл, Icon — иконка, Author — автор программы, Version — версия программы и Comment — комментарий.
6.1.3. Запаковываем папку в любой удобный вам архив (RAR, TAR, GZ, 7Z, ZIP), и переименовываем в Имя_программы.mgx.
6.2. Создание PEP-пакета
6.2.1. Создаём папку с именем app/, помещаем в нее необходимые файлы (Data-файлы приложения, исполнительные файлы, скрипт запуска).
6.2.2. Создаём рядом с папкой файл description.ini, редактируем его содержимое следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[Actions] Silent=0 InstallApp = 1 AddAppToMenu = 1 [InstallApp] Name = Jump n Blob Exec = run.sh InstallPath = ../../mmc/mmca1/.Programs/jump_n_blob/ AppLockable = 1 Author = http://www.2d-retroperspectives.org | Philipp. Port by -=Strelok=-, EXL (c) MotoFan.Ru 08.01.2010 Version = 0.1 Daemon = 1 BigIcon= icon.png AniIcon= icon.png Icon= icon.png [AddAppToMenu] ParentFolder= root |
Где, Name — имя программы, Exec — запускаемый файл, Icon или AniIcon или BigIcon — иконка, Author — автор программы, Version — версия программы, InstallPath — путь установки.
6.2.3. Создаём иконку, рядом с папкой app/ и description.ini.
6.2.4. Запаковываем иконку, папку app/ и description.ini в архив формата TAR, затем сжимаем его в GZ и переименовываем в Имя_программы.pep.
7. Полезные ссылки, документация, наши проекты
7.1. Исходники, сайты с исходниками
Множество интересных проектов есть на code.google.com и sf.net.
7.1.1. Исходники проектов, базирующихся на SDL:
- http://www.libsdl.org/games;
- http://www.libsdl.org/demos;
- http://dl.openhandhelds.org/cgi-bin/gp2x.cgi?0,0,0,0,46;
- http://dl.openhandhelds.org/cgi-bin/dingoo.cgi?0,0,0,0,46.
7.1.2. Исходники проектов, базирующихся на Qt:
- http://www.elsix.org/index.php?w=browse — в основном там под Sharp Zaurus, но идеи создания приложений и исходники найти можно.
7.2. Документация, темы для прочтения
- Пробуем портировать игры и проги сами;
- Разработка софта под MOTOMAGX, начну небольшой HOWTO;
- Компиляция нативных приложений под E6/A1200, Создание окружения для компиляции;
- SDL библиотека;
- http://plg.lrn.ru/wiki/Заглавная_Страница;
- http://plg.lrn.ru/doc/sdl/index.html;
- http://doc.qt.nokia.com;
- Софт для Motorola ZN5 и прочих MotoMAGX (~.mgx и ~.pep). Разработка, портирование и обсуждение нативного софта.
7.3. Различные проекты
- http://code.google.com/p/open-mgx/ — исходники программ от Ant-ON‘a;
- http://code.google.com/p/sdl-magx/ — библиотека SDL HW для MotoMAGX от Ant-ON‘a;
- http://code.google.com/p/zmessanger/ — нативная аська, автор Ant-ON;
- http://sourceforge.net/projects/qte2console/ — qte2console от DoomChisel;
- http://code.google.com/p/motocakerteam/ — исходники программ от испанцев MotoCakerTeam;
- http://code.google.com/p/zsoft/.
8. Смежные мануалы
- Если кто не может запустить ZN5Encoder в Magic box — пост #290;
- Нативные заставки на основе портированных мной и Neomoto демок! — пост #291;
- Мануал по установке Tmake в тулчейн, и правки созданного им MakeFile — пост #484 (зеркало статьи);
- Изучение разделяемых библиотек (so) — пост #1440.
© EXL for MotoFan.Ru 27.08.2011