Изучение прошивок фотиков Canon с DIGICII
From Scratchpad
Contents |
[edit] Изучение прошивок фотиков Canon с DIGICII
По материалам соответсвующей ветки форума iXBT.
[edit] Для чего это нужно
Изначально предполагалось просто научить камеру сохранять RAW файлы.
[edit] Смотрим в прошивку
Для анализа прошивки вам понадобится дизассемблер. Я использовал IDA Pro. Прошивку (файл PRIMARY.BIN) следует загрузить как бинарный файл для процессора ARM с начального адреса 0xFFC00000.
- Для автоматического распознавания функций можно использовать FLIRT-сигнатуры от прошивки A610. А также IDC-скрипт, который поможет на начальном этапе запустить дизассемблирование. Оба эти файла можно взять здесь или здесь.
[edit] Где взять альтернативную "прошивку"
[edit] Исходники
На данный момент самые свежие исходники можно взять из SVN репозитория, логин anonymous, без пароля. Прошивка постоянно (но не очень регулярно) обновляется, за что огромное спасибо vitalyb. Для работы с SVN-репозиторием вам понадобится SVN-клиент (хотя можно и через web, но это не очень удобно, так как файлов очень много и не будет возможности накладывать изменения), который можно скачать здесь. Также доступно описание на русском.
[edit] Собранные прошивки
Пока нет одного места, где бы выкладывались бы последние собранные версии прошивок. Можете попробовать посмотреть либо здесь, либо ищите ссылки по форуму. Ещё они могут быть здесь.
[edit] Если нет прошивки для вашей модели/версии
Если ваша камера построена на базе DIGICII, то скорее всего для неё существует возможность собрать альтернативную прошивку. Что для этого нужно смотри здесь.
[edit] Собираем прошивку сами
На данный момент сборка прошивки может осуществляться либо под Windows, либо под Linux 64bit.
[edit] Сборка под Windows
Вам понадобится gcc для ARM под Windows. А тагже Unux-подобная среда типа Cygwin или Mingw/MSys.
Если не хочется возиться с настройкой, можно взять готовый environment здесь. Вот инструкция по установке:
- Запускаем Far (или ваш любимый файловый менеджер).
- Создаём на каком-нибудь диске рабочую папку, скажем 'D:\hdk-devel'.
- Переходим в неё.
- Скачиваем архив с environment'ом gcc_env_for_hdk.rar.
- Распаковываем его.
- Добавляем каталог 'D:\hdk-devel\bin' в PATH. Для этого идём в настройки Windows (у меня WinXP Eng): 'Start' -> 'Control Panel' -> 'System', закладка 'Advanced', кнопка 'Environment Variables'. Я добавлял в переменные пользователя. Если у вас такой переменной, как PATH, ещё не было, то жмём 'New' и вписываем имя переменной 'PATH' и значение 'D:\hdk-devel\bin'. Если такая переменная была, то жмём 'Edit', и добавляем к значению в конец ';D:\hdk-devel\bin' (не забываем разделитель ';' (точка с запятой)). Отбиваемся от всей этой кучи окон кнопками 'Ok'.
- На всякий случай, перезапускаем Far (или ваш любимый файл менеджер), чтобы он зацепил изменения в переменных окружения. Не для всех файл менеджеров этот шаг необходим, но лучше перестраховаться.
- Всё. Подготовка завершена.
- Для сборки прошивки находясь в каталоге верхнего уровня с исходниками набираем 'gmake fir'. Для запаковки прошивки в zip-архив - 'gmake firzip'.
- По-умолчанию собирается прошивка для A610 версии 1.00e. Для сборки под другую модель и/или версию прошивки можно указать параметры для gmake: PLATFORM=<модель> PLATFORMSUB=<версия прошивки>.
Например, 'gmake PLATFORM=a620 PLATFORMSUB=100f fir'
- Для очистки дерева исходников от всех объектников и собранных бинарников - 'gmake clean'.
Также можно использовать 'gmake batch-zip' и 'gmake batch-clean' для сборки прошивок под все версии оригинальных прошивок и очистки всего дерева исходников соответственно.
[edit] Сборка под Linux
Здесь всё гораздо проще, так как почти всё уже есть в системе... Скачиваете gcc для ARM, распаковываете, настраиваете на него путь в файле makefile.inc, и вперёд.
[edit] Загрузка "прошивки" в камеру
Для загрузки прошивки вам возможно понадобится картридер, тат как необходимо записать файл прошивки PS.FIR в корень флэшки. Включаете фотоаппарат в режиме просмотра, заходите в меню и выбираете пункт меню Update Firmware....
- Здесь нужно сделать важное замечание - данная операция на самом деле ничего перепрошивать не будет, так как алтернативная прошивка не является прошивкой, а по сути есть резидентная программа, которая остаётся в памяти и работает только до выключения питания. Так что, даже если что-нибудь пойдёт не так и прошивка зависнет, то ничего плохого не произойдёт, так как после выключения и повторного включения аппарата никаких следов прошивки не останется.
[edit] Как пользоваться
Для входа в альтернативный режим аспользуется кнопка прямой печати. В альтернативном режиме клавиша меню вызывает альтернативное меню, при помощи которого можно производить настройки параметров и включать/отключать функциональные возможности, заложенные в альтернативную прошивку. Кнопка съёмка в алтернативном режиме используется для запуска/останова выполнения скрипта.
[edit] Скрипты
Маленькая инструкция (на английском).
[edit] Горячие клавиши
Можно быстро включать и отключатьсъемку в RAW [erase] - Вкл/выкл RAW Можно быстро включать и отключать OSD элементы кнопками при полунажатом спуске: [half shoot]+[left] - Вкл/выкл Зебры [half shoot]+[up] - Вкл/выкл Гистограммы [half shoot]+[right] - Вкл/выкл OSD
[edit] Полезные ссылки
- Форум iXBT
- digicanon.narod.ru
- http://wiki.alexbernstein.com/HomePage
