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

Изменения

ElfPack2

4299 байт добавлено, 19:07, 4 ноября 2009
Добавил раздел про библиотеку функций
*В процесс сборки эльфа добавилось ещё одно звено - postlinker. Основная функция этой программы - подготовить эльф для загрузки в ElfPack2. Эльфы, не прошедшие такую обработку, запускаться не будут. Также postlinker создаёт стандартные библиотеки функий из sym-файлов.
 
 
== Библиотека функций ==
 
Для генерации библиотеки функций для 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>
 
</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) Вы можете найти в репозитории:
 
<tt>svn://svn.vilko.ru/libgen</tt>
161
правка