[OSy] Semestralka na realnem zeleze

Martin Pelikan martin.pelikan at gmail.com
Wed Jan 9 22:02:04 CET 2013


On Wed, Jan 09, 2013 at 06:45:57PM +0100, Tom?? Martinec wrote:
> Zdravim,
> 
> dneska na prezentacich nekdo povidal o tom, ze tu semestralku rozchodil 
> na realnem hardware. Muzete mi moc prosim poslat, jake zarizeni jste si 
> k tomu poridili a nejake walkthrough, jak jste to udelali? Ja si to 
> musim taky rozchodit.

Zdravim,

yup.  Neporidil jsem si k tomu nic, jen jsem vzal vyrazeny RouterBoard
433AH, ktery uz nejaky patek vyrabi Mikrotik.  Starsi/slabsi modely jsem
nezkousel, ale vsechny 4xx maji byt podobne.  Samozrejme je potreba
seriovy port a null-modem kabel. (pry uz se nedaji sehnat, hruza!)

Pouzivam jiny toolchain (triplet mips-linux-uclibc- vygenerovany z Gentoo
crossdev skriptu, uz ani nevim jak) a -march=24kc -DREAL_HARDWARE, ktery
povypina veci jako dorder.  Nezapominej, ze je to big-endian.

Psat si vlastni UART driver je opruz, ale nastesti je prednastaveny uz 
loaderem, takze staci ho donutit posilat interrupty pri datech na vstupu
a pred zapsanim znaku je potreba cekat, nez jiny registr rekne, ze uz je
volno.  Na internetu je asi tak 0x16550A clanku, ktere 16550A popisuji.

Ty UART interrupty jsou divne - na CP0 lajne 6 je pripojene zarizeni,
kteremu se ve zdrojacich Linuxu/FreeBSD (ktere jsou me neznameho puvodu)
rika MISC a krome UARTu obsluhuje jeste LEDky pres GPIO, SPI a dalsi
nezajimave veci.  Takze je potreba jeste rict tomuhle.

Dalsi magicka oblast pameti je resetovaci blok, kam se zapisovanim
cisilek resetuje budto cela deska, nebo jen nejake zarizeni, takze neni
nutne to vytahovat ze zasuvky porad, ale jen pri {dead,live}locku ;-)

Vrele doporucuji cp0_status &= ~CP0_STATUS_BEV_MASK -- jejich bootstrap
exception vektor sice obsahuje kod vypadajici smysluplne, ale pouziva 
pamet, kterou uz loader preplacl kernelem :-(

Kdyz jsme u te pameti, tak zatimco FreeBSD ma zadratovanych 32 MB, Linux
pouziva trik, ze vezme pointer na aktualni funkci a zkousi ji najit na
adrese (x + nasobek dvojky) -- asi proto, ze vsechny modely maji 2^n MB
operacni pameti. (proc je kernel rozkopirovany dvakrat jsem nevypatral)

Psat driver k sitovce je nejvetsi legrace, protoze k MII toho switche
existuje dokumentace, ktera docela odpovida realite.  Takze prestoze to
v jejich silenem OS hlasi tri interfejsy, dva z toho jsou ve skutecnosti
za switchem, ktery umi nektere veci v HW (VLANy, STP, ...) a jejich
nastaveni je jednoduche a zdokumentovane.

S prijmem/odesilanim paketu je to horsi -- Linux nema nic, OpenWRT a
FreeBSD maji funkcni ovladace plne divnych zkratek, ale nejlepsi kod
byl na www.pudn.com (navic bez copyrightu ;-)).  Dokumentace ale zadna
neni, takze je potreba zkouset a zkouset...  Nastesti na MIPSu nemusis
resit zadnou magii ohledne DMAckovatelne pameti (tahle deska ani nema
pamet mimo KSEG0/KSEG1), takze staci naalokovat, predat karte vyplnene
deskriptory, spustit ji a pockat na data.  Sitovky jsou na intr 4 a 5.

Na zaver doporucuji napsat si vlastni funkci, ktera pri panicu vydoluje
ze stacku function call stack, i kdyz jen numericky.  Nic jineho nemam,
protoze JTAG pouzivat neumim :-(
(tohle mi doporucil Pavel Herrmann: google "mips backtrace elc2008", ale
je zajimave cviceni se chvili nekoukat a zkusit to vymyslet ;-))


Nevim, jak moc eticke/legalni/vhodne je jen tak posilat nekomu nejake
zdrojaky, ale rad je uvolnim, az bude odevzdano (nebo driv, umozni-li to
nekdo s prislusnou autoritou).

Pokud nekdo z vas pracuje z Windows (jde to vubec?), muzete nahravat
system do routeru pomoci meho noveho TFTP+DHCP serveru (opensourcuju,
az bude nasazeny a poradne vyzkouseny)

http://storkhole.cz/software/tftpd_win/tftp_dhcp_server.exe

Staci nastavit "next IP addr" a "boot file", ktery musi byt v koreni
toho TFTP serveru (to je ten adresar, odkud ho pustite)

Uz me nic nenapada, tak stastne zkouskove plne hackovani semestralek!
--
Martin Pelikan





More information about the NSWI004 mailing list