more wikis
 

Изучение прошивок фотиков 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 здесь. Вот инструкция по установке:

  1. Запускаем Far (или ваш любимый файловый менеджер).
  2. Создаём на каком-нибудь диске рабочую папку, скажем 'D:\hdk-devel'.
  3. Переходим в неё.
  4. Скачиваем архив с environment'ом gcc_env_for_hdk.rar.
  5. Распаковываем его.
  6. Добавляем каталог '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'.
  7. На всякий случай, перезапускаем Far (или ваш любимый файл менеджер), чтобы он зацепил изменения в переменных окружения. Не для всех файл менеджеров этот шаг необходим, но лучше перестраховаться.
  8. Всё. Подготовка завершена.
  9. Для сборки прошивки находясь в каталоге верхнего уровня с исходниками набираем 'gmake fir'. Для запаковки прошивки в zip-архив - 'gmake firzip'.
  10. По-умолчанию собирается прошивка для A610 версии 1.00e. Для сборки под другую модель и/или версию прошивки можно указать параметры для gmake: PLATFORM=<модель> PLATFORMSUB=<версия прошивки>.
    Например, 'gmake PLATFORM=a620 PLATFORMSUB=100f fir'
  11. Для очистки дерева исходников от всех объектников и собранных бинарников - '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] Полезные ссылки