Beágyazott rendszerek - 1

ARM assembly

Minden gépre telepítve van a gcc arm-ra fordító változata. Fordítani az arm-elf-gcc paranccsal tudtok (pl. arm-elf-gcc -o hw hw.c), az elkészült futtathatót pedig az arm-elf-run paranccsal futtathatjátok (pl. arm-elf-run hw).

Példa: a mellékelt arm1f.s egy arm nyelven írt függvény, ami a kapott paraméterét kettővel megszorozva tér vissza. Az arm1main.c-vel összelinkelve (arm-elf-gcc -o h arm1main.c arm1f.s) kipróbálható. Ennek módosításával kapcsolódó feladatok:

  • Várjon két paramétert, a-t és b-t (r0-ban és r1-ben veszi át), és térjen vissza 2*a+3*b értékével. (add javasolt szorzás helyett)
  • Várjon továbbra is egy paramétert (r0-ban veszi át), és térjen vissza az addig lévő egész számok összegével. Tehát 4 esetében 1+2+3+4=10-zel.
  • Várjon továbbra is egy paramétert (r0-ban veszi át), és térjen vissza az annyadik fibonacci számmal.
  • Ugyanaz, mint az előző, csak rekurzív megoldással.

Olvasnivaló

http://simplemachines.it/doc/arm_inst.pdf

Kihívás

http://www.inf.u-szeged.hu/~havasi/beagyazott/

A board-on lévő Linuxra fordítás a Beágyazott Rendszerek Laboratóriumban

Három gépet fogunk használni:

- A saját gépet (Windows)
- Egy virtuális gépen (VmWare) futó Linuxot, ahol van a keresztfordítónk
- A GESBC-9315 boardon futó Linuxot

2-es gép használata

  • Indítsd el a VMware Playert. Ebben egy parancssoros Linux indul. Felhasználónév/jelszó: student/student.
  • Ebben a Linuxban kell a programot megírnod (pl. mcedit szövegszerkesztővel).
  • Fordítani az arm-linux-gcc parancsal tudod. Pl.: arm-linux-gcc -o hw hw.c

1-es és 2-es gép kapcsolata

  • Kattints a "Mount VM home" ikonra, felhasználónév/jelszó: student/student.
  • Ez után X: megajtó alatt eléred a virtuális gépen futó Linux home-ját.

3-as gép használata

  • Kattints a putty GESBC9315 inkora
  • Kapcsold be a board-ot, és ne avatkozz a boot folyamatba. A Linux automatikusan elindul.

1-es és 3-as gép kapcsolata

  • Kattints tftpd32 ikonra, ezzel elindul egy tftp szerver a Windowson.
  • Két dolgot ír ki:
    • Kiajánlott könyvtár, amit állíts arra, amire a 2-es gépen dolgoztál (és ami most az X: meghajtó alatt már látszik).
    • A gép IP száma, amire szükséged lesz.
  • Ez után a 3-as gépre az 1-esről át tudsz másolni fájlokat úgy, hogy a boardon a tftp parancsot használod: tftp -g -r filename ip. A filename az átmásolandó fájl neve, az IP a fent kiírt IP. Pl.: tftp -g -r hw 192.168.0.208

Program futtatása a boardon

  • Az átmásolt binárisra még adni kell futtatási jogot, pl: chmod +x hw
  • Ez után egyszerűen futtatható: ./hw

Linux kernel modul

Az általunk használd boardhoz 2.4-es kernel áll rendelkelkezésünkre.

Egy hello word modul:


  1. define __NO_VERSION__
  2. include <linux/module.h>
  3. include <linux/kernel.h>

int init_module(void)
{

printk("Hello world!\n");
return 0;
}

void cleanup_module(void)
{ printk("Goodbye world!\n");
}

MODULE_LICENSE("GPL");

A modul fordítása (hw.c a forrás):



arm-linux-gcc -c -DMODULE -O2 -D__KERNEL__ -isystem linux-2.4.21/include/ hw.c

A modul behúzása: insmod hw.o

A modul kihúzása: rmmod hw

A led fizikai memóriacíme: 0x80840020

Debuggerrel cím megszerzése:

* tronchip
* attach (ARM920T)
* arm/mmu table list

Irodalom

Linux Device Drivers 2nd Edition (2.4) http://www.xml.com/ldd/chapter/book/

Linux Device Drivers 3rd Edition (2.6)

The Linux Kernel Module Programming Guide: