Now that CHDK has a working beta in the source tree for my Canon PowerShot SD790is, I actually have to prepare SD cards for it. The Bootable SD card – OS X instructions seem a bit contrived, so I took a look at the linux instructions, and modified them accordingly. These instructions should work for FAT16-formatted SD cards of 2GB capacity and under. It will not work for SDHC cards, which are generally formatted to FAT32.
This is all command-line only for here on in. It seems to work. Please note that you will be modifying raw file systems with root permissions here; there is no safety net. If you b0rk your main hard drive, don’t say I didn’t warn you.
Firstly, you’re going to have to find out where the SD card in mounted. Do this with:
Filesystem 512-blocks Used Available Capacity Mounted on /dev/disk0s2 487463200 318749896 168201304 66% / devfs 222 222 0 100% /dev map -hosts 0 0 0 100% /net map auto_home 0 0 0 100% /home /dev/disk2s1 3969280 3328 3965952 1% /Volumes/CANON_DC
There are three important concepts to note when looking at the mounted card:
- The mount point (or volume) – in this case
/Volumes/CANON_DC. This is the location that you see in Finder when moving files around.
- The filesystem – here
/dev/disk2s1. This is the partition on the disk, arranged according to a certain formatting scheme like MS-DOS FAT16.
- The disk device – which for me is
/dev/disk2. This is the disk device itself, and it may contain several filesystems.
Your locations for these three could well be different, so please substitute your values.
You’ll need to unmount the device, as writing to a raw filesystem while the OS thinks it has control often results in hilariously unexpected results. I used the OS X-specific command
diskutil unmount /Volumes/CANON_DC
You should get a message like
Volume CANON_DC on disk2s1 unmounted. Now you need to write the boot instruction:
echo -n BOOTDISK | sudo dd bs=1 count=8 seek=64 of=/dev/disk2s1
This will prompt you for your password.
If you need to, you can remount the filesystems on the card with
diskutil mountDisk /dev/disk2
(Note that we used the disk name here, not the filesystem. If there were several partitions on the disk, this command would mount all of them that it could. It’s also kinda handy for remounting USB devices that you’ve accidentally ejected from Finder.)
Update: Knowing a difficulty getting the firmware update method of getting CHDK to work on a Mac? Running a Leopard or newer machine? Then you need to learn all about Apple’s quarantine attribute and how to remove it with
xattr: FAQ/Mac – Still having trouble?.