Украинская клавиатура в Garmin Oregon

Основной форум пользователей GPS (Global Positioning System)
Правила форума
Для предотврашения спама первые сообщения вновь зарегистрированных пользователей проходят ручную премодерацию.
Olexa
Сообщения: 5738
Зарегистрирован: 31 авг 2001, 13:07

Украинская клавиатура в Garmin Oregon

Сообщение Olexa » 13 дек 2009, 19:47

upperkbrd и lowerkbrd в gtt не катят. Насколько я понял, нужно править прошивку.

Есть ли готовое решение? Если нет, ткните пожалуйста носом, как сделать. gunp на GUPDATE.GCD говорит "Invalid magic".


Olexa
Сообщения: 5738
Зарегистрирован: 31 авг 2001, 13:07

Re: Украинская клавиатура в Garmin Oregon

Сообщение Olexa » 14 дек 2009, 17:03

: gunp на GUPDATE.GCD говорит "Invalid magic"

Разобрал GUPDATE.GCD при помощи gcdsplit. gunp2 на GUPDATE.GCD.02bd всё равно говорит "Invalid magic", хотя текст сообщений внутри читается. Куда копать дальше?


Adrenalin
Сообщения: 1153
Зарегистрирован: 21 май 2004, 15:48

Есть варианты

Сообщение Adrenalin » 14 дек 2009, 21:53

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

lav
Сообщения: 185
Зарегистрирован: 28 мар 2005, 13:15

Re: Есть варианты

Сообщение lav » 15 дек 2009, 13:09

<blockquote><font size=1>В ответ на:</font><hr><p>
5db23 - для каждой прошивки надо искать
<p><hr></blockquote><p>минуточку, а чем gcdsplit-то не угодил?
прям как-то даже обидно за себя становится :o)
аль с тех пор структура гцд как-то изменилась?


Olexa
Сообщения: 5738
Зарегистрирован: 31 авг 2001, 13:07

Re: Есть варианты

Сообщение Olexa » 15 дек 2009, 17:32

: 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, или есть ещё какие-то пути? В каком виде вообще могут храниться раскладки клавиатуры?

Olexa
Сообщения: 5738
Зарегистрирован: 31 авг 2001, 13:07

Re: Есть варианты

Сообщение Olexa » 15 дек 2009, 18:26

Хе, а более пристальный взгляд таки показал кое-что интересное в районе смещения 0x7D3010 fw_all.bin (GUPDATE.GCD.02bd) для версии 2.71 Beta для Oregon 550 :). Явно английская раскладка клавиатуры, и пунктуация присутствует в соответствующем порядке.


Olexa
Сообщения: 5738
Зарегистрирован: 31 авг 2001, 13:07

Re: Есть варианты

Сообщение Olexa » 15 дек 2009, 19:02

А надо ли собирать в RGN? Что если поправить в оригинальном GCD, и заколупать его обратно в установщик прошивки? Есть ли какие-то подводные камни с контрольными суммами в fw_all.bin и в GUPDATE.GCD?


Olexa
Сообщения: 5738
Зарегистрирован: 31 авг 2001, 13:07

Re: Есть варианты

Сообщение Olexa » 15 дек 2009, 19:44

А кирилличная клава живёт по смещению 0x7D4820 (в Unicode). Правда, с добавлением кнопок трудность: перечисляются только задействованные. То есть, либо менять какие-то буквы, что не комильфо, либо углубляться в поиск смещений раскладок, чтобы объединить какие-то из дополнительных латиничных (а то они там разбежались: для каждого языка свой персональный набор дополнительных диакритических символов).


Adrenalin
Сообщения: 1153
Зарегистрирован: 21 май 2004, 15:48

Re: Есть варианты

Сообщение Adrenalin » 16 дек 2009, 00:12

Я всё же сторонник RGN-обновления - оно как-то спокойнее, знаешь что куда вшивается.

Контрольная сумма такая же как и для карт 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");
}




Adrenalin
Сообщения: 1153
Зарегистрирован: 21 май 2004, 15:48

Re: Есть варианты

Сообщение Adrenalin » 16 дек 2009, 00:43

Проведя исследования мировых тенденций можно с уверенностью сказать - каждый изобретает свой велосипед. http://www.smart-mobile.com/forum/viewt ... br> <br>

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 161 гость