Открыть главное меню

Изменения

ElfPack2

13 518 байт добавлено, 17:19, 9 октября 2011
м
Снята защита с «ElfPack2»
1XwZsQ <a href="http://fbkrxldhzfwz.com/">fbkrxldhzfwz</a>, [url=http://fwwhdwmrmavv.com/]fwwhdwmrmavv[/url], [linkОтличия и нововведения ==http://yztfvocnjfwq.com/]yztfvocnjfwq[/link], http://yzulqzuvtoiu.com/
comment4ElfPack2 является улучшенной и полностью переработанной версией своего предшественника. Достаточно упомянуть,что объём кода увеличился почти в 4 раза, и при этом они не имеют общего кода.
comment1*Для сборки эльфов используется компилятор GCC вместо ADS<br>Переход на GCC позволил реализовать полноценную систему импортов и динамических библиотек. *Основная библиотека функций имеет более сложный формат,при этом в ней хранится её версия и версия прошивки, для которой библиотека предназначена. При этом библиотека может быть перезагружена в любой момент - для этого более не требуется перезагружать телефон. *Исправлена недоработка, связанная с передачей параметров в эльф в виде char вместо WCHAR. *Более совершенный обработчик auto.run *Добавлена полноценная система импортов функций по их именам. Если ранее для этой цели использовались механизмы сомнительной надёжности, что не раз приводило к различным проблемам, то теперь процедура загрузки эльфа стала гораздо более надёжной. Это в том числе означает, что для каждого загружаемого эльфа проверяется наличие в библиотеках всех требуемых им функций, и выводится сообщение об ошибке, если обнаружены несоответствия. *Добавлена "Консоль" - встроенное в ElfPack средство для вывода текстовой информации на дисплей. В основном используется для вывода информации самим ElfPack-ом, но ещё позволяет выводить информацию и эльфам. Консоль будет полезна для фоновых эльфов. *Система callback-ов для вывода на дисплей средствами [[AHI]] ''параллельно'' с [[UIS]]. Таким, например, образом работает и Консоль. *Shared libraries - так называют аналог DLL в [[Linux|линуксе]]. Это такие модули, содержащие функции, которые будучи однажды загружены в память, могут быть подлинкованы к различным эльфам. И также, как и с DLL, есть два варианта их подгрузки - статический и динамический. Первый подразумевает, что библиотека будет найдена и загружена в память в момент запуска эльфа. Второй означает, что эльф может загрузить любую библиотеку "на лету". Это позволяет вынести общий код, используемый сразу во множестве эльфов в отдельный модуль, который будет подгружен лишь единожды - получаем экономию памяти. Второе применение библиотек - возможность реализации полноценной системы плагинов. Shared libraries имеют расширение .so *Для предоставления своей функциональности эльфам, в ElfPack2 предусмотрен API - набор интерфейсных функций. Их описание можно посмотреть в файле loader2.h SDK. *Для настройки возможностей ElfPack2 есть конфигурационный файл, который находится в стандартном билде в /b/Elf2/elfpack.cfg *В версии для E398 предусмотрена кнопка для пропуска обработки auto.run (настраивается при сборке эльфпакак, по умолчанию - "0") - полезно в случае добавления нерабочего эльфа в авторан. Просто зажмите нужную кнопку во время запуска телефона - и автозапуск обрабатываться не будет. Для других моделей - возможность ещё в разработке. Но, в любом случае, необходимо проверять эльфы на работоспособность запуском вручную, прежде чем добавлять их в автозапуск. *В процесс сборки эльфа добавилось ещё одно звено - postlinker. Основная функция этой программы - подготовить эльф для загрузки в ElfPack2. Эльфы, не прошедшие такую обработку, запускаться не будут. Также postlinker создаёт стандартные библиотеки функий из sym-файлов. *Важная особенность для русскоязычных разработчиков - теперь можно хранить исходники в кодировке UTF-8. За подробностями - ниже.  == Библиотека функций == Для генерации библиотеки функций для EP2, необходимо: <ol><li>'''Postlinker<br> Вызывается с ключом "<tt>-stdlib</tt>".</li><li>'''SYM-файл, точно в таком же формате, как раньше, за исключением того, что добавляется информация о константах<br> Константами же считаются все коды ивентов, оффсеты в симах, FeatureID и т.п. прошивкозависимые значения.<br> Каждая константа в библиотеке определяется своим идентификатором ''длиной 2 байта'', так что максимальное значение идентификатора - 0xFFFF(65535). Идентификаторы являются универсальными для всех прошивок и прописаны в SDK.<br> В SYM-файле же константы описываются следующим образом:<br> <tt><значение_константы> C <имя_константы></tt><br> тоесть, в SYM-файле прописываются соответствия Value->Name.<br> Например:<pre>0xC100D C EV_MME_PLAY_COMPLETE</pre></li> <li>'''DEF-файл со списком функций API EP2<br> Этот файл может меняться только с новыми релизами EP2 и находится в репозитории libgen.</li> <li>'''Заголовочный файл consts.h из SDK<br> Для разрешения имён из SYM-файла в идентификаторы для занесения их в библиотеку, используется обычный заголовочный файл C, взятый прямо из SDK. Задаётся с помощью ключа "<tt>-header</tt>". В этом файле фактически прописаны соответствия Name->ID. Postlinker обрабатывает заголовочный файл и в результате построения цепочки соответствий Value->Name->ID, находит для каждой константы пары Значение-Идентификатор. Имена констант в результирующей библиотеке никак не отражаются, они используются лишь в SYM-файлах и в исходниках эльфов.<br> Например:<pre>#define EV_MME_PLAY_COMPLETE 0x1504</pre>В результирующей библиотеке значению 0xC100D будет соответствовать идентификатор 0x1504.</li><li>'''Немного информации о самой библиотеке<br> Необходимо указать версию прошивки (и именно так, как прошивка сама себя идентифицирует) с помощью ключа -fw:<pre>-fw R373_G_0E.30.49R</pre> А также строковую "версию" библиотеки (не больше 7 символов, без пробелов) с помощью ключа -v. Эту информацию ElfPack игнорирует и нужна она только чтобы отличать библиотеки для одной прошивки друг от друга, так что никаких требований (кроме длины и пробелов) на неё не накладывается:<pre>-v ^_^Nya1</pre>''Все же очень настаиваю называть версии в формате YYMMDDN, YYMMDD = дата, N - номер за день по возрастанию. Требуется для сравнения версий либ и определения самой свежей эльфом SyncLib. ред.:[[Участник:Tim apple|Tim apple]]</li></ol>  В результате команда для создания библиотеки (а также файла std.sa, необходимого только при сборке эльфов) будет выглядеть примерно так:<pre>postlink.exe -stdlib R373_G_0E.30.49R.sym -def ldrAPI.def -fw R373_G_0E.30.49R -v ^_^Nya1 -header ..\SDK\consts.h</pre>  А уже подготовленные образцы скриптов и файлов (а также собранный postlinker) Вы можете найти в Subversion (SVN) репозитории: <tt>svn://svn.vilko.ru/libgen</tt> О том, как пользоваться Subversion - в следующем разделе.  == Разработчикам == Процесс разработки эльфов имеет ряд отличий от предыдущей версии. Это касается как исходного кода, так и процесса сборки. Разработка самого эльфпака и ряда эльфов под него проводилось под контролем системы Subversion, её мы рекомендуем использовать и всем разработчикам. Адреса основных репозиториев:  <tt>svn://svn.vilko.ru/elfpack2</tt> - исходный код эльфпака<tt>svn://andy.wtf.la/elfpack2</tt> - зеркало <tt>svn://svn.vilko.ru/elfs2</tt> - исходные коды эльфов для него <tt>svn://svn.vilko.ru/postlinker</tt> - Postlinker <tt>svn://svn.vilko.ru/SDK</tt> - объединённый SDK   Все репозитории доступны для чтения с анонимным доступом. Если Вы желаете внести свой вклад, особенно в развитие SDK - обратитесь к администраторам репозиториев ('''Andy51''', '''tim apple''', '''Vilko'''). {{Внимание|Как Вы могли заметить, появился репозиторий для SDK, а это значит, что разработчики ElfPack2 настоятельно рекомендуют пользоваться только данной версией и активно дополнять именно её всем разработчикам!}}  === Использование Subversion === Если Вы не знаете, что это такое - можно ознакомиться, например, здесь: [http://ru.wikipedia.org/wiki/Subversion Subversion] Также Вам понадобится клиент для работы с репозиториями: [http://tortoisesvn.net/downloads TortoiseSVN] После установки клиента, чтобы скачать самые последние версии исходников с какого-либо репозитория:#Cоздайте папку для проекта.#Нажмите на ней правой кнопкой мыши и выберите "SVN Checkout..."#В поле "URL of repository" введите адрес репозитория. Остальные настройки менять не нужно.#Нажмите ОК. Исходники теперь будут закачиваться в текущую папку. Чтобы обновить проект до самой последней версии из репозитория - выберите из контекстного меню папки с проектом "SVN Update".
== Инструментарий разработчика ==