|
GP2X Community Новостной форум посвященный консолям GP2X
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
EugeneP
Местный
Возраст: 43 Зарегистрирован: 04.06.2009 Сообщения: 170
Группы:
|
|
Есть техническая возможность создавать самодостаточные бандлы для любой из GP консолек (нужен linux+ root-доступ).
Т.е. когда всё приложение, включая бинарь, данные и пользовательские сохранения, заныкано в один большой .gpe-шник. При некотором желании можно туда же закатать бинари для всех платформ сразу и запускать нужный в зависимости от окружения.
Причём так можно затрамбовать любое существующее приложение. Например iso + эмуль psx.
|
|
Вернуться к началу |
|
|
EugeneP
Местный
Возраст: 43 Зарегистрирован: 04.06.2009 Сообщения: 170
Группы:
|
|
Вот пример подобного бандла:
AudioRace-caanoo-bundle-v3.gpe
Аудиорэйс для Кэну с трэками и прочим нутром запакована в один файл.
Суть метода:
- соединяем скрипт и образ диска в один файл.
- используем losetup для монтирования образа из середны файла
- используем ramfs для подмены оригинального gp2xmenu и перехвата выхода из прииложения
РАБОЧИЙ АВТОМАТИЗИРОВАННЫЙ СКРИПТ ДЛЯ ИЗГОТОВЛЕНИЯ БАНДЛОВ (версия 2)
README:
Цитата: | ИЗГОТОВИТЕЛЬ БАНДЛОВ ДЛЯ GP2x/WIZ/CAANOO
Требуется:
1) Линукс
2) Право на sudo
3) Утилиты для создания соответствующей ФС (для FAT это dosfstools или что-то типа того)
4) Место на диске в 3 (три) раза превышающее размер исходного приложения.
Как пользоватся:
0) распаковывам архив и знакомимся с этой инструкцией
1) копируем в папочку contents наше приложение.
2) делаем стартовый .gpe скрипт приложения и кладем его в contents.
ОГРАНИЧЕНИЯ:
- Скрипт должен быть именно shell-скриптом. Если приложение является бинарником, который в обёртке не нуждается, то обёртку нужно создать.
- Скрипт-обёртка ОБЯЗАН заканчиваться так:
---
sync
cd /usr/gp2x/
exec ./gp2xmenu
---
буква в букву.
3) берём шаблонный bundle.config, копируем его в корень contents и заполняем как нам надо.
- параметр BINARY должен содержать путь (относительно contents) до созданного в п.2 .gpe скрипта-обёртки
- длинна параметров (названия, списка модулей и прочих) должна быть разумной - суммарно < 500 байт.
- без дополнительных плясок работает только FS=vfat
4) запускаем ./make-bundle.sh (из терминала), он спросит пароль на sudo (это нужно для монтирования образа).
Если не было ошибок то мы получаем файлик банндла с именем AppName-bundle.gpe
Всё |
СКАЧАТЬ bundle-maker-02.tgz
TODO:
- придумать метод определения окружения из скрипта
- добавить в скрипт chroot дабы совсем изолировать приложение от системы
- сделать Win-версию
Последний раз редактировалось: EugeneP (Сб Май 14, 2011 7:59 pm), всего редактировалось 3 раз(а) |
|
Вернуться к началу |
|
|
Hahahoj
Site Admin
Пол: Возраст: 51 Зарегистрирован: 08.10.2008 Сообщения: 1848
Группы:
|
|
Ух. Я то думал что речь об очередном воплощении патченной на запись cramfs. Надо будет покурить мануалы после работы, сейчас картинка несколько расплывчата.
Вопрос - есть ли возможность из "залупенного" контейнера обратится к данным лежащим в других папках SD-шки?
Есть ли возможность хранить данные в компрессированных контейнерах?
Есть ли возможность шифровать эти контейнеры?
Есть ли возможность клеить контейнеры друг к другу (к примеру отдельный пак эмулятора перезаписывающий тот, что встроен изначально в стартовый контейнер?
Хочу сейчас и многого
Покурю маны и вдумчиво перчитаю статью - станет конечно же понятнее. Ну а так вкратце на пальцах интересно было бы услышать ответы
_________________ Просто Вовк |
|
Вернуться к началу |
|
|
EugeneP
Местный
Возраст: 43 Зарегистрирован: 04.06.2009 Сообщения: 170
Группы:
|
|
Hahahoj писал(а): | Ух. Я то думал что речь об очередном воплощении патченной на запись cramfs. Надо будет покурить мануалы после работы, сейчас картинка несколько расплывчата. |
Бандл такого вида можно сравнить с картриджем для приставки - вещь в себе. Вообще-то идея проста и очевидна. sfx-архивы и бинарные инсталеры под линукс устроены аналогично, только вместо образа архив.
Hahahoj писал(а): | Вопрос - есть ли возможность из "залупенного" контейнера обратится к данным лежащим в других папках SD-шки? |
Да, но такой доступ можно ограничить отдельными папками или полностью перекрыть. (см. chroot-окружение)
Hahahoj писал(а): | Есть ли возможность хранить данные в компрессированных контейнерах? |
Сложно но можно. Во всяком случае неизменяемые данные можно, но потребуется класть внутрь контейнера соотв. модуль ядра. Такой модуль перестанет работать при обновлении ядра в прошивке с вероятностью 95% (см. squashfs)
Hahahoj писал(а): | Есть ли возможность шифровать эти контейнеры? |
аналогично предыдущему пункту (см. cryptoloop)
Hahahoj писал(а): | Есть ли возможность клеить контейнеры друг к другу (к примеру отдельный пак эмулятора перезаписывающий тот, что встроен изначально в стартовый контейнер? |
Да. Просто склеиваем несколько образов: один с эмулем, другой с данными, третий с дровами и т.д.
|
|
Вернуться к началу |
|
|
K0ndrat
Постоялец
Пол: Возраст: 34 Зарегистрирован: 26.10.2010 Сообщения: 32
Группы: Нет
|
|
Собственно, мой вопрос: как это влияет на производительность?
В связи с тем, что я особо не понимаю, что происходит , вот такое соображение-вопрос: мне кажется, что пользовательские сохранения и настройки держать лучше в отдельном файле а-ля "профиль пользователя", такое возможно? Чтобы было примерно так: все исполняемые файлы игры и ресурсы (было бы неплохо, если бы действительно с компрессией), скажем, в один файл gpe, а все настройки во втором файле в папке с игрой.
|
|
Вернуться к началу |
|
|
BiSe Trojanov
Постоялец
Пол: Возраст: 35 Зарегистрирован: 21.04.2011 Сообщения: 18 Откуда: Казань Группы: Нет
|
|
А каков смысл данного приспособления? Концепт? Оно же будет тормозить и пожирать ОЗУ.
|
|
Вернуться к началу |
|
|
Hahahoj
Site Admin
Пол: Возраст: 51 Зарегистрирован: 08.10.2008 Сообщения: 1848
Группы:
|
|
Имхо.
Насколько я понимаю тормоза в случае с отсутствием компрессии будут довольно несущественные, возможно даже будет некий прирост производительности засчет куда меньшего напряга с чтением множества мелких файлов и даже просто обращения к таким каталогам.
Насчет ОЗУ -проблем быть тем более не должно, подавляющее большинство программ до сих пор рассчитаны на Ф-ки (порты приложений оттуда).
Ну а для чего нужно - довольно много обсуждавшийся нами ранее контейнер для приложений в одном формате и без привязки как к конкретной консоли, так и пути до игры.
Возможность создания удобного в использовании онлайн архива для игр и приложений.
Кондрат, полностью с тобой согласен насчет выноса настроек за пределы такого контейнера.
_________________ Просто Вовк
Последний раз редактировалось: Hahahoj (Пт Апр 29, 2011 5:33 pm), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
EugeneP
Местный
Возраст: 43 Зарегистрирован: 04.06.2009 Сообщения: 170
Группы:
|
|
О смысле:
1) proof-of-concept.
2) Некоторые применения изложил Hahahoj
3) Мне, например, греет душу выдавать юзеру один файл, который можно просто запустить без ручной установки.
Вообще можно понапридумывать всякого. Зависит от сложности стартового скрипта и фантазии программиста.
BiSe Trojanov
Тормозить не будет. Расход памяти минимален. Чуть дольше запускается.
|
|
Вернуться к началу |
|
|
Hahahoj
Site Admin
Пол: Возраст: 51 Зарегистрирован: 08.10.2008 Сообщения: 1848
Группы:
|
|
Кстати, предлагаю сразу немножко стандартизировать такой скрипт-хеадер и задать комментариями в нем:
1) параметр VERSION=0001 - версия соглашения по формату и параметрам используемым в GPE-шнике и его обвязке (ini-шка, тайтл, иконка).
2) параметр SIZE=512 или число, говорящее о том, сколько байт занимает сам скриптовый хеадер.
Возможно пригодится потом при необходимости автоматизированной разборки такого GPE файла.
3) параметр GROUP=число 1-255 - тип программы
К примеру:
01 - софт
10 - игра-экшен
11- игра-аркада
12 - игра-квест
и т.д.
4) параметр издатель
5) параметр производитель
6) год выхода
7) платформа на которой идет приложение
GP2XF=N
WIZ=Y
CAANOO=Y
родная платформа (для эмуляторов)
EPLATFORM=SNES
9) совместимость
TV-OUT=N
USB-JOYSTICK=N
NETWORK=N
OVERCLOCK=750
9) описание продукта:
CONTENT="Лучшая версия игры Aggressive Pong, выходившая для консолей во все времена."
10) индивидуальный номер проекта (все проекты предлагаю регистрировать)
Как-то так. Расширьте и углубьте, пожалуйста
.ПС первые два пункта обязательны - остальные возможно склеить вместе с маленькими мультиками али ВИЙКА в тайтлы, проигрываемые специальным командером.
Т.е. физически итоговый продукт видится состоящим из следующего:
1) Большая итоговая гпешка
2) инишка для стандартного броузера
3) иконка для стандартного броузера
4) тайтлник для стандартного броузера
5) контейнер паспорта продукта, возможно с ипортированными в него настройками и сейвами.
_________________ Просто Вовк |
|
Вернуться к началу |
|
|
EugeneP
Местный
Возраст: 43 Зарегистрирован: 04.06.2009 Сообщения: 170
Группы:
|
|
Я те больше скажу. всё можно затрамбовать внуть, а при (первом) пуске спрашивать "Установимся в меню, али так играем?"
И аглы
|
|
Вернуться к началу |
|
|
Hahahoj
Site Admin
Пол: Возраст: 51 Зарегистрирован: 08.10.2008 Сообщения: 1848
Группы:
|
|
Пример для чего разбивать:
Есть контейнер с неизменяемой информацией (сама игра) - общий для всех консолей
Есть контейнер с эмулятором, запускником и нужными либами - машинозависимая часть для каждой платформы
Есть контейнер с сейвами и пользовательскими настройками - чисто для того, чтобы мы могли держать игры в отрелизенном состоянии и смело их грохать, при очистке места, зная что всегда можем вернуться назад.
В итоге получаем:
1) Независимость отрелизенной контейнером игры от платформы на которой идет запуск с базой "запускается/не запускается/не проверено", "проходится/не проходится/не проверена" на конкретном эмуляторе под конкретную платформу
2) Поддержка такими контейнерами уже отрелизенных игр и новых версий эмуляторов
3) Поддержка базой других консолей (Динга, Пандора и прочее)
Смысл - возможность создания большой мобильной игровой базы вроде Аппстора (куда кроме игр может быть включено и медиа, приложения и пр.), не привязанной в итоге к конкретной консоли и следовательно легко масштабирующейся под нужные платформы. Либо маленькой, но кроссплатформенной, удобной для пользования и поддержки. И поддержка в итоге возможна не только нашим коммунити, но и пользователями других платформ, которые будут создавать базовые контейнеры для своих релизов.
_________________ Просто Вовк |
|
Вернуться к началу |
|
|
quasist
Профи
Пол: Возраст: 38 Зарегистрирован: 28.10.2008 Сообщения: 43
Группы:
|
|
разве в faildore не сделали контейнер pnd ?
_________________
|
|
Вернуться к началу |
|
|
Hahahoj
Site Admin
Пол: Возраст: 51 Зарегистрирован: 08.10.2008 Сообщения: 1848
Группы:
|
|
Делаем контейнер под Виндой.
В общем, разобрался как сделать всё тоже, но под Виндой и без особых проблем.
По пунктам:
1) Ставим программу Ultra Iso.
2) Качаем шаблон образа диска отсюда:
http://wiz.rusbase.net/forum/files/shablon_146.rar
3) Скидываем весь контент игры которую хотим поместить в контейнер на флешку и подстраиваем всё что нужно, проверив работоспособность на Кену.
Не забываем поправить все пути на относительные, т.е. так чтобы директории указывали на объекты не через корень флешки /mnt/sd/games/pochahontas/Data , а относительно текущей директории, к примеру ./Data
Также настраиваем автозагрузку, чтобы игра автоматически запускалась при старте главного gpe-шника.
Убеждаемся что всё работает.
4) Смотрим размер получившейся директории в байтах.
Умножьте его на 0,98 - получите примерный размер нужного вам контейнера.
Если в игре/эмуляторе есть сейвы - оцените их примерный размер.
Также игра может создавать временные файлы. Учтите и это.
В итоге к получившемуся ранее числу прибавьте требуемый запас.
Так мы определили примерный размер требуемого контейнера.
Пример:
Подсчет размера директории планируемой к засовыванию в контейнер игры сказал нам что игра занимает 530 453 164 байта.
Умножаем на 0,98. Получаем число 519 843 840. Учитывая то что игра сейвится в контейнер сейвами под 175 килобайт берем за основу размер контейнера в 520 Мб.
5) Заходим в UltraIso, через открыть файл открываем файл шаблона shablon.ima
Видим пустой том размером 1,2 Мб
6) Жмем "F9" или заходим туда же через меню: Действия->Изменить формат образа
В открывшемся окне в поле "New Image Size" вместо 2.88 Мб ставим расчитанный нами ранее размер контейнера в мегабайтах.
В поле "Сохранить как" указываем путь к тому месту где будет лежать наш итоговый контейнер и его имя.
Жмем "ОК".
7) Спустя немного вы увидите что размер контейнера увеличился до нужной величины. Чтоже, берем содержимое проверенной нами ранее папки и перетаскиваем на окошко с образом.
Убеждаемся, что места хватило и можем посмотреть, сколько места осталось пустым - эти данные отображаются на линейке в верхнем правом углу программы.
Убеждаемся, что пути легли правильно (к примеру запускник находится в корне образа).
Задаем имя тому контейнера. (Правая кнопка мыши на имени, "переименовать").
Сохраняем контейнер на диск (инструмент "сохранить" на панели задач)
Образ готов. Закрываем UltraIso.
8) Теперь займемся созданием скрипта. Для его редактирования (и редактирования всех скриптовых файлов для консоли) нам пригодится специальный редактор Notepad ++. Он умеет автодетектить открываемые на редактирование файлы на предмет соответствия их Linux-стандарту и ваши изменения запишутся в том же стандарте, что нам и нужно.
Если открыть скриптовый файл простым нотепадом - вы не увидите визуальной разницы при редактировании, но после сохранения файла в стандартном Windows формате и его запуска скрипт просто зависнет.
Для работы со скриптами скачаем программу:
http://notepad-plus-plus.org/
устанавливаем её.
9) Жмем правую кнопку мышки на имени shablon.1 и выбираем пункт "Edit with Notepad++"
Скрипт открывается.
Первым делом регистрируем релиз на нашем форуме (этот номер должен дать однозначную привязку сформированного приложения к паспорту, информации вроде дополнительного контента, описаний, остов и прочего и пр. если руки таки дойдут до организации апликешнстора):
http://wiz.rusbase.net/forum/viewtopic.php?p=1669
Ставим номер релиза в строке "SERIALN=".
G-если игра, A-если апликейшн, далее 6 цифр номера релиза (последний зарегеный в специальной теме на нашем форуме), далее базовая платформа , к примеру SCD, GP2X, WIZ, CAN, далее номер версии из 4 цифр (увеличивается вами по мере выхода новых версий программы).
Пример:
G0000001-SCD-0001 - игра Yumemi Mystery Mansion - перенесенная c Sega CD
Если не хотите регистрировать - оставьте забитый по умолчанию нулевой серийник, либо вовсе грохните эту строку.
10) Обращаем внимание на два следующих пункта:
Код: | APP=ymm
BINARY=PicoDrive.gpe |
Выставляем в APP имя нашего приложения
В BINARY стартового скриптового файла в самом контейнере.
11) Для правильной работы получившейся игры необходимо чтобы размер скриптового файла был кратен размеру сектора образа контейнера. Т.е. скрипт должен занимать у нас 512 байт. Это легко проверить, посмотрев вниз на поле lenght строки состояния Notepad++. Оно должно показывать число 512. Если это не так, то добейте или уберите лишние символы в конце скриптового файла.
Всё это сохраняем под именем проекта и идем дальше.
11) Теперь нам нужно склеить эти два файла.
Не мудрствуя лукаво сделаем это в Тотал Коммандере.
Переименовываем два файла в файлы с одним именем, но с расширением отличающимся на единичку, к примеру:
proekt.1 - так мы переименовали запускаемый файл
proekt.2 - так мы переименовали образ контейнера
Встаем на первый файл, жмем "Files"->"Combine files..." и клеим.
Переименовываем в project.gpe
Собственно всё.
К зарегистрированному релизу стоит сразу же оформить паспорт, шаблон для которого будет приложен после его обсуждения.
/зы
Вместо второго, пятого и шестого пункта (создание образа требуемого размера из шаблона) можно сразу создать такой образ с нуля (но работает не на всех версиях Ultra ISO).
Для этого заходим Файл->Новый->Образ Дискеты
Указываем требуемый размер образа диска (расчитанный нами ранее) и систему "No System", Жмем "ОК" и забиваем образ нашей игрой.
Описание: |
Шаблон для создания контейнеров |
|
Скачать |
Имя файла: |
Shablon.rar |
Размер файла: |
1.25 KB |
Скачано: |
10026 раз(а) |
_________________ Просто Вовк
Последний раз редактировалось: Hahahoj (Вт Май 03, 2011 12:26 am), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
Hahahoj
Site Admin
Пол: Возраст: 51 Зарегистрирован: 08.10.2008 Сообщения: 1848
Группы:
|
|
Пример паспорта для игры/эмуляторной игры:
прошу посмотреть и высказать идеи:
Файл G000001-SCD-0001.wrn
Код: |
#секция заголовка описания
# версия описания на релиз
VERSION=0001
# версия стандарта описания
DRULES=0001
# дата релиза
DRELEASE=03.05.2011
# объем релиза
BYTES=223477906
# CRC релиза
CRC=2FDC45A0
MD5=a27b1b20d0e91a72e383699e6d959205
#секция описания оригинальной игры
#первый параметр TITLE - название игры в той версии которая конвертирована
TITLE=Yumemi Mystery Mansion
#регион оригинальной игры -PAL/USA/JAP/FREE
REGION=PAL
#внутренний номер версии оригинальной игры
SOURCE=4430-50
#дата выхода игры
DATE=1993
#Разработчик
DEVELOPER=System Sacom
#Издатель
PUBLISHER=Sega
#Языки English, Russian, Japan - перечисление всех возможных
RELIASE=Rrhany
LANGUAGE=English
# группа Games/App/Video/Music/Text/Media/Tutorial
GROUP=Games
# жанры игр:
# тип приложения:
GENRE=Horror
GENRE=Adventure
GENRE=Interactive Movie
#Короткое описание для подстрочника с названием файла. Желательно не больше нескольких слов
RUSSHORT=Квест в стиле интерактивного фильма
ENGSHORT=Interactive movie adventure/
#Полное описание игры. Заканчивается командой END
RUSFULL=В темном лесу есть странное место. Издавна ходят легенды о том, что люди оказавшиеся там превращаются в бабочек.
Вот и вашу сестру ждало это событие. Сможете ли вы спасти её, пока еще можно?
END
ENGFULL=More more and more
END
#Работоспособность, перечисляются только те платформы которые тестились
CAANOO=YES
WIZ=YES
GP2X=YES
#добавочные описания альтернативных версий
#альтернативные названия игры
TITLE=Mansion of Hidden Souls
TITLE=Yumemi Yataki no Monogatari
# альтернативный издатель
PUBLISHER=Vic Tokai
#Описание необходимых для запуска стороних к оригинальной игре элементов (встроенных в контейнер)
#Необходим Picodrive
NEEDTITLE=PicoDrive 1.80
#Номер регистрации пикодрайва в общей базе - пока не зарегестрирован
NEEDSERIAL=NO |
Версия для Сатурна, если появится эмулятор и она будет перенесена получит название G000001-SAT-0001
Теперь еще вопрос.
Поскольку символические ссылки создать невозможно немного неясной видится судьба сейвов в контейнере.
Вижу пока только один способ - к каждой игре прикладывать "бекапер" сейвов, который будет переписывать сейвы (либо ввести поле DIRSAVE в паспорт содержание директорий в которых будет бекапится одной общей программой).
Может как-то можно таки перенаправить сейвовые директории на реальные папки на SD?
Пока идей нет 8/
_________________ Просто Вовк |
|
Вернуться к началу |
|
|
EugeneP
Местный
Возраст: 43 Зарегистрирован: 04.06.2009 Сообщения: 170
Группы:
|
|
Цитата: | 11) Для правильной работы получившейся игры необходимо чтобы размер скриптового файла был кратен размеру сектора образа контейнера. Т.е. скрипт должен занимать у нас 512 байт. Это легко проверить, посмотрев вниз на поле lenght строки состояния Notepad++. Оно должно показывать число 512. Если это не так, то добейте или уберите лишние символы в конце скриптового файла.
Всё это сохраняем под именем проекта и идем дальше. |
Не обязательно кратный сектору, просто размер должен быть заранее оговорен (прописан в скрипте)
Цитата: | Поскольку символические ссылки создать невозможно немного неясной видится судьба сейвов в контейнере. |
Если определились куда класть сейвы, то mount --bind /real/folder /bind/folder легко заменяет симлинк (правда при активном I/O даёт повышенные накладные расходы). Ну и размонтировать под конец надо.
|
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы можете скачивать файлы
|
Powered by phpBB © 2001, 2005 phpBB Group
|