Ubuntu bootolás 8 bites mikrokontrolleren?

Címkék

Dmitry Grinberg blogjában arról számol be, hogy sikeresen bootolt be egy 8 bites mikrokontrolleren Linuxot. Pontosabban Ubuntu-t. A hacker szerint nem csak parancssorig képes eljutni. Aki türelmes, akár X + GNOME felületet is kaphat (2 óra a bash promptig single módban, plusz 4 óra a login-ig, de ha valaki X-et is akar, akkor jóval többet kell várnia).
Általában elmondható, hogy Linux futtatásához minimum kell egy MMU-val rendelkező 32 bites CPU és legalább 1MB RAM, hogy elférjen a kernel. Dmitry megpróbálta lejjebb vinni a határokat. Írt egy ARM CPU emulátort a ATmega1284p-hez és arra varázsolta rá a Linuxot. Vagy legalábbis ezt állítja.

Részletek a blogbejegyzésben.

Hozzászólások

Szerintem nem csak az a gond, hogy nincs MMU, hanem az is, hogy nagyon kevés RAM van benne. Igaz, 32-bittel 4 GB-ot lehet címezni, de fizikailag csak 128 kB van benne, és nem lehet külsőleg közvetlenül címezhetőleg hozzárakni. Az IO portokon vagy a párhuzamos porton (PMP) természetesen lehet külső RAM-ot hozzákötni, de azt bonyolultabb elérni.
Azt kéne megoldani, ha valaki olvasni akar mondjuk a 0x2A2A2A2A címről, akkor a proci ténylegesen ne onnan olvasson, hanem olvassa be a külső memóriáról a PMP segítségével az adatot a belső memóriába, majd az utasításnál cserélje ki a 0x2A2A2A2A-t, arra a címre, ahova a belső memóriába beolvasta a külső emóriában lévő adatot.

Mondjuk ha a Microchip visszarakná az MMU-t (és az FPU-t (ami uC-es környezetben sem ártana)) és megcsinálná, hogy valahogy rá lehessen kötni külső memóriát, akkor egy egész kis pofás linuxot futtató SoC/uC/proci -t kapnánk.
(Bár akkor már ugye van ARM, amiből van GHz-es tartományú is, lehet nem lenne értelme. Esetleg hobbistáknak jól jönne, akik nem tudnak/akarnak BGA-t forrasztani.)

Az önkínzásra sejtésem szerint vannak egyéb módok is. :-)

Ez nagyon tetszik. 8 bites CPU-ra portolni a Linuxot vajon nem lenne kisebb szopás? Végül gyorsabban futna, talán még élvezhető is lenne. Ha már egyszer emulátorral sikerült, még akár az emulátorral is lehetne egy egyszerű bináris->bináris fordítót csinálni.

--
joco voltam szevasz

Hát erre nincs más szó, ez tényleg egy állat :D Ez még Bellard böngészőben futó linuxánál is nagyobb állat!
De azért látom egy kis plusz ram még így sem ártott neki... :) Érdekes lenne a mikrokontrollerben lévő 16 kbyte sram-al :)
Kíváncsi vagyok meddig lehet még levinni az igényeket, pl. a következő talán már egy attiny lesz? :)

Ezt nem tudom, hogy hol almodtad, de egyik assemblerben sem talaltam igy hirtelen SYS hivast. :)
A $hivatkozast sem ismeri a basic 2.0 :)

Tehat, klasszikusokat, vagy pontosan, vagy sehogy.
Mondjuk igy:

4C E2 FC JMP $FCE2

Ertem?
Minden mas assemblerben, monitorprogramban eleg egy jmp $fce2 is. :)
Okoska. :D

Ebben neked természetesen igazad van, csakhogy annak idején amikor még a C-64-el foglalkoztam, készítettem egy Basic-bővítést, amely már felismerte a $ előtéttel jelölt hexadecimális számokat, s emiatt írtam így. Igazság szerint ez az egyetlen dolog amit nem szeretek a C nyelvben: hogy ott a hexa számokat 2 karakterrel jelölik, a 0x-el, s nem egyetlen jellel, a $-ral, amit pedig úgy megszoktam még anno a C-64 korában.

De a Basic-bővítésem bináris számokat is tudott kezelni, azoknak a % jel volt a bevezető karaktere, pld %1101

A Basic-bővítésem különben képes volt akár számított ugróutasítások és szubrutinhívások végrehajtására is, simán lehetett benne pld ilyesmiket írni:

goto 3*A+200

De volt benne feltételes NEXT utasítás is, ilyesféle hogy pld:

next(A>B)

Ez azt csinálta, hogy ha a zárójelben megadott feltétel igaz volt, akkor kiugrott a ciklusból, azaz a next utáni utasítás végrehajtását kezdte el, ha ellenben a feltétel hamis volt, akkor folytatta a ciklust. Meg még nagyon sok cool utasítás szerepelt a Basic-bővítésemben. Régi szép idők!

-------------
Blogom: http://violazoli.blogspot.com
Könyvem a VIM-ről: http://mek.oszk.hu/09600/09648/#

C64-re volt ám C és Pascal fordító is!

Ki is próbáltam mind a kettőt! A C után már tényleg tisztább és szárazabb érzésem volt:

int - 2 byte
long - 4 byte
float - 4 byte
double - 8 byte

Teljesen megborzongtam, hogy huhú 4 byte-os egész! Assemblyben szophattam volna vele rendesen, itt meg: long l=1000000;

Érdekes értékek vannak a printk-s sorok előtt...

Mondjuk a kod minosege eleg borzalmas...

A Knuth-féle MIX-en fut már Ubuntu?

azon kívül hogy vicces, van ennek valami gyakorlati értelme?

És hány FPS-sel megy a Quake3 rajta? :-)

Azért ARM emulátort irni AVR-re... poénnak jó, de viccnek is rossz...
:-)

Amit lehetne viszont csinálni: Xilinx Zynq ARM magjain Linuxot futtatni, az FPGA-ba meg hardveres gyorsítást az egyes kernel részekre. Na, ez buli lenne...
Kár, hogy a Zynq-nek még árát sem látni sehol...

Virtualbox elindul alatta? Raknék rá guest-ként Windows 7-et.