Неофіційне керівництво до дії
"Якщо гора не йде до Магомета, значить Магомет іде до гори." (Давньосхідна мудрість)
. Я хочу у вас дізнатися де взяти конвертери pre2bin і patch. "(З листування з користувачами)
Disclaimer. З огляду на те, що написано в ліцензійній угоді з компанією Garmin, все описані надалі дії є незаконними з точки зору цієї ліцензії. Я зі свого боку не вмовляю вас слідувати всім цим діям, і не несу ніякої відповідальності за всі можливі наслідки від ваших дій. Пам'ятайте, ви дієте тільки на свій страх і ризик.
День 1. Починаємо розпакування.
Давно з'явився сайт corsar, де можна скачати карти, поспілкуватися на форумі, а також завантажити деякі корисні файли. Одного разу чоловік, який не назвав себе крім як Garmin replacer / russificator by KonNor надіслав вихідні тексти програми gunp, і інший інструментарій, а також і прошивку з російською мовою eTrex Legend 3.20, створену ним з. 2.41.
Цитата з файлу, що лежить поруч з інструментарієм розробника говорить: "Не відповім тільки на одне питання - як витягнув оригінальну прошивку з Garmin'a. Можу дати єдиний натяк - IDA + arm.d32 + поверхове знання ARM ассембрера = результат". Подумки зітхнувши, з жалем, "вміють же люди" продовжуємо рухатися далі.
Трохи пізніше з'ясувалося, що даний пакет вміє трохи більше, варто тільки докласти трохи зусиль. Таким чином була зібрана прошивка eTrex legend 3.60. а пізніше і eTrex Vista 3.60.
Для початку я б порадив ознайомитися з додатком 1 - глосарієм - раптом знадобиться.
Як це працює? Спрощено процес русифікації (переведення російського інтерфейсу користувача) можна описати наступними кроками:
- Отримання текстового ресурсу (текстових рядків)
- отримання шрифтів
- Переклад текстового ресурсу
- Малювання російських шрифтів (якщо це небхідно, раптом в колекції виявиться потрібний ..)
- Упаковка текстового ресурсу
- Накладення патча на вихідний файл упакованим текстовим ресурсом і відредагованими шрифтами.
- інші дії
Щодо останнього пункту є невелика обмовка. Якщо планується зробити повну русифікацію (в тому числі введення пошуку по російськи), то додається ще й пункт 4.5 Дизасемблювання прошивки і 4.6 Написання патча для пошуку. Ще можливі варіанти з відображенням шрифтів (збереження рідних шрифтів, а російські додавання в прошивку). Поки зупинимося на базовому варіанті, тільки російський інтерфейс.
Чому це спрацьовує? Тому що. ) Тому що саме так працює програма в приладі. Для більш цікавих - дивимося в додаток 2 - посилання.
Отриманням текстового ресурсу (1) займається додаток gunp (gunp2) і grabres (оскільки я багато чого не знав, я написав свої утиліти для розпакування прошивки). gunp намагається застосувати інтелектуальний пошук, а grabres діє безпосередньо за вказівкою згори.
На виході роботи програм (неважливо якої ви скористаєтеся, головне результат) - набір текстових файлів з іменами lang001.txt і т.д. розділений на рядки. У кожному рядку знаходиться один вислів (вираз). Спеціальними символами є \ n (символ перекладу рядка) і \ 0 (символ кінця вираження і переходу до наступного).
Один з файлів (наприклад перший) треба взяти за основу для перекладу. Кількість файлів зазвичай дорівнює кількості мов, доступних в меню приладу Вибір мови. Чи не на всіх прошивках спрацьовує автоматичний пошук gunp.
Отриманням шрифтів (2) займається gunp (gunp2 - додані визначення дуже старих шрифтів) або winHex (застарілий метод).
Перекладом тексту (3) займається перекладач. Або, при наявності досить розвиненою бази перекладу, чудовий додаток Ехсе1.
Упаковку текстового ресурсу (5) робить (у мене принаймні) утиліта pre2bin. Вхідні параметри - файл тексту, на виході - упакований, готовий до патчу бінарний текст :)).
Накладення патчів (6) на вихідну прошивку приладу робить утиліта patch.
Примітка. Іноді через деякі міркувань програмістів garmin в прошивках використовується упаковка текстових ресурсів. Мабуть це пов'язано з економією пам'яті flash, але ніяк не пов'язане з економією нашого часу. (На сьогоднішній день немає готового рішення для упаковки текстових ресурсів "як гармін", тому частина (мала) прошивок так і залишається русифікованими - яскравий приклад цьому eMap 2.64. Положення можна змінити, якщо сама фірма garmin почне впроваджувати переклади в прилади на етапі побудови програмного коду. Сподіваюся, що колись це станеться.
ЧАСТИНА 1. Використання утиліт.
Спочатку потрібно перенести файл вихідної прошивки .rgn в якусь окрему директорію. Скопіюйте туди ж утиліту gunp (grabres)
1. Синтаксис виклику gunp Ім'я_файлу [/ old]
Файл є обов'язковим параметром. Файл вказує на файл прошивки.
Ключ / old - для поліпшеної обробки "дуже старих" шрифтів, використовується, коли не знайдені шрифти.
На виході в тій же директорії виходить приблизно такий список файлів:
bootseg.bin - завантажувальний сектор
font001.bin - файл шрифту номер 1
font002.bin - номер 2
fw_all.bin - основна прошивка (цей код передається updater.exe через інтерфейс обміну)
header.bin - заголовок файлу .rgn
loader.bin - код програми завантажувача (цей код передається updater.exe через інтерфейс обміну на початковій стадії - для старту прошивки) (завантажувачів може бути кілька)
image001.lbm - картинки, що містяться в прошивці приладу
image002.lbm - трапляється, що їх не буває :)
extract.log - лог-файл роботи gunp
lang_001.txt - текстовий ресурс номер 1.
- Примітка 1. Утиліта gunp може і не завершити роботу, або створити великі файли - це пов'язано з прошивками :) Досить натиснути Ctrl-C і програма завершиться. Іноді файлів більше, ніж вказано тут, іноді набагато менше.
- Примітка 2. Кращим варіантом використання може бути gunp orig_firmware.rgn [/ old]> ew
Це перенаправлення потоку виведення повідомлень програми в файл ew.
Використання утиліти grabres.
1.a. Синтаксис виклику grabres Ім'я_файлу
Ім'я_файлу має бути (на теперішній момент) DOS 8.3
Утиліта запросить, з якого зміщення починати: вкажіть зміщення текстового ресурсу в десятковій системі щодо початку файлу.
Також необхідно вказати, скільки завершальних \ 0 символів в ресурсі вважається закінченням роботи. Зазвичай 4 вистачає, але бувають екзотичні випадки.
Також необхідно вказати максимальне число рядків для одного текстового ресурсу. Результуючий файл - res.txt. Його потрібно відредагувати вручну, прибравши зайві рядки, які не відносяться до якогось текстового ресурсу.
Підказка. Зазвичай мова English закінчується рядком Zoo / Aquarium, але бувають і виключення.
ЧАСТИНА 2. Майже нічого робити не треба, коли все зроблено.
В результаті після закінчення частини 1 були отримані текстові файли з текстовими ресурсами і бінарні файли з растровими і векторними шрифтами.
Скопіюємо все шрифти font. bin і один з текстових ресурсів (наприклад англійська, lang001.txt) в окрему директорію.
ЧАСТИНА 3. Переклад тексту, і чому Ехсе1 такий хороший інструмент.
Після відкриття збережіть файл як .xls. Можна далі прибрати символи \ 0 (згодом необхідно додати) для зручності перекладу. У колонці поруч буде розташовуватися переклад. Слід звернути увагу, що службовий символ \ n замінювати і прибирати не можна (щоб не порушувати форматування тексту при виведенні на екран приладу). Можна його рухати уздовж рядка в межах розумного.
Отже, варіант перший: переклад з нуля. В середньому, кількість рядків, необхідних для перекладу обчислюється
1000. Провівши деякий час зі словником, ви нарешті отримуєте переклад нульового наближення. Чому нульового? Він ще не випробовувався на вигляд в приладі - очевидно, що потрібно правка і корекція. Слід уникати довгих перекладів, збільшення рядка, однак нічого страшного, якщо рядок буде довше оригінальної (наприклад англійської) рядки. У різних мовах різні довжини слів - це враховується приладом.
Вважаємо, що стовпчик поруч з первинним є перекладом. Не забудьте додати символ \ 0 (якщо прибирали на початковому етапі) через функцію СЦЕПИТЬ. А результуючий стовпчик потрібно скопіювати і зробити спеціальну вставку на новому файлі - тільки значення. Зберегти як текстовий файл з розбивкою на рядки.
Після збереження текстового файлу (назвемо його trans.txt - російський текстовий ресурс) потрібно обов'язково перевірити на "послужливість" Ехсе1 - заміну лапок "зайвими лапками (краще уникати використання лапок). Наприклад, рядок створена Ехсе1:" Переклад рядка "" 1111 "" \ 0 "спочатку виглядала як Переклад рядка" 1111 "\ 0
Варіант другий: є напрацювання по переводу. Тут кожен може придумати кілька шляхів, проте я даю підказку: ПОИСКПОЗ, ІНДЕКС, ЯКЩО, ЕОШИБКА, деякі інші і застосування "Формат - Умовне форматування." Для розмальовки осередків.
Зберігається файл trans.txt копіюємо як in.txt (для утиліти pre2bin).
ЧАСТИНА 4. Редагуємо (або не робимо цього) шрифти.
Таким чином, визначилися які ж все-таки шрифти необхідно редагувати.
Всі отримані шрифти акуратно складаємо в окрему папку (припустимо work) і даємо їм імена, схожі з початковими. Наприклад font007.bin в російській вигляді буде іменуватися font007r.bin.
ЧАСТИНА 5. Упаковуємо текст
Зручний для редагування, текстовий ресурс абсолютно неприйнятний для запису в прилад безпосередньо. Його необхідно упакувати. Це робить утиліта pre2bin.
Синтаксис виклику pre2bin
При цьому, вхідний текстовий ресурс для упаковки повинен міститися у файлі in.txt
Вихідний текстовий упакований ресурс буде міститися у файлі out.txt
Перейменуйте out.txt в langRu.bin (для зручності).
ЧАСТИНА 6. Накладення патчів.
Для цього треба знати, куди накладати. Уважно вивчаємо файл extract.log (результат роботи gunp від Частини 1) і бачимо зміщення в файлі, за якими були знайдені конкретні ресурси: шрифти, текст.
Припустимо, вирішили замінювати мову 005:
І виявилося, що необхідні шрифти знаходяться в файлах
Згадуємо, що упакований текстовий ресурс називається langRu.bin
а прошивку ми скопіюємо в директорію під ім'ям in.bin
Тоді набираємо команду
patch in.bin langRu.bin / H000125BF
Перейменовуємо res.bin в in.bin
Аналогічно для кожного з решти шрифтів.
patch in.bin font006r.bin / H00258AFB
ren res.bin in.bin
Порада. Напишіть .bat файл - життя буде простіше.
Після проведених всіх дій вийшла прошивка, яку можна прошивати. Але не слід поспішати. Створіть окрему директорію (наприклад test) і скопіюйте туди отриману прошивку. Розпакуйте її знову за допомогою gunp імя_прошівкі> ew
Якщо все пройшло успішно, вийдуть ті ж файли, що і на етапі Частини 1. Тільки текстовий ресурс буде замінений на російський і шрифти будуть трохи іншого розміру (вони ж росіяни). Порівняйте зміщення, що генеруються тепер в extract.log з колишніми. Вони повинні збігатися.
Косметичні поліпшення. Залишилося порахувати вірну контрольну суму CRC для прошивки (її прилад обчислює в сервісному режимі). Але це не зараз. Або залишаю вам в якості домашнього завдання.
Додаток 1. ГЛОСАРІЙ.
- процес закачування в flash ПЗУ приладу деякої програми.
- бінарний файл .rgn який лежить поруч з утилітою updater.exe при розпакуванні .exe файлу оновлення, взятого з сайту garmin.
Патч - бінарний файл (накладення) на інший бінарний файл деякого зміни. Результатом є ще один бінарний файл ( "Патчений") з деякими бажаними властивостями (наприклад, російською мовою).
updater.exe - додаток від garmin для прошивки бінарного файлу .rgn
Текстовий ресурс - все текстові рядки однієї мови. Міститься в файлі lang. txt
Лінковка (символу шрифту) - зв'язування відображення схожих символів російського алфавіту з символами англійського алфавіту.
Додаток 2. ПОСИЛАННЯ.