6.6.1. Linux futtatása TMDSEVM6472 eszközön
TI TMDSEVM6472 rövid bemutatása A TMDSEVM6472 az alábbi fő hardver paraméterekkel rendelkezik: •
1db fix pontos, több magos (6 C64x+ mag) C6472 DSP 700MHz
•
256MB DDR2 RAM
•
128MB NAND flash memoria
•
1Mb I2C EEPROM a helyi boot-hoz (távoli boot elképzelhető)
•
2db 10/100/1000 Mbps Ethernet port
•
UART ( RS232 szintű) 3 tűs csatlakozón USB mini-B-n keresztüli UART lehetőség
•
MSP 430 (MMC)
•
FPGA
•
AMC Type B+ szabványos csatlakozó
•
JTAG csatlakozási lehetőségek, felhasználói kapcsolók és LED-ek
1. Szükséges eszközök, szükséges környezet Ahhoz, hogy Linux-ot tudjunk futtatni TMDSEVM6472 eszközön, az alábbiak szükségesek: •
TMDSEVM6472 board
•
Számítógép telepített Debian GNU/Linux 6.0-val
•
internet kapcsolat router-en keresztül
•
patch kábelek
•
soros kábel a boardhoz való csatlakozáshoz (opcionálisan USB/Serial adapter)
•
Debian GNU/Linux telepítési, adminisztrátori tapasztalatok
•
Linux kernelfordítási tapasztalatok
•
Számítógép telepített Windows XP-vel (vagy virtuális gépen)
•
Code Composer Studio
2. Alkalmazás futtatása az eszközön A TMDSEVM6472 board-hoz mellékelt DVD-n található 4.2-es verziójú Code Composer Studio. Ennek a futtatásához valamilyen Windows operációs rendszerre van szükségünk. A Code Composer Studio egy Eclipse-re épülő fejlesztő és debug eszköz, amely segítségével alkalmazásokat lehet fejleszteni, az eszköz DDR2 memóriáját közvetlenül el tudjuk érni, ide programokat tudunk betölteni, a betöltött programokat tudjuk futtatni. A TMS320C6472 DSP, amely az EVM-en található a TI C6000-es DSP családba tartozik. Ezen család speciális utasításkészlettel rendelkezik, de nem annyira általánosan elterjedt, mint például az arm vagy a mips architektúra. Mivel Linux operációs rendszert szeretnénk futtatni az eszközön, ez megnehezíti a dolgunkat. A Linux a C6000-es családhoz tartozó architektúrát C6x-el rövidíti. Ezen architektúra az ún. ELF
DSBT (Data Segment Base Table) binárisokat támogatja. Ez az ELF általános formátumnak egy olyan fajtája, amelyet tipikusan MMU-val (Memory Management Unit) nem rendelkező mikrovezérlőkhöz találtak ki. A továbbiakban ezt a szoftvert arra fogom használni, hogy a segítségével kapcsolatba lépjek a TMDSEVM6472, és azon képes legyek Linux operációs rendszert futtatni. Csatlakoztassuk a TMDSEVM6472 adapterét erre az eszköz automatikusan elindul. A mikro USB-s csatlakozón keresztül pedig csatlakoztassuk a Windows-t futtató számítógépünkhöz, ahová a Code Composer Studio-t telepítettük. Windows XP esetén automatikusan érzékeli új USB-s eszközként, és telepíti a hozzá tartozó drivert. TI XDS100 Channel A, és B USB-s eszközök jelennek meg. Ezen keresztül fog kommunikálni a szoftver az EVM-el. A továbbiakban azt mutatom be, hogy milyen beállítások szükségesek ahhoz, hogy képesek legyünk alkalmazást futtatni az eszközön. A Code Composer Studio indítását követően definiálnunk kell a céleszköz (target) paramétereit. A Target főmenüpont, New Target Configuration ... menüre kattintva tehetjük meg ezt.
Itt meg kell adnunk a konfiguráció nevét. Én ezt praktikusan az eszköztípusból képeztem.
Ezt követően a kapcsolat, és az eszköztípus kiválasztását kell elvégezni. Az elsőnél a Texas Instruments XDS1000v1 USB Emulator-t kell választani, az eszköz esetében pedig a TMS320C6472 (Full Peripheral Register Set).
A mentést követően ki kell választani a definiált célt, és elindítani az adott konfigurációt (Launch Selected Configuration).
Ilyenkor a Debug ablakban megjelennek az eszköz paraméterei. Majd csatlakoztatni kell a cél eszközt a Connect Target segítségével.
Végezetül a Target/Load Program menüpont segítségével kiválasztani azt a programot, amit szeretnénk az eszköz memóriájába tölteni.
A betöltést követően pedig a Target/Run menüpontra kattintva indíthatjuk el az alkalmazás futását.
3. Kernelfordítás cross-compile környezetben, Debian GNU/Linux 6.0 i386 alatt Adott egy feltelepített Debian GNU/Linux 6.0 működő internet kapcsolattal. Itt szeretnénk crosscompile környezetet beállítani, aminek a segítségével tudunk C6X architektúrájú kernelt fordítani. Ahhoz, hogy C6X architektúrára alkalmazásokat tudjunk fordítani, szükséges C fordító és architektúra specifikus segédprogramok, amelyek közé a dinamikus linkert is sorolhatjuk. Linux operációs rendszerben a legelterjedtebb C fordító a gcc. A 4.7-es verziótól felfelé ez szerencsére már támogatja a C6X architektúrát. Netes keresés közben rátaláltam a pkgs.org weboldalra. [2] Ez tematikus csomaggyűjteményt tartalmaz különböző Linux disztribúciókhoz. Szerencsémre Fedora 17-hez már valaki készített olyan csomagokat, ami segített nekem a cross-compile környezet elkészítésében. Az innét az alábbi csomagokat töltöttem le: • • •
binutils-c6x-linux-gnu-2.22.52.0.3-1.fc17.i686.rpm cross-gcc-common-4.7.1-0.1.20120606.fc17.noarch.rpm gcc-c6x-linux-gnu-4.7.1-0.1.20120606.fc17.i686.rpm
Ezen csomagokat később felhasználásra elérhetővé tettem.[6] Azért, hogy ezeket a csomagokat tudjam használni, át kellett konvertálni őket .deb formára. Az alien csomag átalakító telepítése: apt-get update apt-get install alien Ezt követően a szükséges csomagok és függőségeik telepítve lesznek. A .deb csomagok elkészítése: alien -d binutils-c6x-linux-gnu-2.22.52.0.3-1.fc17.i686.rpm alien -d cross-gcc-common-4.7.1-0.1.20120606.fc17.noarch.rpm
alien -d gcc-c6x-linux-gnu-4.7.1-0.1.20120606.fc17.i686.rpm A .deb csomagok telepítése: dpkg -i cross-gcc-common_4.7.1-1.1_all.deb dpkg -i binutils-c6x-linux-gnu_2.22.52.0.3-2_i386.deb dpkg -i gcc-c6x-linux-gnu_4.7.1-1.1_i386.deb Ezen csomagok működésének vannak függőségéi, illetve a disztribúció különbségek miatt lévő verzió különbséget is fel kell oldani. apt-get install libmpc2 libgmp3c2 dpkg -i binutils-c6x-linux-gnu_2.22.52.0.3-2_i386.deb cd /usr/lib ln -s libgmp.so.3.5.2 libgmp.so.10 Ezt követően szükség van kernel forrás beszerzésére. A „vanilla” kernel 3.3-as verziótól felfelé ismeri a c6x architektúrát. Viszont ebben a kernelben nincsenek benne azok a driverek, amelyek a A TMDSEVM6472 board-hoz kellenek. A http://linux-c6x.org-ról lehet letölteni olyan kernel forrást, amely tartalmazza a szükséges drivereket is. [4] Az általam használt verzió elérhető itt. [4] A linux-c6x.org-on a szükséges drivereket is tartalmazó kernel elérhető git tárolóból. Ennek elérése az alábbiak szerint történhet: apt-get install git git clone http://linux-c6x.org/git/linux-c6x.git A parancs hatására letöltődik a kernel „fejlesztői” verziója, ami szintén egy jó kiindulási pont lehet. Ezt követően adott a forráskód következhet a konfigurálás. A 'make menuconfig' futtatásához a make és libncurses-dev csomagokra. A cross-compile környezetben való kernel konfigurálás, és fordítás annyiban különbözik egy „normál”-tól, hogy környezeti változók segítségével be kell állítanunk a cél architektúrát, és az alkalmazott C fordítót. Kernel konfigurálás: ARCH=c6x CROSS_COMPILE=c6x-linux-gnu- make menuconfig Korábbi fordítás során létrejött fájlok törlése: ARCH=c6x CROSS_COMPILE=c6x-linux-gnu- make clean Kernel image készítése (ELF formátumúra, 4 szálon párhuzamos fordítással): ARCH=c6x CROSS_COMPILE=c6x-linux-gnu- make -j4 Kernel modulok készítése (4 szálon párhuzamosan): ARCH=c6x CROSS_COMPILE=c6x-linux-gnu- make -j4 modules Kernel modulok telepítése: ARCH=c6x CROSS_COMPILE=c6x-linux-gnu- make modules_install Az elkészült kernel image a kernel forrást tartalmazó könyvtáron belül vmlinux néven található. A kernel modulok a /lib/modules/$KERNELVERSION alá kerülnek (ahol a $KERNELVERSION
a használt kernel verziója). 4. A Linux kernel konfigurációs beállításai Ahhoz, hogy működőképes, és minél egyszerűbb, kis méretű kernelt kapjunk különös figyelmet kell fordítani a konfigurációs beállításokra. A továbbiakban az általam használt beállításokat fogom ismertetni. Az beállításokat a „make menuconfig” parancs kimenetében, előfordulásuk sorrendjében ismertetem. Az összes használt lehetőség ismertetése túl hosszú és körülményes lenne, ezért csak az általam fontosnak tartott beállításokat fogom ismertetni az alábbi táblázatban Konfigurációs beállítás
Jelentése röviden
[*] System V IPC
SVR-ből örökölt IPC módszerek
[*] POSIX Message Queues
POSIX üzenet sorok
[*] BSD Process Accounting
folyamatok megfigyelése
[*] Optimize for size
méret optimalizáció
-*- Configure standard kernel features (expert users)
általános kernel jellemzők
[*] Enable loadable module support --->
kernel modulok
[*] Enable the block layer ---> és [*] Block layer SG support v4
blokkos eszközök
(console=CI0 ip=dhcp root=/dev/nfs nfsroot=192.168.1.120:/mnt/rootfs)
kernel parancssori paraméterek
Processor type and features
processzor típusok
-*- TMS320C64X+
DSP család támogatása
[*] CIO Console
fejlesztő eszközbeli console
-*- PLL driver
PLL támogatása
-*- Timer driver
időzítő támogatása
-*- C64x+ Megamodule Interrupt Controller
megszakításvezérlő támogatása
-*- TMS320C6472
a konkrét DSP típus támogatása
Board ---> (X) EVM6472
EVM támogatása
[*] Ethernet (GEMAC/MDIO interface)
Ethernet kártya driver
[*] First Ethernet interface
első ethernet interfész
[*] Second Ethernet interface
második ethernet interfész
-*- Ethernet SGMII support for C64x
SGMII interfész támogatása
[*] EDMA3 support
memóriavezérlő támogatása
[*] RapidIO support
RapidIO támogatása
[*] Inter Processor Communication low-level driver
processzorok közti kommunikáció támogatása
[*] Kernel support for DSBT ELF binaries
DSBT ELF formátumú binárisok támogatása
[*] Networking support --->
hálózati támogatás
[*] IP: kernel level autoconfiguration
kernelbe épített IP konfiguráció lehetősége
[*]
kernelbe épített DHCP (NFS roothoz szükséges)
IP: DHCP support
<*> Serial I/O support
soros port támogatása
<*> NXP SC16IS7XX I2C UART bridge support
UART támogatása
Konfigurációs beállítás
Jelentése röviden
[*] Console on sc16is7xx serial port
soros konzol támogatása
<*> Ext3 journalling file system support
EXT3 fájlrendszer
<*> NFS client support
NFS kliens támogatása
[*] Root file system on NFS
NFS root támogatás