Syftet med denna labbuppgift är att kunna kompilera och köra kod på servern för att bekanta sig med verktygen.
Uppgiften är att kompilera och köra en enkel, färdig, testkod.
Labbnätet består av 10 arbetsplatser (PAX-1 till PAX-10 i ovanstående figur) samt en Linux-server (Linus).
På servern finns dina källkodsfiler och där sker all kompilering.
Alla Windows-konton finns på en Windows-server.
Dina filer på Linus är också synliga på ditt Windows-konto under filkatalogen U:.
Varje arbetsplats (se ovanstående figur) innehåller tre nätverksanslutna enheter, en Windows-workstation (PAX-?), en CD-server (här kommer din kod att exekvera) och en Print-server (används vid nedladdning av din kod till CD-servern och den delas mellan två arbetsplaser).
Det finns flera program inlagda på systemet.
Emacs finns både på Windows-datorerna och på Linus.
Vidare finns ssh (PuTTY) för Windows installerat.
Det finns även en nätverksavlyssnare lokalt på varje Windows-dator.
Slutligen finns de flesta Unix-verktyg på Linus.
Dela med dig till dina kurskamrater av den kunskapen du har om olika
program. Du tjänar inget på att hålla tyst!
Dina frågor skickar du till mig (=Mats). Jag kommer att skicka vidare frågor av allmän karaktär till övriga kursdeltagare!
1. Hämta källkoden
Logga in på Linus (använd ssh). Ställ dig i hemkatalogen. Kopiera källkoden till det här labbmomentet med kommadot:
cp -r ~inin/kurs kurs
Källkoden ligger nu i din hemmakatalog under kurs/src/lab0/.
Katalogen kurs/make, kallad makekatalogen är den katalog man arbetar i då man kompilerar. Man måste stå i den katalogen då man kompilerar. För kompilering används två verktyg:
2. Skapa makefile, genmake
Makefilen talar om för kompilatorn vilka filer som skall kompileras, varje gång filer läggs till eller tas bort ur servern måste en ny makefil skapas så att rätt källkod kompileras. Det gäller t.ex. i högsta grad när man byter till nästa laboration.
Vilken källkod som skall användas bestäms av två filer. Den första, modules, talar om vilken källkodskatalog som skall användas, till exempel lab0. I källkodskatalogen för lab0 finns den andra filen, files, som talar om vilka källkodsfiler som ingår i lab0.
Så här ser katalogstrukturen ut:
~/kurs/ make/ server/ modules src/ lab0/ files boot.s start.c compiler.h etrax.h lab1/ files ... lab2/ files ...
Ställ dig i makekatalogen och kör kommadot:
genmake lab0
Exempel. En makefile för lab0 har nu skapats och ligger i katalogen kurs/make/lab0/, eftersom modules-filen pekar ut lab0 så är det lab0 som kommer att kompileras i nästa moment.
3: Kompilera, axmake
Ställ dig i makekatalogen och kör kommadot:
axmake lab0
Exempel. Den färdigkompilerade exekverbara koden finns nu i en binär prom image i filen kurs/image/lab0/prom.all
Utskrifter från CD-servern, SerialVIEW
För att läsa debugutskrifter från serverns serieport använder du PuTTY. Ställ in hastigheten på 38 400.
4. Ladda ner och kör, loadpax
För att köra koden måste flashpromarna på CD-servern brännas med innehållet i kurs/image/lab0/prom.all. Detta görs genom att en loader laddas ner i serverns RAM minne via parallellporten. Loadern i sin tur läser in promimagen från parallellporten och bränner flasharna.
Allt detta görs automagiskt med kommandot loadpax från makekatalogen. Servern sätter sig i flashladdningsläge om flashladdningskabeln sitter i när strömmen slås på.
Om du sitter på t.ex. PAX-2 blir kommadot alltså 'loadpax 2 lab0'. När flashladdningen är klar startar servern om av sig själv (det tar cirka 10 sekunder).
5. Klart
Om allt fungerar kommer CD lampan på CD-servern att blinka samt en debugutskrift att synas i SerialVIEW.
Att lära av denna labb...
Titta noga på den källkod som ingår i detta moment! Det är två filer källkod samt två headerfiler:
boot.s
Initierar processorn, lägger upp avbrottsvektorer, initierar databussar tidsbaser m.m. samt hoppar till start.c (identifiera var det sker). Alla avbrott börjar också i denna fil, i det här fallet är det bara timer-avbrott som används, och även där sker ett anrop till start.c
start.c
Här sker initiering av systemet, timer interruptet hanteras och ledarna styrs. Identifiera hur lysdioderna styrs från C-koden.
etrax.h
Den här filen innehåller definitioner av adresserna till Etrax-chipets olika register. Hårdvaran hanteras från högnivåspråken med hjälp av dessa definitioner.
Exempel:
För att göra acknowlege på avbrott för inkommande paket skall
bit 2 i registret R_REC_MODE sättas till 1.
Det görs så här i C/C++: *(volatile byte*)R_REC_MODE = 0x04;
I etrax.h kan man se att R_REC_MODE är en konstant med värdet 0xE0000098, och raden ovan skriver alltså värdet 0x04 på adressen 0xE0000098.
compiler.h
Filen compiler.h innehåller definitioner av de olika datatyperna så som word, uword, udword, bool, osv.