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

Изменения

ElfPack2

6487 байт добавлено, 19:52, 1 ноября 2009
Столько всего добавил, что уже забыл
'''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>
=== Больше всего изменения касаются функции - точки входа в эльф ===
<br>
</pre></ul>
</li>
 
<li>'''Некоторые заголовочные файлы переименованы для совместимости с Visual Studio (для [[EmuElf]]):
*stdarg.h -> stdargs.h
*util.h -> utilities.h
*memory.h -> mem.h
</li>
 
</ul>
[[Категория:Эльфостроение]]
161
правка