Так уж сложилось, что отдельной темы для armpc на форуме нет. А пакет время от времени обновляется, и обновления остаются многими незамеченными.
ARM Patch Compiler - набор для компиляции патчей. Делал я его для себя, делал так, как удобно работать мне. В качестве компилятора в пакете используется FASMARM. Обновления и исходники можно взять на http://arm.flatassembler.net/ (следует учесть, что компилятор в armpc может отличаться от того, что на официальном сайте).
Дальше пойдёт набор бессвязных фактов
- Многие не знают, но fasmarm вполне можно использовать и вне armpc, он даёт на выходе бинарник.
- make.bat с давних пор нужно передавать максимум два параметра - имя исходника и имя raw/cxc файла. Базовый адрес передавать не нужно, он определяется автоматически. Если внутри make.bat указать полное имя наиболее часто используемого raw/cxc файла, при запуске make.bat достаточно указать только имя исходника.
- Файл x.inc содержит описания макросов. ADR и MOVL - это не команды, это макросы. Некоторые ключевые слова в x.inc заменяются на макросы (code16, code32, ldr, org), поэтому комплияция со включением x.inc и без него даёт разный результат.
- Макросы в fasmarm, в отличие от команд, регистрозависимы. Макросы ldr/code16/code32/movl продублированы и в верхнем регистре, а вот org нет. Поэтому если вы собираете патч, используйте org, а если вы хотите получить простой бинарник, вам нужен ORG.
- В исходниках можно использовать переменные системного окружения (свойства системы, дополнительно, переменные среды). Для себя я добавил переменную FASMINC, в значении которой указал полный путь к каталогу, где лежит armpc (помните, для вступления действия в силу иногда может потребоваться перезагрузка). Так можно компилировать исходники, лежащие в любых папках, без указания полного пути к x.inc. Код:
include "%fasminc%\x.inc"
FAR+ARMPC Мало кто использует FAR Manager в повседневности, а вот я в нём постоянно. И компиляцию запускаю из FAR так, как мне удобно. А конкретней - простое нажатие enter на исходнике собирает патч для z610, нажатие ctrl+pgdn выдаёт меню со списком прошивок, для которых будет собираться патч. Делается оно легко:
f9 -> commands -> file associatoins -> ins -> маска файла *.asm -> описание какое вам нужно -> нужная команда на выполнение для enter и ctrl+pgdn.
У меня команды выглядят примерно так: Код:
make.bat "!.!" C702_R3EF001
или для ручного ввода имени таргета: Код:
make.bat "!.!" !?$armpc$target?Z610_R6DA001!
Нужно учесть, что если для типа файла есть только одно действие (как у меня на enter), то оно выполняется молча, а если несколько разных (ассоциация с *.asm добавлена несколько раз, команды на выполнение для ctrl+pgdn отличаются), то показывается меню.
В последней версии armpc компилятор чуть поправлен: - теперь он понимает movs/cmps/adds и прочие "s" в thumb безо всяких макросов (arm режим в патчах используется нечасто, но кто-то мог допустить ошибку, убирая s у арм-команд); - ldr и adr работают с адресами без скобок, макрос для этого больше не нужен; - du в качестве аргумента должны подаваться строки в utf8 (т.е. сам исходник при этом должен быть сохранен в utf8 без BOM).
BOM - специальный маркер, позволяющий другим приложениям однозначно идентифицировать этот файл. В частности сохранить файл с BOM или без BOM можно во встроенном редакторе FAR и в notepad.
Прошивки могут лежать в папке %firmwares% в одном из видов, которые можно подглядеть в make.bat, сработает любой вариант, а если их несколько - первый из них:
den_po, Если у меня в исходнике написано: ;W995 SW-R1GA026 ;Phone Number Region ;Отображение имени опреатора при входящих/исходящих вызовах ;Регионы пишем в файле "/usb/other/ini/PNumRegions.ini" (файл сохраняем в ANSI-кодировке!) ;Поддержка Русской Win-кодировки ;v 1.1 ;(c) Amir_82111 ;(e) Joker XT
и при компиляции у меня получается: ;W995_SW-R1GA026 ;W995 SW-R1GA026 ;Phone Number Region ;Отображение имени опреатора при входящих/исходящих вызовах ;Регионы пишем в файле "/usb/other/ini/PNumRegions.ini" (файл сохраняем в ANSI-кодировке!) ;Поддержка Русской Win-кодировки ;v 1.1 ;(c) Amir_82111 ;(e) Joker XT ;pAtChFiLe=/boot/phone_app.cxc
Можно как-то сделать, чтоб в случае если в исходнике уже есть прописана модель телефона и его прошивка, то не вписывать автоматом таргет ещё ?
Therion, казалось бы, чего проще, не пиши в исходнике модель/прошивку и всё. если так уж сильно хочется прошивку вписать, прописывай комментарий после шапки, а между ними пустую строчку оставь. типа так
в самой последней версии есть проблема с компилированием текста в юникоде. он компилится хз как,но на экране одни квадратики. сам не верил пока не проверил
долго у меня не доходили руки выложить обновлённый батник....Но, когда всёже поборол свою лень, захотелось собрать все свои доработки из разных отдельных скриптов. Тут выяснилось ещё много новых проблем, в результате чего получился этот "монстр".
Я один из тех, что не-фанат FAR, поэтому мне нужно всё, как не по-людски :)
А всё начилось с того, что батник ругался на отсутствие прошивок по адресу "D:\svn\auto\nightbuilds\data", несмотря на то, что этот адрес у меня в батнике заменён на совершенно другой! Видимо, это особенность elf2vkpex в случае, если параметр с прошивками отсутствует.
Итак, предлагаю общему вниманию мои доработки к make.bat
список изменений (RUS):
-больше проверок на ошибки (например, проверяет расширение исходного файла, чтоб не скормить ему скомпилированный vkp) -решены множественный проблемы с пробелами в путях/именах файлов (и, возможно, со включенным UAC) -улучшена возможность компиляции патчей, находящихся в папке, отличающейся от рассположения make.bat -добавлена возможность автоматического определения параметра target (auto_target=true). Определяется по имени папки с asm файлом, поэтому папка с asm файлом должна иметь то же имя, что и папка с прошивкой! -добавлено логирование, для анализа в случае ошибок, довольно подробное (verbose=true) -возможность конвертировать патч, в формате elf всё тем же bat-файлом -в случае ошибки, окно консоли не закрывается (если, конечно, сам батник не грохнется )! -Должно работать И со старым синтаксисом. Не проверено. -Возможно ещё што-то....
В папке context menu есть примерчики для добавления пунктика в контекстное меню, которое сделает компиляцию патчей ещё более удобный
Известные проблемы (RUS): -кодировки текста: консоль использует OEM кодировку, соответственно в логе все специфичные для языков буквы, будут выглядеть странно :). -при использовании FASMARM пакета, патч будет генерироваться для каждого cxc файла. В mp.exe нету/плохо реализована проверка на ошибки, поэтому определяйте сами какой из полученных патчей правильный :) -В консоле/логе некоторые записи могут дублироваться, могут не отобразиться. Это из-за кривой реализации перенаправления сообщений+их дублирование в лог и консоль. Правильнее прибегнуть помощи TEE.bat, но я не хотел использовать дополнительные файлы. Удобнее, когда всё в пределах одного bat-файла
Changelog (ENG):
-added more checks for errors (e.g. checks source file extension, just to make sure u r not trying to compile vkp patch from vkp patch) -fixed numerous issues with spaces in filenames/filepaths (and, probably, with UAC turned on too) -improved (fixed issues) when compiling patches, located separately from make.bat -added feature to autodetect target firmware (auto_target=true). It uses current folder name of asm file as temporary target, then checks if the same folder exists in 'firmwares' folder. Otherwise, falls back to target specified in bat file, so make sure, folder with asm files has the same name, as firmwares! -added detailed logging. Should help to find out why asm cannot be compiled. (verbose=true) -ability to convert patches in elf format to vkp using the same mat file and the same syntax! -cmd window is not closed in case any error occurs (unless it's not killed internally) -Should work with new and old syntax, untested -maybe something else....
Check also 'context menu' folder for examples that may help u to make compiling patches easier
known issues: -different text incodings (cmd.exe uses OEM by default, so some localized names will be shown corrupted) -make.bat from FASMARM folder will generate copy of patch for each cxc file in targetted firmware. You have to manually delete incorrect ones. -some messages may not appear in log/cmd window. This is caused by my implementation of redirecting messages, and then duplicate them to console and log. Most appropriate way, to use separate TEE.bat file, but this in not optimal solution for me.
Надеюсь, это поспособствует (массовому) переходу патчеров на "правильный" компилятор (ассемблер, точнее).
В архиве 2 версии bat-файла - для новой версии компиллятора, и адаптированный батник для старой версии (для тех, ко компилирует vkp в code16, и кому лень прописывать в исходнике соответственное ключевое слово, или если новый компилятор выдаёт код отличный от оригинального патча - только для сравнения!).
Знаю, что дублированный вывод сообщений в лог и консоль реализован криво, но приемлимых решений мне не известно. Отслеживание ошибок тоже реализовано не самым правильным способом для FASMARM.EXE и elf2vkpex, это связано с кривой реализацией предыдущего пункта
Пользуйтесь, анализируйте ошибки и способы решения (лог вам в помощь), возможно вместе ещё доработаем батник ;)
Имейте в виду: это только обновления к имеющимся пакетам armpc и FASMARM. Имеющихся в архиве файлов недостаточно для компиляции патчей!
ПС: забыл упомянуть, что я компилирую обычно путём перетаскивания (drag'n'drop) asm на батник, а не путём создания контекстного меню/ярлыка в send to. Так что, начинать "тестить" можно сразу после "обновления".
ППС: извините, что в логе ообщения только на английском, но как иначе наши не-русские коллеги смогут читать лог (будут одни вопросики, которые уже ничем не преобразовать в русский текст для последующего перевода на свой язык)
[ Редактировано Legas2 в 4.4.12 01:23 ]
что планирую добавить::
1) автоматический поиск таргета для патча в формате elf, логичнее вычислять по имени папки на 1 уровень выше от рассположения самого файла (патч ведь вроде компилится в <версия прошивки>\exe\patch.elf) 2) Подправить автоопределения таргета - При включенной опции автоопределения таргета, не учитываются структура хранения прошивки под A1 (например, %firmwares%\%target%.mbn) 3) добавлю поиск прошивки во вложеных папок (по умолчанию отключено) - для тех, кто группирует прошивки по поколению\платформе\ещё как-то...
Ещё неплохо бы, чтоб пришли к общему мнению по поводу хранения описания патча в формате elf. Пример: <patch_in_iar>\description.txt - тогда такой файлик можно будет тоже добавить в шапку патча при конвертации в elf2vkp
Вы не можете начинать темы. Вы не можете редактировать свои сообщения. Вы не можете создавать опросы. Вы не можете вкладывать файлы в сообщения. Вы не можете отвечать на сообщения. Вы не можете удалять свои сообщения. Вы не можете голосовать.