access logger

家庭用コンピュータ環境の模索 >デジタル一眼レフをフリーソフトで活用する

最終更新: 2015-12-19


Magic Lantern とは
インストール方法
操作方法
Expo
Overlay
Movie
Shoot
Focus
Display
Prefs
Modules
Debug
Help
Modified
その他
Arkanoid
Lua scripting
Develop
How to build
How to Debug

Magic Lantern とは

2015-12-19

Magic Lantern はキヤノンのデジタル一眼レフカメラ用のカスタムファームウエアアドオンです。Magic Lantern 自体はSDカードに書き込まれて、カメラ内部のファームウエアをフックして独自機能を追加します。本体のファームウエアは変更しません。そして、オープンソースで開発されていて、世界中の開発者が魅力的な新機能を追加しています。

本家サイトは http://www.magiclantern.fm/です。

現在の対応機種は 5D2, 5D3, 6D, 7D, 50D, 60D, 500D/T1i(Kiss X3), 550D/T2i(Kiss X4), 600D/T3i(Kiss X5), 650D/T4i(Kiss X6), 700D/T5i(Kiss X7), 1100D/T3(Kiss X50), EOS M、進行中の機種は、70D, 100D/SL1、サポートを必要としている機種は 5D classic (old version available), 40D (not working at all) です。

私は EOS70D で本家マージ候補のバージョンを使っています。

日本語の情報は、公式Wikiの日本語ページが詳しいです。

もともとは、Canon の DigicII, DigicIII を対象とした、CHDKというプロジェクトが発端のようで、随所にその痕跡が見られます。

追加される機能

カメラによってサポートされている機能のレベルは異なります。また、非常に多機能なので、代表的なものを次に挙げます。すこし古いですがYouTube: Magic Lantern's Most Important Functionsも参考になります。

表示
LiveView時のオーバーレイ拡張。
  • RBG別ヒストグラム
  • Digicを使った、合焦範囲の強調
  • ソフトによる、多機能なフォーカス強調
  • 合焦部の拡大表示
  • DOF(合焦距離範囲)の表示
  • 露出オーバー、アンダーの表示
  • 中央部の露出パーセントの表示(スポットメータ)
  • LiveView時の露出シミュレーション
静止画
  • (内蔵の)インターバルタイマ
  • バルブタイマー
  • モーション検知シャッター
  • トラップフォーカス(MF時にフォーカスが合った時にシャッターを切る)
動画
  • オーディオメータの表示
  • HDRビデオ
  • Rawビデオ
その他
  • Lua, tiny C によるスクリプティング(フォーカスブラケットなど)

インストール方法

2015-12-19
  1. 機種に対応したファームウエアをダウンロードします。ファームウエアバージョンによって複数のファイルがある場合は、試してみてうまく行ったものが正解です。
  2. ダウンロードしたマジックランタンを、カードのルートに展開します。
  3. キヤノンメニューから、「ファームウエアアップデート」処理を行います。この処理によってSDカードのブートフラグがセットされ、カードから起動します。
    updateupdate
  4. 一旦インストールすれば、ブート処理が完了しています。MLをアップデートする場合は、SDカードの autoexec.bin, ML-SETUP.FIR, ML/ ディレクトリを上書きすれば良いです。
  5. 別のSDカードにインストールするためには、ファイルをコピーすること、ブートフラグを立てること、が必要です。ブートフラグを立てるには、次の方法があります。
    • Windows の場合、http://wiki.magiclantern.fm/installから配布されている EOSCard.exe というツールを使う。
    • Linux の場合、配布ソースに contrib/make-bootable/make_bootable.sh というシェルスクリプトがあるので、それを使う。ただし、このスクリプトを使う場合はボリュームラベルが EOS_DIGITAL である必要があります。中身は次のとおりです。つまり、ブートセクタの中のBootCode セクションの特定の領域に "BOOTDISKEOS_DEVELOP" と書かれていれば良いです。
      if [ "$DEV16" = 'FAT16   ' ]; then
        offset1=43
        offset2=64
        FS='FAT16'
      elif [ "$DEV32" = 'FAT32   ' ]; then
        offset1=71
        offset2=92
        FS='FAT32'
      elif [ "$EXFAT" = 'EXFAT   ' ]; then
        offset1=130
        offset2=122
        FS='EXFAT'
      fi
      echo EOS_DEVELOP | dd of="$dev" bs=1 seek=$offset1 count=11
      echo BOOTDISK | dd of="$dev" bs=1 seek=$offset2 count=8
      

想定されるブートシーケンスは次のようなものです。

MLがハングアップした時には

MLが暴走したら、省電力機能が働かず、ARMがフルパワーで稼働し続けます。ハングアップした時には、カメラの電源を切っても暴走したままです。電池を取り外してください。

アップグレード

展開したファームウエアをSDカードに上書きしてください。

アンインストール方法

操作方法

2015-12-19

LiveView時の画面例

LiveView

左上から右上にかけて、時刻、記録フォーマット、HTP? AUTO? カード空き容量。

左下から右下にかけて、撮影モード、レンズ、絞り、シャッタースピード、ISO、ホワイトバランス、合焦点までの距離、AFモード、露出補正、バッテリー残量。

その上を、合焦範囲(29cm 30cm と表示されている。薄い…)、ヒストグラム。

Movie時の画面例

Movie

左上から右上にかけて、オーディオレベルメータ、ファイル名、フレームレート、カード空き容量。

Expo

Expo
White Balance
[Q]ボタンを押すと、キヤノンメニューよりも詳細にホワイトバランスをセットすることができます。
ISO
[Q]ボタンを押すと、キヤノンメニューよりも詳細にISOを設定することができます。
Shutter
[SET]を押した後、メイン、サブダイヤルで、シャッタースピードを設定できます。ほぼ、キヤノンメニューと同等です。ここを操作する価値はありません。
Aperture
[SET]を押した後、メイン、サブダイヤルで、絞りを設定できます。ほぼ、キヤノンメニューと同等です。ここを操作する価値はありません。
Picture Style
[SET]を押した後、ピクチャースタイルの4つのパラメータの詳細を設定できます。
AutoETTR
ETTR とは Exposing to the right のことです。直訳すると「右に露光」。インド人を右に?。通常は平均輝度が18%になるように自動露出しますが、ETTRは白飛びする限界まで露光する、と言うことです。後での編集を前提として限界までデータを集めようという戦略ですね。
Expo. Lock
Expo. Presets
Expo. Override
Exp Sim
LiveView モードのとき、LV画層を露出シミュレーションの画像にします。LVモードでないときは、グレーアウトされています。

Overlay

Overlay

それぞれの機能は[SET]ボタンで ON/OFF できます。詳細設定が無い場合は、[SET]を押したあとに8方向キーの上下ボタンで値が設定できます。詳細設定がある場合は[Q]キーで詳細設定に、再度、[Q]キーで詳細から戻ります。

Global Draw
LV, Movie モードのときに、LCDに表示する情報を制御します。
Zebras
露出エラー(オーバー、アンダー)がある場所をゼブラ表示します。LumaFast とは (RBGではなく)Yチャンネルだけでで露出を判定することです。
Focus Peak
合焦したところを強調表示します。
Magic Zoom
合焦箇所を拡大表示します。
Zoom.REC
ズームレンズのズームリングを動かした時に拡大表示を表示します。
Focus+ZREC
フォーカスを(リング、またはAFで)移動した時に拡大表示します。拡大したいときは、フォーカスを合わせたいとき、なので自然な感じがしますが、勝手に拡大表示が出てくることがあります。
ZoomIn(+)
[ZoomIn]ボタンを押した場合に拡大、が設定できます。意図的に拡大表示を出すことができます。キヤノンファームでの拡大機能(合焦点以外の任意の箇所の拡大 x1,x5,x10)とボタンが干渉します。
Always On
常に拡大表示します。
Cropmarks
クロップマークを表示します。自分で定義したファイルを Cropmark/ ディレクトリに入れておけば使うことができます。http://www.magiclantern.fm/forum/index.php?topic=13638.0
Ghost image
前の撮影画像が半透明で表示されます。
Spotmeter
合焦地点、または、中央部の露出(%表示)が表示されます。
False color
明るさを擬似カラーで表示します。パレットは選択できます。
Histogram
カラーごとのヒストグラムを表示できます。
Waveform
各走査線ごとに、横軸=X、縦軸=明るさのグラフを重ね書きしたようなグラフを表示できます。全体の輝度レベルをつかむことができます。
Vectorscope
角度=色、中心からの距離=輝度、のようなグラフを表示できます。色バランスが把握できます。

Movie

Movie

REC indicator
REC key
[START/STOP] 以外のシャッター半押しなどで Movie Rec をスタートできます。
Gradual Exposure
HDR Video
名前のとおり、2通りの露出でHDRビデオを撮ります。
Vignetting
Image Fine-tuning
Movie Tweaks

Shoot

Shoot

Advanced Bracket
Intervalometer
インターバルタイマの設定をします。
Bulb Timer
標準のシャッター速度の最長よりも長いシャッターをバルブタイマーで設定します。
Audio RemoteShot
音声入力があったときにシャッターを切ります。フォーラムによると、雷撮影に有効らしいです。http://www.magiclantern.fm/forum/index.php?topic=14511.0
Motion Detect
画像に動きがあったときにシャッターを切ります。
Mirror Lockup
ミラーアップ撮影の設定です。
Flash Tweakes
Shoot Preference

Focus

Focus

Trap Focus
(MF時)合焦したらシャッターを切ります。
DOF Settings
合焦範囲をオーバーレイ表示します(合焦の条件を詳細設定します)。

Display

Display

LV DIGIC peaking
DIGICを用いたピーキングの設定です。
LV brightness
LV contrast
LV satulation
LV display gain
Clean overlays
Defishing
Anamorphic
Advanced settings
Level Indicator

Prefs

Prefs

Config files
Image review settings
LiveView zoom tweaks
Focus Box settings
Arrow/SET shotcuts
Warning for bad settings
あまり使わない設定になっていることを画面に警告する、たとえば、MFモードになっている、Mモードになっている、など。
Powersave in LiveView
LV Display Presets
Lens Info Prefs
Costomize Menus
pic_view
raw_rec
silent

Debug

Debug
Modules debug
File Manager
file_man.mo をロードしていると、このメニューが現れる。SDカードのファイルを操作できる。
Screeshot - 10s
スクリーンショットを取る。この記事を書くときに役に立つ。
Dump ROM and RAM
Dump image buffers
Don't click me!
大量のテストが走る。
Burn-in tests
Benchmarks
Show tasks
キヤノンのReal Time OS DryOS の実行中のタスクを表示する。
Show CPU usage
CPUの使用率を表示する。
Show GUI evts
Show EDMAC
Image buffers
Shutter Count
内部のシャッターカウンター値です。
Free Memory
Internal Temp
内部の温度(単位は内部のADCの値)です。
Battery lvele
バッテリ残量です。

Help

Help

[INFO]を押した時にヘルプが表示されない場合は、他のリリースから doc/ 以下をコピーする。

Press INFO
Press Q
SET/PLAY
ZoomIn
Press MENU
Junkie Mode(位置画面にアイコンが並び、メニューが一覧できる)になる。
Press LIGHT
Press METERING btn
Key Shortcuts
Coplete user guide
About Magic Lantern

Modified

Modified

直近に編集した項目がここに出てくる。

その他

2015-12-19

Arkanoid

Modules メニューで、arkanoid.mo をロードした場合、次回起動時に、MLメニューに [Game] タブが出現します。そこで、Arkanoid を実行すれば、ゲームができます。←面白い、以上の意味はありません。

Lua scripting

lua.mo モジュールをロードした場合、Lua 言語によってスクリプティングが可能です。http://magiclantern.wikia.com/wiki/Lua


ただし、私は使ったことがありません。

Develop

2015-12-28

How to build

2015-12-28

Magic Lantern の開発はオープンソースで進んでます。本家サイトは、http://www.magiclantern.fm/で、情報交換はフォーラムでなされています。EOS 70D 用は別のフォーク(https://bitbucket.org/nikfreak/magic-lantern/commits/branch/70D-merge)で開発されていて、本家にはまだ取り込まれていません。

ソースコードはhttps://bitbucket.org/hudson/magic-lanternにて公開されています。DVCSとしてmercurialが使われているので、チェックアウトするには hg のインストールが必要です。Linux 環境であれば apt-get でインストールできます。Windows 環境では、SourceTreeTorsoiseHgが便利です。私見ですが、TortoiseHg (とそれに付随する hg Workbench)が十分便利なので、SourceTreeは不要ではないかと思います。gitの場合は、公式としてGit for Windowsがあるのですが、git-gui+gitk といった感じであまり使いやすくないので SourceTree の方が便利です。

コンパイルするには gcc(arm-none-eabi)が必要です。Linux ならば apt-get で入るでしょう。場合によっては dietlibc も入れる必要があるかもしれません。Windows の場合は Launchpad GCC ARM Embedded(https://launchpad.net/gcc-arm-embedded)が使えますが、MLプロジェクト自体は Linux上でのビルドを想定しており、Windows 上でのビルドは自力で頑張る必要があります。仮想PC上にLinuxをインストールしてしまうほうが楽だと思います。

$ML/Makefile.user.default を Makefile.user にコピーして編集したのち、$ makeでビルドが走ります。

すこし古いところもありますが、Wikia の情報も参考にしてください。

$ hg clone -r 70D-merge https://nkon@bitbucket.org/nikfreak/magic-lantern
複製先ディレクトリ: magic-lantern
リビジョンを追加中
マニフェストを追加中
ファイルの変更を追加中
11520 個のリビジョン(25493 の変更を 2775 ファイルに適用)を追加
ブランチ 70D-merge へ更新中
ファイルの更新数 1598、 マージ数 0、 削除数 0、 衝突未解消数 0
# 70D の開発先頭ブランチは 70D-merge
$ cd magic-lantern/ 
$ ls
COPYING             Makefile.setup         data/      installer/  src/
Doxyfile            Makefile.top           doc/       logo.png    tcc/
Makefile            Makefile.user.default  doxygen/   minimal/
Makefile.filerules  README.md              features/  modules/
Makefile.inc        build_tools/           icons/     platform/
Makefile.obsolete   contrib/               include/   scripts/

$ which arm-none-eabi-gcc
/usr/bin/arm-none-eabi-gcc
$ arm-none-eabi-gcc --version
arm-none-eabi-gcc (4.8.2-14ubuntu1+6) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ cp Makefile.user.default Makefile.user
$ vim Makefile.user
#GCC_VERSION, ARM_PATH などを修正する。
#CF_CARDをSDカードのマウントパスではなく実在のディレクトリに設定しておくと便利。
$ make 70D.111B
# make -C platform/70D.111B でも同じ
$ cd platform/70D.111B/
$ ls
# autoexec.bin, ML_SETUP.FIR ができていればOK。
$ make all_modules
#モジュールをビルドする。
#rst2html が無い場合は apt-get install rst2pdf を入れる。
$ make -C platform/70D.111B install
#CF_CARD で示されたパスに、必要なファイル(autoexec.bin ML/* など)をコピーする。

make のターゲットの意味。

make 70D.111B
70D.111B 用の ML をビルドする。make -C platform/70D.111B/ とほとんど同じ。
make -C 70D.111B install
CF_CARD で示されたパスに、必要なファイル(autoexec.bin ML/* など)をコピーする。

How to Debug

2016-01-02

一般ユーザが持っているカメラは JTAG 端子など出ていないので、printf デバッグなどに頼らざるを得ません。

最近、QEMU上で動かして gdb でデバッグすることができるようになっているようです。

  1. magic-lantern/contrib/qemu/に行って、install.sh を実行します。
    $ ./install.sh      #…次のように表示される。
    Next steps:
    ===========
    
    1) Compile QEMU
    
       cd /home/(USER_NAME)/src/c/qemu/qemu-1.6.0
       ./configure --target-list=arm-softmmu --disable-docs --enable-sdl
       make -j8
    
    2) Grab a copy of the Canon firmware from your own camera
       (don't request one and don't share it online - it's copyrighted)
    
       Look on your SD card - you should find ML/LOGS/ROM0.BIN and ROM1.BIN
       Copy those in /home/(USER_NAME)/src/c/qemu/ and then run (for 60D):
    
       cat ROM0.BIN ROM1.BIN > ROM-60D.BIN
    
    3) Enable CONFIG_QEMU=y in your Makefile.user
       from magic-lantern directory, then run 'make clean' to make sure
       you will rebuild ML from scratch.
    
    4) Create a subdirectory named 'sdcard' or 'cfcard' and copy ML files there.
       Make sure all ML files are UPPERCASE (just copy them from a FAT32 card).
       You should get something like:
       /home/(USER_NAME)/src/c/qemu/sdcard/ML/AUTOEXEC.BIN
       /home/(USER_NAME)/src/c/qemu/sdcard/ML/FONTS/ARGNOR32.RBF
       /home/(USER_NAME)/src/c/qemu/sdcard/ML/MODULES/ARKANOID.MO
       and so on.
    
    5) Start emulation with:
    
       cd /home/(USER_NAME)/src/c/qemu/
       ./run_ml_60D.sh
    
       (this will recompile ML and QEMU - handy if you edit the sources often)
    
    Enjoy!
    
    $ cd ../../../qemu/qemu-1.6.0/
    $ ./configure --target-list=arm-softmmu --disable-docs --enable-sdl
    $ make -j8
    
  2. 画面の指示通りに、cd ../../../qemu/qemu-1.6.0 してから ./configure & make します。
  3. 必要なものが不足していたら、apt-get で入れます(libtoolなど)。
  4. 70D用の設定は無いので、60D用のものコピーしてきます。
    grep -R 60D * で検索して、次の修正をします。
    1. qemu/にある run_ml_60D.sh を run_ml_70D.sh にコピーして、中の 60D を70Dに編集。
      `dirname $0`/run_ml.sh 70D 111B $*
          
    2. qemu/qemu-1.6.0/hw/armにある eos.c を 編集。
      ML_MACHINE(50D,   0xFF010000);
      ML_MACHINE(60D,   0xFF010000);
      ML_MACHINE(70D,   0xFF010000);
      ML_MACHINE(600D,  0xFF010000);
      ML_MACHINE(500D,  0xFF010000);
         :
         :
      EOS_MACHINE(50D,  0xFF010000);
      EOS_MACHINE(60D,  0xFF010000);
      EOS_MACHINE(70D,  0xFF010000);
      EOS_MACHINE(600D, 0xFF010000);
      EOS_MACHINE(500D, 0xFF010000);
      
      …
      
          qemu_register_machine(&canon_eos_machine_ml_50D);
          qemu_register_machine(&canon_eos_machine_ml_60D);
          qemu_register_machine(&canon_eos_machine_ml_70D);
          qemu_register_machine(&canon_eos_machine_ml_600D);
          qemu_register_machine(&canon_eos_machine_ml_500D);
          :
          :
          
          qemu_register_machine(&canon_eos_machine_50D);
          qemu_register_machine(&canon_eos_machine_60D);
          qemu_register_machine(&canon_eos_machine_70D);
          qemu_register_machine(&canon_eos_machine_600D);
          qemu_register_machine(&canon_eos_machine_500D);
      
          
  5. MLメニュー(Debug→Dump ROM and RAM)からファームウエアのバックアップを実行し、上のコマンドのように qemu/ 以下のROMファイルを作ります。
    $ cat ROM0.BIN ROM1.BIN > ROM-70D.BIN
      
  6. magic-lantern/Makefile.user に CONFIG_QEMU=y として make を実行します。
    ただし、70D の場合、nikfreak のリポジトリから取ってきたものではダメで、hudson のリポジトリから若干のポーティングが必要なようです。この辺、他の作業とあわせて実行していたら、よくわからなくなってしまいました。2016-01-03時点では、nikfreak リポでは起動しなかったですが、lua のポーティングもあわせていろいろいじっていたら QEMU 上で起動しました。
  7. ./run_ml_70D.sh
    で起動します。さすがに遅いです、がCPUをブン回している感じもしません。
    覚えておくべきは、[ALT]+[CTRL] のキーバインドで、QEMUが専有しているキーから抜けることです。
    run on QEMU
  8. LiveView などでCMOSセンサの画像を表示するためには、vram00.png という画像を用意しておくと、それが使われます。


近藤靖浩
Last modified: Fri Jan 6 01:00:23 JST 2017