161
правкаИзменения
ElfPack2
,Столько всего добавил, что уже забыл
'''ElfPack2''' — это развитие предыдущей версии [[ElfPack]]-а для [[Motorola]], где учтён опыт его использования как со стороны конечного пользователя, так и со стороны разработчика [[ELF|эльфов]], исправлено множество моментов, досаждавших ранее, а также значительно расширена функциональность.
== Отличия от предыдущей версии ==
*Исправлена недоработка, связанная с передачей параметров в эльф в виде char вместо WCHAR
*Более совершенный обработчик auto.run
== Нововведения ==
*Для настройки возможностей ElfPack2 есть конфигурационный файл, который находится в стандартном билде в /b/Elf2/elfpack.cfg
*В версии для E398 предусмотрена кнопка для пропуска обработки auto.run (настраивается в конфигепри сборке эльфпакак, по умолчанию - "0") - полезно в случае добавления нерабочего эльфа в авторан. Просто зажмите нужную кнопку во время запуска телефона - и автозапуск обрабатываться не будет. Для других моделей - возможность ещё в разработке. Но, в любом случае, необходимо проверять эльфы на работоспособность запуском вручную, прежде чем добавлять их в автозапуск.
*В процесс сборки эльфа добавилось ещё одно звено - postlinker. Основная функция этой программы - подготовить эльф для загрузки в ElfPack2. Эльфы, не прошедшие такую обработку, запускаться не будут. Также postlinker создаёт стандартные библиотеки функий из sym-файлов.
== SDK Разработчикам ==
Процесс разработки эльфов имеет ряд отличий от предыдущей версии. Это касается как исходного кода, так и процесса сборки.
Разработка самого эльфпака и ряда эльфов под него проводилось под контролем системы Subversion, её мы рекомендуем использовать и всем разработчикам. Адреса основных репозиториев:
<tt>svn://svn.vilko.ru/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".
== Инструментарий разработчика ==
Как уже упоминалось ранее, для сборки эльфов используется '''GCC'''. А именно, набор [http://www.devkitpro.org devkitPro], который широко используется для разработки под GameBoy Advance, Nintendo DS, GP32, Playstation Portable и GameCube. Из его состава, правда, понадобится только devkitARM часть, которая также включает множество бесполезных для разработчика эльфов приложений и требует много трафика для скачки. Возможно, найдутся желающие сделать специальный пакет программ для разработчиков эльфов...
Скачать установщик можно здесь: [http://sourceforge.net/projects/devkitpro/files/Automated%20Installer/ Automated Installer]
=== Сборка эльфа ===
Пример простейшего скрипта для сборки эльфа (make.cmd):
<pre>
@echo off
del prelink.elf
arm-eabi-gcc -c -Wall -mbig-endian -mthumb -mthumb-interwork -I..\SDK -fshort-wchar -nostdlib -O -DEP2 helloworld_snd.c
arm-eabi-ld -pie -EB -O -nostdlib helloworld_snd.o std.sa -o prelink.elf
del /Q *.o
del /Q telf3.elf
postlink prelink.elf
ren res.elf helloworld_snd.elf
pause
</pre>
Некоторые пояснения:
*Ключ -I указывает относительный путь к SDK
*Файл std.sa выполняет функцию, аналогичную Lib.o предыдущей версии эльфпака
*Результат работы arm-eabi-ld мы передаём в postlink. Он создаёт результирующий файл res.elf - его мы переименовываем в helloworld_snd.elf и загружаем в телефон.
Для сборки C++ проекта используйте '''arm-eabi-g++''', а также добавьте следующие ключи:
<pre>
-fno-enforce-eh-specs -fno-rtti -fno-use-cxa-get-exception-ptr -fno-exceptions -fno-non-call-exceptions
</pre>
=== Сборка shared library ===
В общем случае, скрипт сборки аналогичен скрипту для обычного эльфа, за исключением:
<ol>
<li>
Используйте "<tt>-shared</tt>" вместо "<tt>-pie</tt>"
</li>
<li>
К строке линкера (arm-eabi-ld) добавляется "<tt>-soname=<внутреннее_имя_библиотеки></tt>"
</li>
<li>
К строке постлинкера добавляется ключ "<tt>-shared</tt>" и "<tt>-def <имя_def_файла></tt>"
Def-файл предназначен для определения списка функций и глобальных переменных (хотя вторые не рекомендуется делать доступными), к которым имеют доступ эльфы, подключающие данную библиотеку.<br><br>
Пример def-файла:
<pre>
testlibfn
sharedVar
</pre>
</li>
</ol>
Пример самой библиотеки можно посмотреть в репозитории svn://svn.vilko.ru/elfs2/libtest
== Различия в исходных кодах ==
С различиями можно наглядно ознакомиться на примере helloworld из репозитория svn://svn.vilko.ru/elfs2/hw - важные участки кода отмечены #ifdef-ами.
=== Больше всего изменения касаются функции - точки входа в эльф ===
<br>
</pre></ul>
</li>
<li>'''Некоторые заголовочные файлы переименованы для совместимости с Visual Studio (для [[EmuElf]]):
*stdarg.h -> stdargs.h
*util.h -> utilities.h
*memory.h -> mem.h
</li>
</ul>
[[Категория:Эльфостроение]]