torstai 24. huhtikuuta 2008

Canon S5 PowerShot IS digikameran virittelyä

Olin jo pitemmän aikaa harkinnut ostavani kunnollisen digikameran ja lopulta iskin silmäni Canon PowerShot S5 IS malliin. En halunnut pientä pokkaria ja oikea järkkäri olisi ollut aivan liian järeä peli omaan käyttööni joten ajattelin ostaa jotain siltä väliltä. Ainakaan toistaiseksi en keksi mitään pahaa sanottavaa kyseisestä mallista. Koko ja paino on pelkkää plussaa sillä vekottimen inertia pitää käsien tärinän kurissa :)

Laitteesta on saatavilla useita eri testejä ympäri nettiä joissa kaikissa se on pärjännyt erittäin hyvin. Laitteesta puuttuu kuitenkin yksi tärkeä ominaisuus: tuki RAW-muotoisille kuville. Vaikka ottaisit kameralla kuvan parhaalla laadulla niin silti se pakataan häviöllisesti JPEG-muotoon. Itseäni tuo ei haittaa sillä minusta ei olisi "kehittämään" kuvia käsin. Eipä tuo kunnolla Gimpilla ja 1024x768 resoluutiolla onnistuisikaan eli se siitä. Toisaalta olisihan se kiva tietää että laitteella voi ottaa kuvia raakamuodossa vaikka sitä ominaisuutta ei koskaan käyttäisi. Sama juttu kuin HD-töllön kanssa vaikka katseleekin Suomen digiteeveepullamössöä..

Tietokoneharrastajat ovat kuitenkin keksineet tavan jolla useat eri Canonin kamerat saadaan tukemaan RAW-muotoa vaikka ne tehtaalta lähtiessään eivät tätä tukisikaan. Canonin kamerat nimittäin pohjautuvat suurelta osin saman DIGIC-alustan ympärille. Myös Canonin S5 pohjautuu DIGIC-alustaan mutta ei tue RAW-kuvia. Toisaalta taas monet kalliimmat Canonin kamerat tukevat RAW-kuvia vaikka perustuvat täsmälleen samaan alustaan. Koska kuvadata on aina luonteeltaan RAW-muotoista (CMOS-kenno ei voi tuottaa suoraan JPEG-pakattua kuvaa) niin herää kysymys onko kyse vain eri ohjelmistoista joissa toinen "pakkoprosessoi" kuvan JPEG-muotoon ja toinen, kalliimpi vaihtoehto, antaa käyttäjälleen mahdollisuuden tallentaa myös tämä prosessoimaton raakadata? No, kameroilla toki on muutakin eroa kuin softa mutta RAW-muodossa kyse on juuri ja vain tästä. Siispä ladataan kameraan uusi ohjelmisto joka mahdollistaa tämän. Juuri siitä on kyse CHDK-nimisessä projektissa.

Lisäbonuksena kameraan tulee usea muukin erikoisuus ja tietysti pari peliä joita voi pelailla kameran näytöltä jos lintubongaaminen alkaa pitkästyttämään! Kaikki tämä tietysti ilmaiseksi ja lähdekoodien kera. Takuukaan ei (huhupuheiden mukaan) raukea koska kyseinen kikka ei muuta kameraa pysyvästi millään lailla. Jos kamera jostain syystä hajoaisi niin ohjelmistosta ei jää mitään jälkiä sillä se ladataan kameran RAM-muistiin muistikortilta vain kameran käynnistyessä. Kun kameran sammuttaa niin se palaa alkuperäiseen tilaan.

Jos ominaisuudet kuten RAW-kuvaus, skriptaaminen(!) ja jopa 65 sekunnin valotusajat kiinnostavat niin lue kuinka se onnistuu. Itse tappelin tovin jos toisenkin mutta hyvinpä tuo tuntuu pelaavan ja ainakin vielä on laitteen savut tallella.

Ohje on tarkoitettu vain Canon S5 mallille eikä sitä voi sellaisenaan käyttää muiden mallien kanssa.

Tein homman Linuxissa joten homma voi mennä vähän kryptisen kuuloiseksi mutta ohjeet pätevät muihinkin käyttöjärjestelmiin. Alkuperäisissä ohjeissa hommaan käytetään myös winkkaria ja mäkkiä joten saa soveltaa.

Canonin S5 mallia on ainakin kahdella eri firmiksellä ja oman kameran versio pitää selvittää ennen jatkotoimenpiteitä. Tätä varten muistikortille pitää luoda tiedosto nimeltä ver.req suoraan kortin juurihakemistoon. Tiedoston sisällöllä ei ole merkitystä ja se saa olla vaikka tyhjä.

Tämän jälkeen aseta kortti kameraan ja käynnistä kamera KATSELU tilaan. Tässä vaiheessa ei siis pitäisi tapahtua vielä mitään ihmeellistä. Nyt paina napit SET ja DISP pohjaan siten, että painat ensin SET ja pidät sen painettuna ja tämän jälkeen DISP. Ruutuun pitäisi nyt tulla erinäistä tietoa ja siitä pitäisi etsiä rivi jolla lukee Firmware Ver ja versionumero. Ota numero talteen kirjaimineen päivineen sillä tarvitset tätä myöhemmin. Omani muuten oli versionumeroltaan 1.01B mutta ainakin A-mallia on olemassa.

Seuraavaksi pitää ladata omaa versiota vastaava softa. Versioita on monta mutta yleisesti parhaana voi pitää ns. AllBest-käännöstä. Itse kääntelin binäärin lähdekoodeista (ja tätä ennen käänsin binutils ja gcc paketit lähdekoodeista) mutta tämä ei ole välttämätöntä. Täältä saa uusimman version valmiiksi käännettynä. Jos linkki on kuollut niin Googletus auttanee. Ota siis joko A tai B versio ja pura paketti koneellesi johonkin hakemistoon. Paketin sisällä on vain yksi tiedosto nimeltä DISKBOOT.BIN ja kokoa tällä on muutama sata kilotavua.

Nyt homma alkaa mennä hieman (mutta vain hieman) mutkikkaammaksi mutta paljon mielenkiintoisemmaksi. DISKBOOT.BIN tiedosto pitää siirtää muistikortin juureen ja muistikortista pitää tehdä buuttaava. Tämä onnistuu Linuxissa monellakin eri tapaa ja tässä esitetään yksi niistä. Tässä vaiheessa muuten pitää huomioida se seikka, että kortin tiedostojärjestelmän PITÄÄ olla FAT16-muodossa. Tämä taas asettaa kortille 4 gigatavun kokorajoituksen joten jos korttisi on esimerkiksi 8 gigainen niin homma ei toimi:( Tai toimii mutta et saa käyttöösi kuin 4 gigatavua. Tähänkin on erinäisiä kikkoja mutta kannattaa kokeilla aluksi 4 gigaisella tai sitä pienemmällä kortilla. Kuvat kannattaa ottaa ENSIKSI talteen sillä jos kortin tiedostojärjestelmän ryssii niin palautus on ikävää tai kallista tai molempia.

Jos kortti on jo FAT16 muodossa niin siitä pitää tehdä buuttaava. Tämä onnistuu heksaeditorilla(!) editoimalla tiedostojärjestelmää suoraan. Pieni varoituksen sana tässä vaihessa: varmista kahteen kertaan että muokkaat muistikortin ja juuri sen oikean muistikortin osioita ettet vahingossa tuhoa jotain tärkeää. Tähän on varmaan järkevämpiäkin tapoja mutta pelkkä boot-lipun asettaminen partedilla ei toiminut. Oletetaan siis että kortti on FAT16 muodossa (voit formatoida kortin kameralla niin saat muodon oikeaksi) ja asetettu kortinlukijaan. Asenna koneeseen hexedit-niminen softa. Ubuntussa tämä löytyy suoraan paketinhallinnasta. Seuraavaksi tarkista dmesg tulosteesta mitä laitetiedostoa kortti vastaa. Siis kirjoita konsoliin dmesg ja paina enter. Omassa koneessa tuloste on seuraavan kaltaista:

[ 3806.207011] tifm_core: MMC/SD card detected in socket 0:3
[ 3806.250835] mmc3: new SD card at address ab6d
[ 3806.251669] mmcblk1: mmc3:ab6d SD02G 1966080KiB
[ 3806.251724] mmcblk1: p1

Kortti siis tunnistettiin mmcblk1 laitteeksi ja siinä näyttäisi olevan yksi osio nimeltä p1. Seuraavaksi käynnistetään hexedit ja muokataan muutamaa tavua kyseiseltä osiolta. Annetaan käsky:

# sudo hexedit /dev/mmcblk1p1

Huomaa että on olemassa myös laitetiedosto /dev/mmcblk1 joka viittaa KOKO levyyn ei siis tuohon ainoaan osioon. Tärkeää on siis muokata ensimmäistä OSIOTA eli p1 pitää olla käskyssä mukana! Kortin luonnollisesti pitää olla lukitsematon jotta kirjoitus onnistuisi.



Ylläolevassa kuvassa kursori on kohdassa 0x40 (tämän näkee kuvan alareunasta tilariviltä) jossa lukee BOOTDISK. Kuvassa olevalla kortilla siis lukee tuo vaadittu BOOTDISK jo valmiiksi eli kortti on buuttaava. Voit hyppiä heksapuolen ja tekstipuolen välillä painamalla tabulaattoria. Kirjoita tekstipuolelle BOOTDISK isoilla kirjaimilla. Varmista että aloitat juuri kohdasta 0x40 niin teksti tulee oikeaan paikkaan. Kun olet valmis voit poistua painamalla CTRL+X. Kuvassa muuten näkyy alussa teksti PwrShot joka kertoo että kortti on alustettu kameralla.

Nyt kaiken pitäisi olla valmista. Mikäli et ole vielä siirtänyt DISKBOOT.BIN tiedostoa kortin juureen, niin tee se nyt. Lopuksi laita kortin kirjoitussuojaus PÄÄLLE (luit oikein) ja laita kortti kameraan. Vaikka kortti on kirjoitussuojattu niin uusi kameran ohjelmisto osaa tallettaa kuvia sinne. Jos kortti ei ole kirjoitussuojattu niin kamera käynnistyy normaalissa tilassa ilman uutta toiminnallisuutta. Voit siis kytkeä CHDK:n päälle tai pois yksinkertaisesti siirtämällä kirjoitussuojausta eri tilaan.

Käyttöohjeet ja *PALJON* muuta sälää löydät CHDK:n kotisivuilta.

Ei kommentteja: