ツールを使わず、MacOSXの機能だけで2GB以上のSDカードでCHDK(Canon製コンデジ用カスタマイズソフト)の自動起動を有効にしよう


はじめに

 CHDKという、SDカードにインストールして使用する、Canon製のコンデジに様々な機能を追加するソフトウェアがあります。 このソフトは、一度SDカードにインストールしてしまえば、カメラの起動と同時に起動する便利なものですが、昨今主流の2GB以上のSDカードからはファイルシステムの都合上、単純にインストールすることができません。

Windows上でCHDKを2GB超のSDカードから自動起動可能状態でインストールする情報や、そのためのツールは豊富にありますが、MacOSXでの方法やツールの情報はあまり見かけません。

そこで、今回は、MacOSXで特別なツールの導入なしで、2GB超のSDカードでCHDKを自動起動化して使えるようにしてみます。

ポイント

まず、Canon製のコンデジがどうやってCHDKを起動時に自動的に読み込んでいるのでしょうか? カメラには開発用にSDカード上のソフトを起動する機能があり、CHDKはそれを応用しています。

この機能の発動条件をまとめると、以下のようになります。

  1. SDカードのライトプロテクトが有効にされていること
  2. SDカードの第一パーティションの頭から64バイト目に"BOOTDISK"という8バイトの文字列が存在すること
  3. SDカードの第一パーティションにDISKBOOT.BINというファイルが存在すること、存在すればそれをロードする

 2GB超のSDカードでは、容量の都合上旧来のファイルシステム(FAT16)では管理できないため、新しいファイルシステム(FAT32)を使用しなければならなくなりました。

 2番目の条件で使用するカメラへの合い言葉(BOOTDISK)を、旧来のファイルシステム(FAT16)の管理領域では未使用であった領域に、いわば裏技的に埋め込んでいましたが、 新しいファイルシステム(FAT32)では、この合い言葉を埋め込んでいた領域は未使用ではなくなってしまいました。従ってFAT16の時のように文字列を埋め込んでしまうとFAT32のファイルシステムを破壊してしまいます。

そこで、SDカードを2つのパーティションに分割し、第一パーティションを旧来のファイルシステム(FAT16)にフォーマットし、CHDKをインストールして、 第二パーティションを新しいファイルシステム(FAT32)にフォーマットし、そこに写真データを記録する、という解決策がCHDKで採用されました。

つまり、MacOSXであれ、何であれ、以下の作業が実行できれば良いわけです

  1. SDカードを2つのパーティションに分割する
  2. 第一パーティションはFAT16でフォーマットする
  3. 第二パーティションはFAT32でフォーマットする
  4. 第一パーティションの頭から64バイト目に"BOOTDISK"という8バイトの文字列を埋め込む
  5. 第一パーティションにCHDKのファイルをコピーする

※今回は細かい設定をするため、コマンドライン版のディスクユーティリティーを使用します。

作業手順

1. SDカードのディスク識別子を知る

 コマンドラインからSDカードを操作するにあたり、SDカードのディスク識別子がわからないといけません。SDカードをMACに挿入してディスクユーティリティー.appを開き、 一番上のSDカードのアイコンを選択して、情報ボタンを押します。下のようなウィンドウが現れディスク識別子が表示されているはずです

 私のMACではSDカードはdisk2という識別子で認識されていました。この識別子はコマンドラインからSDカードを操作するにあたり必須となりますので覚えておいてください。

2. SDカードのマウント解除をする

 ここからの作業はFinderの管理下で行うには都合の悪い作業を行うことになりますので、SDカードのマウント解除を行い、Finder上からこのSDカードの存在を消します。

ターミナル.app を起動し 以下のコマンドを入力します。

diskutil unmount /dev/disk2s1

"disk2"の箇所は、先ほどディスクユーティリティーで確認したSDカードの識別子で置き換えてください。SDカードのマウント解除が成功すると次のメッセージが表示されます。
Volume UNTITLED on disk2s1 unmounted

"UNTITLED"の箇所はSDカードのディスク名となります。

3. SDカードの内容を消去し、パーティションを切る

 次のコマンドの入力します。SDカードの内容はすべて初期化され、新しいパーティションが切られます。

例によって、disk2はあなたのディスク識別子に置き換えてください。

diskutil partitionDisk /dev/disk2 2 MBR "MS-DOS FAT12" CHDK 2M "MS-DOS FAT32" PHOTO R

 コマンドの意味は以下の通りです。 コマンド版のディスクユーティリティーdiskutilを、ディスクのパーティションを切るためpartitionDiskオプション付きで起動します。対象ディスクデバイスは/dev/disk2のSDカードであり、2つのパーティションに切ります。 パーティションタイプは古典的なMBRとし、1つ目のパーティションのフォーマットは旧来の"MS-DOS FAT12"、ディスク名はCHDK、容量は2Mバイトとします。2つ目のパーティションのフォーマットは"MS-DOS FAT32"、ディスク名はPHOTO、容量はR(残りすべて)とします。

 これでCHDKのファイルをおさめるだけの容量を持ったCHDKパーティションと、カメラにより写真データが書き込まれるPHOTOパーティションに1枚のSDカードを分割することが出来ました。Finderにはいつの間にかCHDKとPHOTOの2つのSDカードのアイコンが表示されていると思います。

例として4GBのカードで成功した場合、以下のようなメッセージが表示されます。
Started partitioning on disk2
Unmounting disk
Creating the partition map
Waiting for the disks to reappear
Formatting disk2s1 as MS-DOS (FAT12) with name CHDK
512 bytes per physical sector
/dev/rdisk2s1: 3855 sectors in 3855 FAT12 clusters (512 bytes/cluster)
bps=512 spc=1 res=1 nft=2 rde=512 sec=3912 mid=0xf8 spf=12 spt=32 hds=16 hid=2 drv=0x80
Mounting disk
Formatting disk2s2 as MS-DOS (FAT32) with name PHOTO
512 bytes per physical sector
/dev/rdisk2s2: 7725472 sectors in 965684 FAT32 clusters (4096 bytes/cluster)
bps=512 spc=8 res=32 nft=2 mid=0xf8 spt=32 hds=255 hid=3915 drv=0x80 bsec=7740597 bspf=7545 rdcl=2 infs=1 bkbs=6
Mounting disk
Finished partitioning on disk2
/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *4.0 GB     disk2
   1:                 DOS_FAT_12 CHDK                    2.0 MB     disk2s1
   2:                 DOS_FAT_32 PHOTO                   4.0 GB     disk2s2

4. CHDKのパーティションに合い言葉の文字列を仕込む

 カメラによるCHDKの自動起動を実現させるために、先ほど作成したCHDKパーティションの管理領域にBOOTDISKという文字列を仕込みます。

まず、先ほど作成さマウントされたCHDK用パーティションのマウント解除をします。

diskutil unmount /dev/disk2p1

"disk2"の箇所は、SDカードの識別子で置き換えてください。CHDKパーティションのマウント解除が成功すると次のメッセージが表示されます。
Volume CHDK on disk2s1 unmounted

 次にCHDKのパーティションの管理領域にBOOTDISKの文字列を埋め込むため次のコマンドを入力します。
echo -n BOOTDISK | dd bs=1 count=8 seek=0x40 of=/dev/disk2s1

 コマンドの意味は、以下の通り。

改行無し-nBOOTDISKという文字列を出力echoします。その出力はddコマンドに渡され、ブロックサイズは1バイトbs=1で8ブロック分count=8、64バイト目の位置でseek=0x40 SDカードデバイスの第一パーティションof=/dev/disk2s1に対して直接書き込みます。

成功すると次のようなメッセージが表示されます。
8+0 records in
8+0 records out
8 bytes transferred in 0.002894 secs (2764 bytes/sec)

5. CHDKパーティションにCHDKのファイルをコピーする(終)

 ここまでくれば、ほとんどの作業は終了です。

 Finderから、まだ画面に残っている"PHOTO"SDカードを取り出して、SDカード本体もMACやカードリーダーから一度抜いて、挿し直してください。

CHDKパーティションにCHDKのサイトからダウンロードしたCHDKのファイルをコピーします。

カードのライトプロテクトをONにして、あなたのCanonコンデジにセットして電源を入れましょう。CHDKのロゴが表示されて数GB分の撮影可能枚数があれば、今回の自動起動化は成功です。

おしまい

/TOP/