SPI kernelio modulis

Kadangi jau išmokome rašyti labas pasauli kernel modulius, reikia imtis ko nors rimtesnio. Šį kartą mokinsimės rašyti kernelio draiverį nusiųsti duomenims SPI įrenginiui. Kaip ir *”labas pasauli”* pavyzdyje, duomenys bus siunčiami modulio prijungimo (inicializavimo) metu.

Taip pat, dėl įdomumo panaudosime dinamiškai moduliui galimą priskirti parametrą, kurį bus galima nurodyti prijungiant modulį.

LPH9157-2

Štai čia yra Siemens C75 mobilusis telefonas:

Tačiau kur jo ekranėlis? Jį išlupo kažkoks piktas zuikis. Jis prie ekranėlio prilitavo laidus ir bandys sujungti su pcDuino.

Rašome kernelio modulį

Linux kernelio modulius galima rašyti dviem būdais: in-tree ir out-of-tree, o kompiliuoti dar dviem - kaip build-in (įkimpiluojamas į patį kernelį) ir kaip loadable-module (sukompiliuojamas kaip atskiras modulis, kurį galima užkrauti prireikus ar panorėjus).
Pats rašymas nelabai ir skiriasi, skiriasi tik kur laikomi failai. Paprastai rekomenduojama modulį rašyti in-tree ir prašyti, kad tavo modulį priimtų Linusas. Tada atseit kažkas pasirūpins, kad tavo modulis kompiliuotųsi keičiantis kernelio versijoms. Tačiau būkime realistai - niekam tavo modulis neįdomus, niekas jo nepriims ir niekas neprižiūrės.
Jeigu jau apėmė tokios niūrios nuotaikos arba dar tik mokaisi rašyti kernelio modulius, geriau rinktis out-of-tree metodą - bus lengviau susirasti savus failus ir sekti pakeitimus.

Bootable SD kortelės paruošimas

> Pradinis straipsnis

Kadangi jau paruošėme bootloaderį ir susikompiliavome kernelį, galime juos įrašyti į sd kortelę ir paleisti sistemą. Tačiau prieš tai dar reikia pasirūpinti pačia linux aplinka (programomis). Jūsų laimei kiekvienos komandos atskirai kompiliuoti nereikės, yra priruošta daug failų sistemos medžių (rootfs/filesystem tree), kuriais be problemų galėsite naudotis.

Kernelis

> Pradinis straipsnis

Dažniausiai kompiuteriukui galima rasti daugiau nei vieną kernelio versiją - gamintojų ir atviro kodo. Gamintojo kernelis dar skirstomas į gamintojo kompiliuotą ir savą, tik kompiliuotą iš gamintojo pateikto kodo.

Atviro kodo kernelis

Šį ir turėtum naudoti, tačiau jį pasirinkus bus daug problemų - ne viskas veiks, nebus 2D/3D spartinimo, srėbs daugiau elektros. Visgi galėsi pats pasirinkti kuriuos modulius įkompiliuoti, galėsi pats pasirašyti driverius ir pajusi lentą “iki galo”.

Gamintojo kernelis, kompiliuotas iš kodo

Tai gamintojo modifikuotas atviro kodo kernelis. Jo pakeitimai nėra įtraukti į normalų atviro kodo kernelį, nes kinai nemoka kodinti draugiškai. Taip pat tai nepilnas kernelis: taip, jis kompiliuojasi, bet kai kurių modulių kodas slepiamas. Kai kas veikia labiau nei normaliam kernelyje, tačiau vis tiek ne kažką. Norint, kad veiktų dar labiau, reikia nusikopijuoti sukompiliuotus modulius iš gamintojo kompiliuoto kernelio (turi sutapti kernelių versijos ir atitikti konfigai). Tai tarpinis variantas, kurio turėtum vengti.

Gamintojo kernelis

Šį kernelį ir jo modulius kompiliavo pats gamintojas. Jis veikia labiausiai iš visų trijų, tačiau tu jau nebegali jo modifikuoti ar papildyti savais moduliais. Kartu pateikiami ir jau sukompiliuoti ne atviro kodo moduliai, kuriuos galima nusikopijuoti į savo kernelį ir kartais jie veikia. Šį variantą reikėtų rinktis jeigu nori, kad viskas veiktų ir nenori kišti nagų prie branduolio.

Bootloaderis

> Pradinis straipsnis

Kaip ir normalios (x86) architektūros kompiuteriuose, rankiniams irgi reikalingas bootloaderis. Dažniausiai pačiame procesoriuje yra suhardkodinta tam tikra įkrovimo seka:

  • įkrauti iš SD kortelės
  • įkrauti iš flash atminties
  • įkrauti iš dar kažkur

Procesoriukas kiekvienoje iš atminties saugyklų ieško magiško numerio (priklauso nuo gamintojo). Radęs checksumą vykdo programą, kuri mūsų atveju ir yra bootloaderis. Neradęs ima tikrinti kitą iš sąrašo. Žinoma, konkreti seka ir veiksmai skiriasi nuo kiekvieno procesoriuko gamintojo, manojo galima rasti čia: http://linux-sunxi.org/Boot.

Seniau bootloaderis užkraudavo įrenginio konfigūracija ir paleisdavo linuxą, tačiau dabar linkstama prie to, kad jis tiesiog paleistų linuxą. Lentos konfigūracija įrašoma į tokį “device-tree”, kuris automatiškai įkeliamas kraunant linuxo kernelį.

Rankos

Yra tokie rankiniai procesoriai (angl. ARM), jie naudojami visokiuose rankose laikomuose įrenginiuose: telefonuose, planšetėse, išmaniuosiuose laikrodžiuose ir pan. Dar šie procesoriai naudojami miniatiūriniuose kompiuteriukuose, labai pamėgtuose moksliukų. Išleista devynios galybės tokių kompiuteriukų:

Dažniausiai moksliukai nusiperka tokį kompiuteriuką, padaro mirksinti LEDą ir pritrūkę fantazijos papraščiausiai numeta jį amžino atilsio kažkur į spintą. Aš irgi nusipirkau tokį kompiuteriuką, tačiau ne tam, kad mirksinčiau LEDą, o rimtam projektui.

JavaScript kintamųjų galiojimo sritys

Dažnai jauniesiems programuotojams savo kelionę į JavaScript pradėjusiems nuo C++, Java ir panašių, į klases orientuotų objektinių programavimo kalbų neaišku kaip veikia this kintamasis. Priešingai, nei aukščiau paminėtose kalbose this gali įgyti skirtingas reikšmes priklausomai nuo to, kaip iškviečiama šį kintamąjį naudojanti funkcija.

Kitas susijęs kalbos niuansas — paprastų kintamųjų galiojimo sritys. Skirtingai, nei C ar Java šeimų kalbose, kintamųjų galiojimas neapsiriboja vien blokais tarp { } skliaustų. JavaScript’e galima išskirti

JavaScript pagrindai

Atėjo laikas susipažinti su paslaptinguoju JavaScript… Kas gi tas JavaScript? O gi tai antra pagal populiarumą skriptinimo kalba tarp maniakų, anarchistų, nemokšų ir vaikų. Nors tokiai publikai labai patinka laisva kalbos sintaksė, neribota laivė ir neapibrėžtumas tai dar nereiškia, kad Jūs būtinai turite priklausyti šiai tamsiajai visuomenės pusei tam, kad galėtumėte mėgautis JavaScript kodo rašymu. Taip pat tai nereiškia, kad būtinai turite rašyti bjaurų, niekam nesuprantamą kodą, primenantį pirmokų pirmuosius bandymus užrašyti savo vardą. JavaScript Jums suteikia daug laisvės ir tik nuo Jūsų priklauso kaip Jūs ją panaudosite.