ISU+Ov3

=**Connecting to target:**=
 * Ideen i denne del er at lære at connecte til target samt cross compile**

Der er forbindelse igennem VM ware
 * Del 1:**

Vi ønsker at oprette en secure forbindelse til Devkit 8000(target) dette gøres ved at benytte ssh. Oplysninger om dette er fundet på IHA side omkring devkit8000. code stud@GoldenImage:~$ ssh 10.9.8.2 -l root root@10.9.8.2's password: root@beagleboard:~# code Kan også gøres med følgende kommando code stud@GoldenImage:~$ ssh root@10.9.8.2 root@10.9.8.2's password: root@beagleboard:~#
 * Del 2: Connection**

code Ved hjælp af en af disse 2 kan vi oprette forbindelse til target og herefter har vi mulighed for at arbejde over på target.

Ved hjælp af secure copy kopiers en fil til target, vi ligger filen i mappen tmp. For at benytte seccure copy benyttes commandoen scp. For at få adgang til dette bruges sudo for at få tilladelse til at gøre dette. code stud@GoldenImage:~/Dropbox/3_semester/ISU/Ovelser/Exercise 3$ touch abc stud@GoldenImage:~/Dropbox/3_semester/ISU/Ovelser/Exercise 3$ scp abc root@10.9.8.2:/tmp root@10.9.8.2's password: abc                                                 100%    0     0.0KB/s   00:00 stud@GoldenImage:~/Dropbox/3_semester/ISU/Ovelser/Exercise 3$
 * Del 3: Moving files**

code vi kan se at filen er blevet overført da der bliver udskrevet abc 100%.

Connect (conn2tgt) code ssh root@10.9.8.2 code For cp2tgt skal der bruges mindst et argument. Efter dette undersøger vi om det er en mappe, hvis dette er opfyldt kopierer vi mappen, ellers ser vi om det er en ren fil og denne vil så blive kopieret.
 * Del 4: Create shell script for ssh og scp**
 * 1) !/bin/sh

code IP="10.9.8.2" DIR=":~/files" SCP="/usr/bin/scp" USER="root@" "Usage if [$# -ne 1]; then  echo "Usage: cp2tgt "   exit fi if[ -d $1]; then    echo "Copy mappe"    $SCP -r $1 ${USER}$IP}$DIR else    echo "Copy file"    $SCP $1 ${USER}${IP}$DIR fi code = = =**Building C++ programs for target**=
 * 1) !/bin/sh
 * 1) - se om argument

I denne del af opgaven ønsker vi at benytte hello_world filen fra tidligere og cross compile den til at køre på target, dette gøres ved brug af compileren code Arm-angstrom-linux-gnueabi-g++ -o hello_tgt hello.cpp code vi kan herefter teste om filen er compilet correct ved at benytte commandoen: file hello_tgt, kan vi se at filen er blevet compilet til target code stud@GoldenImage:~/Dropbox/3_semester/ISU/Ovelser/Exercise 3$ file hello_tgt hello_tgt: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped code ved at kopier filen til target som i del 1 kan vi køre filen på taget ved at benytte samme commandoer som på host. code root@beagleboard:/tmp# ./hello_tgt Hello world! root@beagleboard:/tmp# code
 * Del 1: Cross compiling the program Hello World and running it on target**

Compiling til target ved makefile Her bruges compileren "arm-angstrom-linux-gnueabi-g++" compileren til at compile til target, ellers er makefilen opbygge på samme måde som vi tidligere har gjort det. code stud@GoldenImage:~/Dropbox/3 semester/ISU/Ovelser/Exercise 3/del2$ make -f makefile.target arm-angstrom-linux-gnueabi-g++ -c hello.cpp arm-angstrom-linux-gnueabi-g++ -o hello_tgt hello.o stud@GoldenImage:~/Dropbox/3 semester/ISU/Ovelser/Exercise 3/del2$ code Hefter copiers filen til target og testes som tidligere code root@beagleboard:/tmp# ./hello_tgt Hello world! root@beagleboard:/tmp# code ved at benytte commandoen make -f makefile.target fortæller vi at vi ønsker at bruge makefilen som skal compile til target, dette betyder at vi har mulighed for at have flere makefiles, så vi kan have en makefile for host og target og så blot vælge hvad filen skal bruges til.
 * Del 2: Us****ing makefiles to build host and target programs**

Vi vil nu forsøge at cross compile flere filer med makefile, dette gøres ved at benytte samme makefile som i Øvelse 2, og så ændre compileren til at være compileren der compiler til target. code stud@GoldenImage:~/Dropbox/3 semester/ISU/Ovelser/Exercise 3/del3$ make -f makefile.target arm-angstrom-linux-gnueabi-g++ -c main.cpp arm-angstrom-linux-gnueabi-g++ -c part1.cpp arm-angstrom-linux-gnueabi-g++ -c part2.cpp arm-angstrom-linux-gnueabi-g++ -o target_parts1+2 main.o part1.o part2.o stud@GoldenImage:~/Dropbox/3 semester/ISU/Ovelser/Exercise 3/del3$ ls main.cpp  makefile         makefile.target~  part1.h    part2.cpp~  part2.o main.cpp~  makefile~        part1.cpp         part1.o    part2.h     target_parts1+2 main.o    makefile.target  part1.cpp~        part2.cpp  part2.h~ stud@GoldenImage:~/Dropbox/3 semester/ISU/Ovelser/Exercise 3/del3$ file target_parts1+2target_parts1+2: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped stud@GoldenImage:~/Dropbox/3 semester/ISU/Ovelser/Exercise 3/del3$ code Køre på target code root@beagleboard:/tmp# ./target_parts1+2 this is part1! this is part2! root@beagleboard:/tmp# code
 * Del 3: Cross compiling with more extended makefiles**

Vi ser i del 3 at vi kan bruge makefile til at compile til target, vi ser at vi kan have to makefiles hvor den ene fungere til host og den anden til target. Problemet er blot at når vi bruger den ene makefile for f.eks. host og så bagefter køre makefilen for target så sletter vi filerne som i forvejen var lavet, dette er vi ikke interesseret i, så derfor vil vi gerne lave to makefiles(en for host, en for target) disse skal lægge deres filer i to forskellige mapper sådan at vi har en mappe for host og en for target. For at få dette til at virke må vi ændre lidt i makefilerne. eks. for target: code først: OBJECTS = ${SOURCES:.cpp=.o} Efter ændring: OBJECTS = target/${SOURCES:.cpp=.o} code Dette var første ændring, anden ændring: code Før: EXECUTABLE=hello_tgt Efter: EXECUTABLE=target/hello_tgt code Sidste ændring der skal foretages: code Før: hello.o: hello.cpp ${CC} -c hello.cpp -o hello.o
 * Del4: Improving cross compilation handling in makefiles**

Efter: target/hello.o: hello.cpp ${CC} -c hello.cpp -o target/hello.o code Vi ser altså at der i filen skal foretages 3 ændringer, disse ændre er de samme for makefile til host. Ved hjælp af dette får vi fortalt at vi ønsker at objektet(arbjedsområde) placers i mappen tagret. Ligeledes placeres alle o filer i denne mappe. Når compilingen er kørt til ende vil execute filen være at finde i denne mappe. Om makefilen skulle have været lavet til host skulle vi have haft en mappe der hed host f.eks. og så have ændret mappen fra target til host. Når vi gør det på denne måde kan vi compile ud i forskellige mappe og på denne måde løser vi problemet med at filerne bliver slettet når vi compiler til de forskellige, ligeledes så kan vi køre en make clean uden at slette filerne for target og omvendt.

For egen forståelse er den fulde makefile for taget vidst nedenfor: Mapperne target og host, dannes forinden ved commandoen mkdir:

code SOURCES = hello.cpp OBJECTS = target/${SOURCES:.cpp=.o} EXECUTABLE=target/hello_tgt CC=arm-angstrom-linux-gnueabi-g++ CFLAGS= -Wall -g
 * 1) Hello world makefile for target
 * 2) Sources
 * 1) Compile

build: ${OBJECTS} ${CC} -o ${EXECUTABLE} ${OBJECTS}
 * 1) Tagets

target/hello.o: hello.cpp ${CC} -c hello.cpp -o target/hello.o

clean: @echo "Removing files..." rm -f ${EXECUTABLE} ${OBJECTS}

help: @echo "Avaiable targets..." @echo "- help (watching now)" @echo "- build (to build the binary)" @echo "- clean (to cleanup everything)" @echo "Print, what in folder" @ls code

For host er koden næsten den samme som for target, man benytter blot en anden compiler og der refereres til en anden mappe til placering af o + exe filer.

For at få Eclipse til at compile for target (devkit8000) ændres compileren i settings for projektet code under proporties > settings må vi altså i commando linien indskrive den compiler vi vil benytte da vi skal compile til target, for c++ skal vi altså bruge arm-angstrom.linux-gnuebi-g++ code Ligeledes vælger vi Cross GCC for at lave en cross compiler.
 * Del 5**

Vi har lært at connect og kopierer filer til target(devKit8K). Dette gør det muligt at arbejde på target. Vi har også lært at cross compile til target så man kan køre sine programmer på target. Dette er hele esensen i kurset; at benytte én embedded device. Vi har også lært at bruge eclipse til at compile vores projekts for os ved at tilføje commands til eclipse så den bruger den rigtige compiler. Dette er vigtigt da det gør det nemmere for os at compile. Mange hjælpemidler kan findes under Devkit8000 på wikispaces.
 * Hvad har vi fået ud af denne øvelse:**