Oleh Sujith H, LG#154. Bahasa Indonesia oleh Triyan W. Nugroho.
Suatu artikel di Slashdot menjelaskan mengenai fitur-fitur CHDK (Canon Hacking Development Kit) yang mengagumkan. Artikel tersebut mendorong saya membeli kamera tersebut untuk mengeksplorasi kemampuan yang dimilikinya. Saya memilih Canon A720IS yang mendukung CHDK. Pada artikel ini saya ingin berbagi mengenai kompilasi CHDK di GNU/Linux, instalasi, dan eksplorasi kemampuan scripting yang dimilikinya.
Instalasi
Saya mendownload source terakhir CHDK dari repository Subversion ke direktori ‘chdk’ pada direktori home saya.
cd
svn co https://tools.assembla.com/svn/chdk/trunk
Karena CHDK akan berjalan pada platform yang berbeda dari lokasi kompilasinya, kita membutuhkan sebuah cross compiler. Untuk itu saya mendownload binutils (versi 2.17) dan compiler GCC (versi 3.4.6). Saya kemudian membuat sebuah direktori ‘arm-elf’ dan ‘chdk_cross_compiler’ pada direktori home, dan mengekstrak binutils dan GCC pada direktori ‘chdk_cross_compiler’.
Berikut langkah-langkah membangun binutils:
1) cd ~/chdk_cross_compiler/binutils-2.17
2) ./configure --srcdir=../binutils-2.17 --target=arm-elf --prefix=${HOME}/arm-elf
3) make
4) make install
Lalu saya menambahkan ~/arm-elf/bin ke PATH:
export PATH=${HOME}/arm-elf/bin:$PATH
Kompilasi GCC:
cd ~/chdk_cross_compiler/gcc-3.4.6
Kemudian terapkan sebuah patch dari CHDK yang berada di ~/chdk/trunk/tools/patches/gcc-3.4-arm.diff.
patch -p0 < ~/chdk/trunk/tools/patches/gcc-3.4-arm.diff
Saya membuat direktori gcc-3.4.6-arm-elf pada ~/chdk_cross_compiler dan membangun GCC agar mendukung prosesor ARM secara default.
cd /home/sujith/chdk_cross_compiler/gcc-3.4.6-arm-elf
../gcc-3.4.6/configure --srcdir=../gcc-3.4.6 --target=arm-elf \
--enable-multilib --enable-languages=c --enable-clocale=gnu \
--disable-libm --disable-libc --disable-threads \
--disable-nls --disable-libssp --disable-intl --disable-libiberty \
--with-cpu=arm9 --with-newlib --prefix=${HOME}/arm-elf
unset LIBRARY_PATH
unset CFLAGS
make
make install
Setelah cross compiler telah siap, sekarang waktunya mengkompilasi CHDK.
cd ~/chdk/trunk
Karena kamera saya Canon A720 IS, saya menghapus tanda komentar untuk baris berikut pada file makefile.inc:
PLATFORM=a720 PLATFORMSUB=100c
Dan melakukan kompilasi.
make fir
Akan muncul sebuah file DISKBOOT.BIN pada direktori ~/chdk/trunk/bin. File tersebut kemudian kita salin ke memory card. Untuk itu, saya harus memformat SD card dengan filesystem FAT-16:
mkdosfs -F 16
Sebagai langkah terakhir, memory card tersebut harus bootable. Caranya adalah dengan mengedit partisi FAT dengan menggunakan hexedit (pastikan SD card tidak di-mount saat menjalankan perintah berikut).
umount /dev/sda1 hexedit /dev/sda1
Pada hexedit, saya berpindah ke mode ASCII dan menuliskan “BOOTDISK” (tanpa tanda petik) pada offset 0×40. Saya kemudian me-mount ulang SD card dan menyalin file DISKBOOT.BIN ke direktori root pada SD card, mengeset write-lock pada SD card (ini adalah tombol kunci kecil pada SD card), dan memasukkan kartu ke kamera. Kamera melakukan boot dengan CHDK dan menampilkan versi firmware CHDK. Sangat menarik melihat bahwa SD card pada posisi write-lock, namun kamera masih bisa menyimpan foto pada SD card.
Sekarang, kita berpindah ke alt mode dan menekan tombol menu (kamera saya dilengkapi dengan tombol menu, untuk model yang lain mungkin sedikit berbeda) dan kamera akan menampilkan opsi-opsi CHDK: bermain game, menampilkan file, gambar Raw, histogram, dan sebagainya.
Kemampuan Scripting
CHDK menyediakan interpreter kecil yang bernama UBasic. Mari kita mulai dengan script ‘hello world’. Nama file akan memiliki ekstensi .bas.
@title Hello World print "Hello World"
Di sini ‘@title’ menunjuk pada nama file program. Jika tidak kita sebutkan, nama file akan dibuat oleh CHDK. Salin program ke direktori chdk/scripts pada SD card. Pada kamera, saya harus menekan tombol shoot untuk menjalankan script. Anda bisa melihat keluaran pada layar:

Untuk mengedipkan LED pada kamera, saya menggunakan kode berikut:
for n=1 to 5
print "Led blink ",n
gosub "ledblink"
next n
:ledblink
set_led 7 1 60
sleep 1000
set_led 7 0
set_led 8 1 60
sleep 1000
set_led 8 0
return
‘gosub’ digunakan untuk menuju suatu subrutin. Di sini subrutin adalah ‘ledblink’. ’set_led’ adalah perintah yang digunakan untuk menghidupkan dan mematikan LED, dan ‘7′ adalah argumen dari ’set_led’ yang berarti LED warna orange. Sedangkan ‘8′ berarti LED berwarna biru.
Tampilan LED berwarna biru:
Untuk mengambil gambar dengan interval reguler 5 detik, saya menulis kode berikut:
for n=1 to 6
sleep 5000
print "shoot ",n, "of ",6
shoot
next n
Untuk meletakkan kamera pada mode ‘raw’, gunakan perintah ’set_raw’. Kode berikut ini bisa digunakan untuk mengeset mode raw dan kemudian mengambil gambar.
set_raw 1
sleep 1000
shoot
sleep 1000
set_raw 0
Dengan kode berikut, kita bisa melihat tegangan baterai dalam orde milivolt.
for n=1 to 10
a=get_vbatt
print "The V is ",a/1000, "V"
print "The V is ",a, "mV"
sleep 9000
a=0
next n
Itulah beberapa hal yang saya lakukan dengan GNU/Linux dan kamera Canon. Jika anda siap untuk bereksperimen dengan kamera CHDK anda, inilah waktu yang tepat untuk melakukannya.
Referensi
Wiki CHDK sangat membantu saya dalam melakukan hacking dan menulis artikel ini. Anda bisa membacanya disini.

