soodan sivut

arkisto

191 kirjotelmaa.

avainsanat

Nyt kun Canonin EOS-kameroihin saa Linuxin boottaamaan tuon maanmainion Magic Lanternin jäbien ansiosta, niin oli ihan pakko antaa äänensä Magic Lanternille viimein kuuluviin; miettinyt tuossa jeesailua jo vuoden päivät, täytynyt silti tässä yrittää pysyä erossa sen koodista kun on kaikenlaista mitä pitäisi ennen sitä saada valmiiksi, mutta nyt ei ainakaan enää malta. Kernelitunkkaus päivätöissä ei muka riitä ja onhan reverse-engineeraus mainiota puuhaa. Hienosti aprillipäiväksi ajoitettu julkaisu siitä, että tuossa boottaa Linux, kertoo että ainankin päädevaajia kiinnostaa kokeilla koko ideaa ja että joskus lopulta tuosta projektista voisi tulla jotain entistäkin suurempaa. Mutta mitä? Tässä seuraa skitsofreeninen braindumppi.

Kuka ties, mitä Linuxilla tekee kamerassa - voi jäädä hassuksi kokeiluksi, tai kehittyä täysin uudenlaiseksi projektiksi. Magic Lanternin nykytilassa kameraa voi ihan käyttää normaalistikin, kun se ei korvaa koko softaa. Linux taas on kokonaan oma käyttiksensä alkuperäisen tilalle.

Tällä hetkellähän Magic Lantern koukuttaa itsensä järkkärin käynnistyksen aikana ajoon erilliseksi ohjelmaksi kameran DryOS-käyttikseen. Tavalliset valikot ja toiminnot säilyvät ennallaan, mutta roskakorinapista pääsee taikavalikoihin säätämään sitä sun tätä ja nappien toimintoja voi muuttaa tietyin rajoituksin. Magic Lanternin kautta voi tunkata asetuksia kameran muistista, ja kutsua erinäisiä funktioita joita alkuperäisfirmiksestä löytyy ja joita reverse-engineerataan firmiksestä hiki hatu... sitä mukaa kun harrasteena viitsitään. Joka järkkärissä on hieman erilainen firmis niin, että eri osat löytyvät vähän eri paikoista, ja sitä, mikä on mahdollista, rajoittaa se olemassaoleva käyttis. Purkkaa, voisi joku sanoa.

Linuxhan on teknisesti pelkkä kerneli ja sitten userspacen ohjelmat tulevat usein siinä sivussa. Canonin EOSit ovat ARM-pohjaisia tietokoneita, joissa on iso kuvakenno ja ns. SIMOSTI() signaalinkäpistelyä siinä sivussa, mitä ei ihan sillä ARM-corella tehdä. Itse prossucorea ja välimuistia on helppo ajaa, ja vain sillä se Linux pyöriikin.

Tuon oheisraudan ohjaaminen sen sijaan ei ole mitenkään speksattua, se on varsin poropietaria softan ja raudan suhteen ja jokseenkin kaikki, mitä ML:n tiimi siitä tietää, on reversattua kamerasta dumpatusta firmiksestä. Siitäkin suurin osa on vain tietoa siitä, mitä firmiksen valmiita funktioita kannattaa kutsua; ei siitä, miten esim. kuvakennoa oikeasti luetaan ja miten kuvankäpistelyraudalla ruuvataan jokseenkin reaaliajassa raakakuvasta julkaisuvalmis jpeg (niille, jotka jpegejä käyttävät). Firmiksen lähes joka osa olettanee, että kamerassa rullaa alkuperäiskäyttis eikä toimisi oikein ilman, eli sama toiminnallisuus tarvitsisi selvittää kertaluokkaa nykyistä tarkemmin, jotta Linux-kerneliin voisi kirjoittaa vastaavat ajurit. Omat ajurit toisaalta sallisivat kaikkien rajoituksien kiertämisen, kuten videon kuvaamisen kunnes tila loppuu eikä kunnes kamera päättää sen tietyn ajan päästä lopettaa.

Userspace-prosessien helpompi kirjoittaminen ja käyttö olisi raudan täyden hallinnan lisäksi toinen suuri etu Linuxia ajettaessa. Kun koko POSIX ja muu Linuxista tuttu kama olisi saatavilla, softan kehitys helpottuisi huomattavasti, vaikkakin vaatisi silti ristikääntöympäristön. Kameran raudasta tosin puuttuu mm. MMU, joka on modernien koneiden ja käyttiksien oleellinen osa. Ilman virtuaalimuistia - eli yhtä userspaceksi erottelun suurimmista eduista - prosessit voivat tosta noin vaan käpistellä toistensa muistia ja itse rautaa joko tahallaan (tuskin tässä tapauksessa) tai ohjelmointivirheen seurauksena. Magic Lanternissa on jo eräänlainen moduulijärjestelmä, jolla sitä voi laajentaa helpohkosti, sekä koko koodiakaan ei ole niin paljoa, ettei sitä voisi kokonaisuudessaan käsittää.

Linux ei myöskään ole reaaliaikakäyttöjärjestelmä, toisin kuin kameran natiivi DryOS. Ei ole tietoa siitä, miten vauhdilla kameran rauta odottaa softan vastaavan, jotta kuvien tai videon ottaminen olisi ylipäätään mahdollista.

Miten pitkälle Linuxin kanssa mentäisiin? Kai sillä ainakin pingataan localhostia? Täyttä näppäimistöä kamerassa ei ole eikä tule (sen usb tuskin osaa isännöidä muita laitteita). Voisi aluksi hyvin riittää demoamiseen, että siinä pyörittäisi kernelin lisäksi vain yhtä userspace-prosessia, joka hoitaisi kaiken kuvaamisen. Tässä taas ei oikeastaan olisi mitään järkeä, kun ajurien rajapinnat kernelin ja userspacen välille pitäisi tehdä "ihan turhaan" kun kaiken voisi hoitaa kernelistäkin. Jos päävalikko taas olisi oma ohjelmansa joka starttaisi muita prosesseja käytännössä joka alavalikosta, hommassa olisi hieman enemmän järkeä.

Jos useampi tälläinen prosessi ajaisi samanaikaisesti, järkeä olisi vielä enemmän. Kerneli hoitaa mm. muistikortin filesysteemin, yksi prosessi valokuvaamisen ja toinen prosessi vaikka kuvien lataamisen samaan aikaan usbin yli, sekä kolmas vaikka soittaa taustamusaa. Noin pienellä multiprosessoinnin tasolla toisaalta ajatus omasta käyttiksestä tuntuu turhan työläältä, kun kamera on sellaisenaankin ihan käyttökelpoinen. Valokuvaamiseenkin voisi olla useampi eri prosessi eri tarkoituksiin, mikä lähinnä yksinkertaistaisi koko softan rakennetta - softa X perusvalokuvaamiseen, Y videokuvaamiseen ja Z vaikkapa timelapsaamiseen.

Merkittävintä olisi joka tapauksessa raudan täysi hallinta, mikä nyt vaatisi ihan tajuttoman määrän reverse-engineerausta suhteessa nykyiseen, jotta kameralla saisi edes yhden kuvan. Ajatus siitä, että tämä voisi olla mahdollista, on joka tapauksessa mielenkiintoinen. Valmista kuvankäsittelysoftaa Linuxille on myös melkoinen kasa, mainittakoon nyt aluksi vaikka opencv. Saapa nähdä mihin asti tuolla pääsee. Ajatella niitä kaikkia konenäkösovelluksia. Ja varmaan sillä vois pelata doomiakin.

Testasinkin itse jo vaadittavien koodinpätkien kääntämistä ja veivasin kernelin viestit läpällä eri värisiksi taatakseni että muutokset näkyvät.

0 kommenttia

Oma kommenttisi

Mielipide tämän sivun asiasta? Kirjoita toki. Älä raapusta kuitenkaan ihan asiattomia juttuja.

Jos on yksityisempää asiaa, tarkkaa kysyttävää tai aihetta pidemmälle keskustelulle, käytä yhteydenottolomaketta kommentoinnin sijaan.

Hölmöt kommentit saatetaan moderoida pois jälkikäteen.

Nimimerkki:

Spammibottiesto: Mikä on kahdeksan ja nollan erotus? (vastaus numeroina)