Украинская клавиатура в Garmin Oregon
Правила форума
Для предотврашения спама первые сообщения вновь зарегистрированных пользователей проходят ручную премодерацию.
Для предотврашения спама первые сообщения вновь зарегистрированных пользователей проходят ручную премодерацию.
Украинская клавиатура в Garmin Oregon
upperkbrd и lowerkbrd в gtt не катят. Насколько я понял, нужно править прошивку.
Есть ли готовое решение? Если нет, ткните пожалуйста носом, как сделать. gunp на GUPDATE.GCD говорит "Invalid magic".
Есть ли готовое решение? Если нет, ткните пожалуйста носом, как сделать. gunp на GUPDATE.GCD говорит "Invalid magic".
|
||
Re: Украинская клавиатура в Garmin Oregon
: gunp на GUPDATE.GCD говорит "Invalid magic"
Разобрал GUPDATE.GCD при помощи gcdsplit. gunp2 на GUPDATE.GCD.02bd всё равно говорит "Invalid magic", хотя текст сообщений внутри читается. Куда копать дальше?
Разобрал GUPDATE.GCD при помощи gcdsplit. gunp2 на GUPDATE.GCD.02bd всё равно говорит "Invalid magic", хотя текст сообщений внутри читается. Куда копать дальше?
Есть варианты
gunp/gunp2 не распаковывают GCD - это можно подчерпнуть из исходных текстов утилиты. Идея основная - извлечь из контейнера GCD тело прошивки, модифицировать его, подсчитать на нём правильную контрольную сумму, затем создать RGN и прошить через updater.exe, нажав и удерживая power и подключая сразу usb. Надо пользовать : http://e-trex.info/fw/nuvi/tools/unp2.rar Для распаковки. И затем чтобы собрать вместе ramloader и тело прошивки: merge105.rar : http://e- trex.info/fw/nuvi/tools/merge105.rar Командные строчки (для примера): unp2.exe 5db23 02BD GUPDATE.GCD fw_all.bin - извлекается основное тело прошивки (необходимое условие - отсутствие "шифрования" xor, к счастью на орегонах и прочих это не встречается) unp2.exe 1021 0008 GUPDATE.GCD boot.bin - загрузчик merge105.exe boot.bin fw_all.bin UPDATA.rgn - сливается загрузчик и тело в RGN файл Теперь надо определить цифры которые идут параметрами для unp2: 5db23 - для каждой прошивки надо искать, это индивидуальное смещение в GCD файле для сигнатуры, допустим ищем через winhex и искать надо было строчку BD0200FF (это строчка - сигнатура 02BD и длина первого блока данных FF00) Аналогично с ramloader - 080000FF, правда смещение обычно стандартное - 1021) http://garminoregon.wikispaces.com/mess ... br> Для порядка не мешает определить HWID и версию прошивки, искать эти замечательные цифры надо возле юникод-строки Сopyright и подставить в имя RGN, чтобы прошивать удобнее было. 0NNN01000VVV.RGN А модификацией заниматься на fw_all.bin
Re: Есть варианты
<blockquote><font size=1>В ответ на:</font><hr><p>
5db23 - для каждой прошивки надо искать
<p><hr></blockquote><p>минуточку, а чем gcdsplit-то не угодил?
прям как-то даже обидно за себя становится :o)
аль с тех пор структура гцд как-то изменилась?
5db23 - для каждой прошивки надо искать
<p><hr></blockquote><p>минуточку, а чем gcdsplit-то не угодил?
прям как-то даже обидно за себя становится :o)
аль с тех пор структура гцд как-то изменилась?
Re: Есть варианты
: unp2.exe 5db23 02BD GUPDATE.GCD fw_all.bin Я вместо unp2 для распаковки использовал gcdsplit: <A HREF="http://www.gps-forum.ru/cgi-bin/forum/s ... Он сам находит сигнатуры и сохраняет компоненты в файлы *.gcd.xxyy, где xxyy это сигнатура. Для сравнения вынул прошивку при помощи unp2 (найдя смещение сигнатуры BD0200FF), совпадение побайтное. Вопрос в том, что делать дальше с прошивкой. Я надеялся, что gunp2 разберёт извлечённую из GCD прошивку на какие-то составляющие, но он говорит на неё "Invalid magic". Непристальный взгляд на прошивку в шестнадцатиричном редакторе (поиск последовательностей символов, встречающихся в одном ряду или столбце экранной клавиатуры) даёт негативный результат ("ABCD", естественно, находится, а вот последовательности символов пунктуации ≈ нет). Осваивать IDA Pro, или есть ещё какие-то пути? В каком виде вообще могут храниться раскладки клавиатуры?
|
||
Re: Есть варианты
Хе, а более пристальный взгляд таки показал кое-что интересное в районе смещения 0x7D3010 fw_all.bin (GUPDATE.GCD.02bd) для версии 2.71 Beta для Oregon 550 :). Явно английская раскладка клавиатуры, и пунктуация присутствует в соответствующем порядке.
Re: Есть варианты
А надо ли собирать в RGN? Что если поправить в оригинальном GCD, и заколупать его обратно в установщик прошивки? Есть ли какие-то подводные камни с контрольными суммами в fw_all.bin и в GUPDATE.GCD?
Re: Есть варианты
А кирилличная клава живёт по смещению 0x7D4820 (в Unicode). Правда, с добавлением кнопок трудность: перечисляются только задействованные. То есть, либо менять какие-то буквы, что не комильфо, либо углубляться в поиск смещений раскладок, чтобы объединить какие-то из дополнительных латиничных (а то они там разбежались: для каждого языка свой персональный набор дополнительных диакритических символов).
Re: Есть варианты
Я всё же сторонник RGN-обновления - оно как-то спокойнее, знаешь что куда вшивается.
Контрольная сумма такая же как и для карт img - дополнение крайним байтом до 00 суммы всех байт.
Подводный камень самый плохой - GCD не прошивается, если в приборе стоит та же версия. Есть и исключения, но... шаманить всё меньше хочется.
Для запаковки в gcd надо пользовать pak.exe - fw_all.bin превращается в разделённый для контейнера GCD материал, его напрямую уже можно вставлять в GCD.
Контрольная сумма такая же как и для карт img - дополнение крайним байтом до 00 суммы всех байт.
Подводный камень самый плохой - GCD не прошивается, если в приборе стоит та же версия. Есть и исключения, но... шаманить всё меньше хочется.
Для запаковки в gcd надо пользовать pak.exe - fw_all.bin превращается в разделённый для контейнера GCD материал, его напрямую уже можно вставлять в GCD.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main (argc, argv)
int argc;
char **argv;
{
FILE *fi, *fo;
unsigned short sig, len, rlen;
unsigned char buf [0xff00];
if (argc > 2) {
fi = fopen (argv [1], "rb");
fo = fopen (argv [2], "wb");
sig=0x2BD;
len=0xFF00;
while (rlen=fread (buf, 1, len, fi)) {
fwrite (&sig, 1, 2, fo);
fwrite (&rlen, 1, 2, fo);
fwrite (buf, 1, rlen, fo);
printf("sig: %.4x\n", sig);
printf("len: %.4x\n", len);
}
printf("sig1: %.4x\n", sig);
printf("len1: %.4x\n", len);
fclose (fo);
fclose (fi);
}
else printf("Usage: pak fileIn fileOut");
}
Re: Есть варианты
Проведя исследования мировых тенденций можно с уверенностью сказать - каждый изобретает свой велосипед. http://www.smart-mobile.com/forum/viewt ... br> <br>
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 114 гостей