Умные буржуйские друзья начали разработку поддержки нативных приложений на Зн5
http://www.mmus.us/forum/showthread.php?t=8943
На данный момент готовится к выходы PinkMod 2.0 в котором будет реализована поддержка mpkg
Исходный код во вложении.
Спасибо камраду kidscracker
Все дальнейшие обсуждения -связанные с нативным софтом предлагаю вести в ЭТОЙ теме.
За флуд в теме БАН!
Мануал по портированию игр и программ (с) EXL
В соседних ветках много тем по портированию софта/игр. Я не знаток в этом деле, но кое-что могу рассказать)
Для портирования приложений на нашу платформу нужны:
1. AndLinux или Cygwin (Запускаются под виндой). Или любой Linux
2. SDK
3. Прямые руки
Я расcмотрю наиболее приемлемый способ с использованием Винды и AndLinux'a
Под Cygwin говорят плохо собираются программы, ну а настоящий Linux я пока не освоил.
Итак:
1. Скачиваем сам AndLinux Я использовал версию (beta2 final KDE version, 537 MB), качал себе в городской сетке, пошарьтесь в своих тоже, может найдёте.
2. Устанавливаем его.
Мануал по установке AndLinux'a в картинках для начинающих) Подписи к скринам внизу
Запускаем установку
Кликаем next
Соглашаемся, кликаем next
Выбираем путь установки, next
Выбираем версию. Лучше верхнюю, next
Выбираем память. Я оставил 256 mb, next
Настройки. Оставьте всё как есть, next
Звук в AndLinux ставте да, next
Настройки запуска AndLinux ставьте первое, next
Введите имя, пароль, next
Выберите третье, пользователи Windows XP лучше выбирайте COFS, next
Создаем папку AndLinux в корне вашего жесткого диска, даём ей общий доступ!
Нажимаем Refresh, выбираем расшаренную нами папку, вводим имя пользователя и пароль, next
Дальше - установка ярлыков, групп меню, ассоциации к файлам, ставим что нужно, ждём пока установиться и перезагружаем компьютер!
3. Скачиваем SDK (Зеркало 1, Зеркало 2). Копируем данный архив в расшаренную папку AndLinux.
4. Установка окружения для портирования:
Стартуем AndLinux, запускаем под ним Konsole
Выполняем команды: (Новая строка - ENTER, вместо user естественно пишем своё имя, после первой команды потребуется ввести пароль)
sudo mkdir /mmc
sudo chown user -R /opt
sudo chown user -R /home
sudo chown user -R /mmc
mkdir /opt/toolchains
mkdir /home/z6
mkdir /home/z6/build
mkdir /mmc/mmca1
tar -C /opt/toolchains -xzvf /mnt/win/motomagx-toolchains.tar.gz
cp /opt/toolchains/motomagx/setenv-z6.sh /home/z6
cp /opt/toolchains/motomagx/setenv-z6-2.sh /home/z6
5. Теперь запускаем окружение
cd /home/z6
. setenv-z6.sh
6. Качаем исходники и кидаем их в папку AndLinux, распаковываем и пробуем собрать
cd /home/z6
tar -xzvf /mnt/win/Ваши_исходники.tar.gz
cd Ваши_исходники
./configure --host=arm-linux-gnueabi
make (или make install)
Если не конфигурируется, пробуем
./configure --host=arm-linux-gnueabi --enable-sdlui --without-x
Если приложению нужны data файлы - нужен параметр --prefix=./ - например
./configure --host=arm-linux-gnueabi --enable-sdlui --without-x --prefix=/mmc/mmca1/..Ваш путь
Или так
./configure --host=arm-linux-gnueabi --enable-sdlui --with-sdlsound --without-x --prefix=./
Не забываем выполнять команду make distclean - она удаляет существующие неправильные бинарники
7. Если в исходниках отсутствует файл configure
вручную редактируем Makefile
ищем и заменяем строчки
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
8. Если конфигурирование и компиляция прошла без ошибок, вытаскиваем полученный файл из AndLinux'a с помощью Dolphin,
Не забываем кстати стрипать полученный экзешник, по такому коду (Где екзешник "x64" лежит в папке src, выполнять после make):
arm-linux-gnueabi-strip src/x64
Он лежит по пути (Вкладка Root) \home\Z6\Ваши_Исходники\Исполняемый файл, для этого его нужно вырезать, перейти на вкладку home и кинуть в папку windows, после этого он появиться в C:\\AndLinux
9. Копируем данный файл в корень карты памяти
и выполняем в телнете
cd /mmc/mmca1
export LD_LIBRARY_PATH=/mmc/mmca1/games/lib:$LD_LIBRARY_PATH
chmod +x Имя исполняемого файла
./Имя исполняемого файла
Если запустилось - отлично! Делайте пакет и выкладывайте!
------------------------------------------------------------------------------------
1. Правка управления (Ищите в исходниках по SDLK или клавишам):
layer[0].keys[0]=SDLK_LEFT;
player[0].keys[1]=SDLK_RIGHT;
player[0].keys[2]=SDLK_UP;
player[0].keys[3]=SDLK_DOWN;
#ifndef ALT_FIRE
player[0].keys[4]=SDLK_RCTRL
2. Правка разрешения (Ищите в исходниках по VIDEO или само разрешение)
3. Решение для добавления сворачивания приложения при входящем вызове (sms, флипе, других телефонных событиях) с остановкой звука делаем через замену процедуры SDL_PollEvent на собственную mySDL_PollEvent
-------------example.h-----------------------
int mySDL_PollEvent(SDL_Event *event);
// audio use sdl-lib
SDL_AudioSpec obtained;
boolean _audioSuspended;
void suspendAudio();
int resumeAudio();
// audio use sdl-mixer lib
void suspendAudio();
int resumeAudio();
void closeAudio(void);
--------------example.cpp--------------------
int mySDL_PollEvent(SDL_Event *event) {
int _r= SDL_PollEvent(event);
if (!_r)
return 0;
if (event->type == SDL_ACTIVEEVENT) {
if (event->active.state == SDL_APPINPUTFOCUS && !event->active.gain) {
suspendAudio();
for (;;) {
_r = SDL_WaitEvent(event);
if (!_r)
continue;
if (event->type == SDL_QUIT)
return 1;
if (event->type != SDL_ACTIVEEVENT)
continue;
if (event->active.state == SDL_APPINPUTFOCUS && event->active.gain) {
resumeAudio();
return 1;
}
}
}
}
return _r;
}
// if audio use sdl-lib
void suspendAudio() {
SDL_CloseAudio();
_audioSuspended = true;
}
int resumeAudio() {
if (SDL_OpenAudio(&obtained, NULL) < 0){
return -1;
}
SDL_PauseAudio(0);
_audioSuspended = false;
return 0;
}
// if audio use sdl-mixer-lib
void suspendAudio()
{
Mix_SuspendAudio();
}
int resumeAudio() {
int r = Mix_ResumeAudio();
if(r == -1){
closeAudio();
return -1;
}
}
void closeAudio(void) {
Mix_CloseAudio();
}
4. Мониторинг проблем "Segmentation fault"
Качаем gdb и распаковываем в телефон /mmc/mmca1/games
приложения должны быть собраны с префиксом '-g' и не должны быть пострипаные
ulimit -c unlimited
./<app>
Segmentation fault (core dumped)
файл <core> будет создан
../bin/gdb ./<app> <core>
5. утилита strace
../bin/strace ./app
6. Скачивание исходников и их обновление
svn co http://сайт - скачивание
svn up - обновление
7. Скрипт запуска утверждённый минздравом:
#!/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
cd $mypath
exec $mypath/Ваш екзешник > $mypath/Ваш экзешник.log
8. Для портирования игр, в которых разрешение экрана 640х480 или 800х600, требуется правка координат в исходниках. Для первого случая нужно делить координаты на 2, для второго на 2.5, графику можно обработать программой VSO Image Resizer
-----------------------------------------------------------------------------------
Мануал будет дополняться и разрабатываться, все что вы прочитали в мануале - это попытка систематизировать информацию.
Источники с которых бралась информация:
Motofan и Motorola Gaming Site
Огромное спасибо таким людям как: Lubomyr, Neomoto, Abram, AstaRoth,
Здесь можно скачать исходники:
Полезные ссылки, обязательные к прочтению начинающим разработчикам:
--------------------------------------------------------------------
Мануалы данной темы:
Если кто не может запустить ZN5Encoder в Magic box - пост #290
Нативные заставки на основе портированных мной и Neomoto демок! - пост #291
Мануал по установке Tmake в тулчейн, и правки созданного им MakeFile - пост #484
http://www.mmus.us/forum/showthread.php?t=8943
На данный момент готовится к выходы PinkMod 2.0 в котором будет реализована поддержка mpkg
Исходный код во вложении.
Спасибо камраду kidscracker
Все дальнейшие обсуждения -связанные с нативным софтом предлагаю вести в ЭТОЙ теме.
За флуд в теме БАН!
Мануал по портированию игр и программ (с) EXL
В соседних ветках много тем по портированию софта/игр. Я не знаток в этом деле, но кое-что могу рассказать)
Для портирования приложений на нашу платформу нужны:
1. AndLinux или Cygwin (Запускаются под виндой). Или любой Linux
2. SDK
3. Прямые руки
Я расcмотрю наиболее приемлемый способ с использованием Винды и AndLinux'a
Под Cygwin говорят плохо собираются программы, ну а настоящий Linux я пока не освоил.
Итак:
1. Скачиваем сам AndLinux Я использовал версию (beta2 final KDE version, 537 MB), качал себе в городской сетке, пошарьтесь в своих тоже, может найдёте.
2. Устанавливаем его.
Мануал по установке AndLinux'a в картинках для начинающих) Подписи к скринам внизу
Spoiler:
Запускаем установку
Кликаем next
Соглашаемся, кликаем next
Выбираем путь установки, next
Выбираем версию. Лучше верхнюю, next
Выбираем память. Я оставил 256 mb, next
Настройки. Оставьте всё как есть, next
Звук в AndLinux ставте да, next
Настройки запуска AndLinux ставьте первое, next
Введите имя, пароль, next
Выберите третье, пользователи Windows XP лучше выбирайте COFS, next
Создаем папку AndLinux в корне вашего жесткого диска, даём ей общий доступ!
Нажимаем Refresh, выбираем расшаренную нами папку, вводим имя пользователя и пароль, next
Дальше - установка ярлыков, групп меню, ассоциации к файлам, ставим что нужно, ждём пока установиться и перезагружаем компьютер!
[close]
3. Скачиваем SDK (Зеркало 1, Зеркало 2). Копируем данный архив в расшаренную папку AndLinux.
4. Установка окружения для портирования:
Стартуем AndLinux, запускаем под ним Konsole
Spoiler:
[close]
Выполняем команды: (Новая строка - ENTER, вместо user естественно пишем своё имя, после первой команды потребуется ввести пароль)
Spoiler:
Код
sudo mkdir /mmc
sudo chown user -R /opt
sudo chown user -R /home
sudo chown user -R /mmc
mkdir /opt/toolchains
mkdir /home/z6
mkdir /home/z6/build
mkdir /mmc/mmca1
tar -C /opt/toolchains -xzvf /mnt/win/motomagx-toolchains.tar.gz
cp /opt/toolchains/motomagx/setenv-z6.sh /home/z6
cp /opt/toolchains/motomagx/setenv-z6-2.sh /home/z6
[close]
5. Теперь запускаем окружение
Spoiler:
Код
cd /home/z6
. setenv-z6.sh
[close]
Spoiler:
[close]
6. Качаем исходники и кидаем их в папку AndLinux, распаковываем и пробуем собрать
Spoiler:
Код
cd /home/z6
tar -xzvf /mnt/win/Ваши_исходники.tar.gz
cd Ваши_исходники
./configure --host=arm-linux-gnueabi
make (или make install)
[close]
Если не конфигурируется, пробуем
Spoiler:
Код
./configure --host=arm-linux-gnueabi --enable-sdlui --without-x
[close]
Если приложению нужны data файлы - нужен параметр --prefix=./ - например
Spoiler:
Код
./configure --host=arm-linux-gnueabi --enable-sdlui --without-x --prefix=/mmc/mmca1/..Ваш путь
[close]
Или так
Spoiler:
Код
./configure --host=arm-linux-gnueabi --enable-sdlui --with-sdlsound --without-x --prefix=./
[close]
Не забываем выполнять команду make distclean - она удаляет существующие неправильные бинарники
Spoiler:
[close]
7. Если в исходниках отсутствует файл configure
вручную редактируем Makefile
ищем и заменяем строчки
Spoiler:
Код
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
[close]
8. Если конфигурирование и компиляция прошла без ошибок, вытаскиваем полученный файл из AndLinux'a с помощью Dolphin,
Не забываем кстати стрипать полученный экзешник, по такому коду (Где екзешник "x64" лежит в папке src, выполнять после make):
Spoiler:
Код
arm-linux-gnueabi-strip src/x64
[close]
Spoiler:
[close]
Он лежит по пути (Вкладка Root) \home\Z6\Ваши_Исходники\Исполняемый файл, для этого его нужно вырезать, перейти на вкладку home и кинуть в папку windows, после этого он появиться в C:\\AndLinux
Spoiler:
[close]
9. Копируем данный файл в корень карты памяти
и выполняем в телнете
Spoiler:
Код
cd /mmc/mmca1
export LD_LIBRARY_PATH=/mmc/mmca1/games/lib:$LD_LIBRARY_PATH
chmod +x Имя исполняемого файла
./Имя исполняемого файла
[close]
Если запустилось - отлично! Делайте пакет и выкладывайте!
------------------------------------------------------------------------------------
1. Правка управления (Ищите в исходниках по SDLK или клавишам):
Spoiler:
Код
layer[0].keys[0]=SDLK_LEFT;
player[0].keys[1]=SDLK_RIGHT;
player[0].keys[2]=SDLK_UP;
player[0].keys[3]=SDLK_DOWN;
#ifndef ALT_FIRE
player[0].keys[4]=SDLK_RCTRL
[close]
2. Правка разрешения (Ищите в исходниках по VIDEO или само разрешение)
3. Решение для добавления сворачивания приложения при входящем вызове (sms, флипе, других телефонных событиях) с остановкой звука делаем через замену процедуры SDL_PollEvent на собственную mySDL_PollEvent
Spoiler:
Код
-------------example.h-----------------------
int mySDL_PollEvent(SDL_Event *event);
// audio use sdl-lib
SDL_AudioSpec obtained;
boolean _audioSuspended;
void suspendAudio();
int resumeAudio();
// audio use sdl-mixer lib
void suspendAudio();
int resumeAudio();
void closeAudio(void);
--------------example.cpp--------------------
int mySDL_PollEvent(SDL_Event *event) {
int _r= SDL_PollEvent(event);
if (!_r)
return 0;
if (event->type == SDL_ACTIVEEVENT) {
if (event->active.state == SDL_APPINPUTFOCUS && !event->active.gain) {
suspendAudio();
for (;;) {
_r = SDL_WaitEvent(event);
if (!_r)
continue;
if (event->type == SDL_QUIT)
return 1;
if (event->type != SDL_ACTIVEEVENT)
continue;
if (event->active.state == SDL_APPINPUTFOCUS && event->active.gain) {
resumeAudio();
return 1;
}
}
}
}
return _r;
}
// if audio use sdl-lib
void suspendAudio() {
SDL_CloseAudio();
_audioSuspended = true;
}
int resumeAudio() {
if (SDL_OpenAudio(&obtained, NULL) < 0){
return -1;
}
SDL_PauseAudio(0);
_audioSuspended = false;
return 0;
}
// if audio use sdl-mixer-lib
void suspendAudio()
{
Mix_SuspendAudio();
}
int resumeAudio() {
int r = Mix_ResumeAudio();
if(r == -1){
closeAudio();
return -1;
}
}
void closeAudio(void) {
Mix_CloseAudio();
}
[close]
4. Мониторинг проблем "Segmentation fault"
Качаем gdb и распаковываем в телефон /mmc/mmca1/games
приложения должны быть собраны с префиксом '-g' и не должны быть пострипаные
Spoiler:
Код
ulimit -c unlimited
./<app>
Segmentation fault (core dumped)
файл <core> будет создан
../bin/gdb ./<app> <core>
[close]
5. утилита strace
Код
../bin/strace ./app
6. Скачивание исходников и их обновление
Spoiler:
Код
svn co http://сайт - скачивание
svn up - обновление
[close]
7. Скрипт запуска утверждённый минздравом:
Spoiler:
Код
#!/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
cd $mypath
exec $mypath/Ваш екзешник > $mypath/Ваш экзешник.log
[close]
8. Для портирования игр, в которых разрешение экрана 640х480 или 800х600, требуется правка координат в исходниках. Для первого случая нужно делить координаты на 2, для второго на 2.5, графику можно обработать программой VSO Image Resizer
-----------------------------------------------------------------------------------
Spoiler:
Мануал будет дополняться и разрабатываться, все что вы прочитали в мануале - это попытка систематизировать информацию.
Источники с которых бралась информация:
Motofan и Motorola Gaming Site
Огромное спасибо таким людям как: Lubomyr, Neomoto, Abram, AstaRoth,
[close]
Здесь можно скачать исходники:
Полезные ссылки, обязательные к прочтению начинающим разработчикам:
Spoiler:
--------------------------------------------------------------------
Мануалы данной темы:
Spoiler:
Если кто не может запустить ZN5Encoder в Magic box - пост #290
Нативные заставки на основе портированных мной и Neomoto демок! - пост #291
Мануал по установке Tmake в тулчейн, и правки созданного им MakeFile - пост #484
[close]