alkalmazásfejlesztés és teljesítmény optimalizálás linux
TRANSCRIPT
Szegedi Tudományegyetem
Informatikai Tanszékcsoport
Alkalmazásfejlesztés és teljesítmény-
optimalizálás linux alapú routeren
Szakdolgozat
Készítette: Témavezető:
Tóth Szabolcs Szépe Tamás mérnök informatikus BSc
szakos hallgató
egyetemi tanársegéd
Szeged
2012
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
2
Feladatkiírás
A feladat leírása, a munka célja:
A kereskedelmi forgalomban kapható routerekhez előtelepített operációs rendszerek
gyakran korlátozzák a hardver képességeit, ezért érdemes más (nyílt forrású) operációs
rendszereket használni, melyek lehetővé teszik a router szélesebb körű
alkalmazhatóságát. Ilyen kibővített funkció például a távlabor, ahol USB porton
keresztül kapcsolódnak a mérést vagy beavatkozást végző egységek a routerhez, ami
biztosítja a kommunikációt, és kezeli a felhasználói kéréseket is. A szakdolgozat célja a
Tp Link 1043nd router hardveres képességeinek felmérése és továbbfejlesztése jól
használható távlabor központ megvalósításához.
A munkavégzés fontosabb lépései:
A routerrel kompatibilis operációs rendszerek (firmware) összehasonlítása.
Routerre USB porton csatlakoztatott külső adattároló eszközök csatolásának
lehetséges módjai, teljesítményük összehasonlítása és optimalizálása.
A routerre implementálható DLNA szerverek összehasonlítása.
A routeren futó webes alkalmazás készítése USB porton csatlakoztatott Edaq530
12-bites adatgyűjtő műszerrel történő kommunikálásra.
A fejlesztéshez rendelkezésre álló fontosabb erőforrások:
Tp link 1043nd router
Edaq530
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
3
Tartalmi összefoglaló
A téma megnevezése:
A téma a TP-Link WR1043ND típusú routerre telepíthető nyílt forráskódú operációs
rendszer képességeinek felmérése, és összeköttetés kiépítése az EDAQ530 nevű 12
bites adatgyűjtő interfésszel.
A megadott feladat megfogalmazása:
A routerre feltelepíthető Linux alapú operációs rendszer képességei korlátozottak a
hagyományos személyi számítógépre telepíthető Linuxokhoz képest. A feladat az router
funkcióinak megismerése és bővítése. A feladat része továbbá egy EDAQ530 nevezetű
kisméretű mérőeszköz rácsatlakoztatása, és program írása a kommunikációhoz.
A megoldási mód:
Az alapvető beállítások megismerése után megnézzük, hogy mire lehet felhasználni az
eszközön található USB portot. Ezek után megvizsgáljuk az EDA530 kommunikációját.
Alkalmazott eszközök, módszerek:
A feladat megoldása során felhasználtam az operációs rendszer által támogatott
programot, függvénykönyvtárat.
Elért eredmények:
A kifejlesztett szoftver segítségével lehetőségünk van távolról adatokat mérni (például
hőmérséklet) vagy kísérleteket végezni a router és az EDAQ530 segítségével.
Kulcsszavak:
OpenWrt, FTDI, távoli elérés, mérés
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
4
1 Tartalom TARTALMI ÖSSZEFOGLALÓ ...................................................................................................................... 3
2 BEVEZETÉS .................................................................................................................................... 5
2.1 OPENWRT ................................................................................................................................... 5
2.2 ROUTER ...................................................................................................................................... 6
3 EGYÉB OPERÁCIÓS RENDSZEREK ................................................................................................... 7
3.1 GARGOYLE .................................................................................................................................. 8
4 OPENWRT TELEPÍTÉS, ALAP KONFIGURÁCIÓ ................................................................................. 8
4.1 A TP-LINK TL-WR1043ND, OPENWRT FRISSÍTÉS ..................................................................... 9
4.1.1 Flash réteg ............................................................................................................................. 9
4.1.2 Használt fájlrendszerek: ...................................................................................................... 10
4.1.3 TP-Link WR1043ND Flash réteg felépítése: ........................................................................ 11
4.2 USB TÁMOGATÁS ..................................................................................................................... 12
4.2.1 Információk az USB eszközökről. ......................................................................................... 13
4.3 USB TÁRHELY .......................................................................................................................... 14
4.3.1 Fájlrendszer. ........................................................................................................................ 14
4.3.2 Konfigurálás lépései. ........................................................................................................... 16
4.3.3 Fstab .................................................................................................................................... 17
4.3.4 Külső tárhely felcsatolása szkript segítségével. ................................................................... 17
4.4 FÁJLRENDSZEREK TESZTELÉSE.................................................................................................. 20
4.4.1 Fájlműveletet partíción belül. .............................................................................................. 21
4.4.2 Másolás távolról, Samba fájl- és nyomtató kiszolgáló segítségével. .................................... 23
4.5 CSOMAGKEZELŐ KONFIGURÁLÁS. ............................................................................................. 25
5 DLNA ........................................................................................................................................... 26
5.1 USHARE .................................................................................................................................... 26
5.2 SZÜKSÉGES ERŐFORRÁS. ........................................................................................................... 28
6 EDAQ530 ..................................................................................................................................... 28
7 FTDI PROGRAMKÖNYVTÁR (LIBFTDI) .......................................................................................... 31
7.1 FTDI OPENWRT-N .................................................................................................................... 31
8 KOMMUNIKÁCIÓS PROGRAM ..................................................................................................... 32
8.1 PROGRAM FUTTATÁSA TERMINÁLBÓL. ...................................................................................... 39
8.2 PROGRAM ELÉRÉSE BÖNGÉSZŐN KERESZTÜL. ........................................................................... 41
8.2.1 Webszerver konfigurálása és telepítése ............................................................................... 41
9 IRODALOMJEGYZÉK..................................................................................................................... 44
10 NYILATKOZAT .............................................................................................................................. 45
11 KÖSZÖNETNYILVÁNÍTÁS.............................................................................................................. 46
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
5
2 Bevezetés
Ezen dolgozatban az OpenWrt Linux alapú beágyazott operációs rendszer lehetőségeit
vizsgálom meg TP-Link TL-WR1043ND routeren. A kereskedelmi forgalomban
kapható útválasztó eszközökben az előtelepített operációs rendszerek gyakran csak az
alap, legszükségesebb funkciókat támogatják így gátolva az eszköz nagyfokú
testreszabhatóságát. Ezért sok esetben a hardver képességeit nem lehet kihasználni teljes
mértékben. Más beágyazott operációs rendszereket használva bővíthetjük a funkciókat.
A nagyobb testreszabhatósággal bíró operációs rendszerek általában Linux alapúak,
mint például az OpenWrt. Mára ez a disztribúció kinőtte magát, és sokan használják így
lehetőség nyílik összetettebb funkciók megvalósítására egyszerű és olcsó módon,
SOHO (Small Office Home Office) eszközökön. A Soho, otthoni vagy kisebb irodai
környezetet jelent. Az első router, amire speciális operációs rendszerek készültek a
Linksys WRT54G típus volt. Az OpenWrt projekt fejlesztése 2004 januárjában
kezdődött a fent említett eszközre.
2.1 OpenWrt
Az OpenWrt egy széleskörűen kiterjeszthető GNU/Linux disztribúció beágyazott
rendszerekre. Ingyenes és nyílt forráskódú, GPL licencű. Az eszközön található gyári
szoftveren a legtöbb esetben nincs külső csomag telepítésére lehetőség. A Linksys
WRT54G, OpenWrt rendszerrel nagy siker lett, így egyre több embert vonzott. Ahogy
nőtt a fejlesztők és felhasználók száma, egyre több eszközre megjelent. Később, ahogy
bővültek a verziók, nőtt a perifériák támogatottsága. A verziók növekedésével nőtt a
problémák száma is. Sok esetben hiányos volt a dokumentáció, és komoly
szakértelemre volt szükség a problémamentes üzemeltetéshez. Ekkoriban más projektek
is indultak, amik a SOHO eszközöket célozták meg, viszont a legtöbb az eredeti
szoftver funkcióit próbálta másolni. Ezzel szemben az OpenWrt-nél számos csomag
elérhető, és egyszerűen lehet új csomagot vagy modult készíteni. A szoftverfejlesztés
során a különböző kiadásokat népszerű koktélokról nevezték el. Az első a WhiteRussian
nevet kapta. 2007 júniusában kijött a második kiadás, a Kamikaze, ezen a néven is több
verzió jelent meg. A jelenleg is használt kiadás a Backfire nevet viseli. Az első stabil
Backfire verzió (10.03) 2010 áprilisán jelent meg. A kezdeti verziókkal nagyon sok
problémát tapasztaltam, eleinte a dokumentáció nagyon hiányos, sok esetben hibás volt.
Számos drivert nem támogatott, és sok programcsomagot újra kellett fordítani a
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
6
megfelelő működéshez. Sok tesztelés és várakozás után 2011 decemberében megjelent
az OpenWrt Backfire 10.03.1-es verziója. 2009-2011 körül terjedtek el a MIMO-s ,
IEEE 802.11n-es szabványú vezeték nélküli routerek. Az IEEE 802.11n–es szabvány
nagyobb adatátviteli sebességet biztosított elődjeinél, akár 300-600 Mbit/s sebességet is.
Az interneten található angol vagy akár magyar leírások az OpenWrt ezen korai
verziójára épül, ezért sok hiba található benne. A fejlesztők és a felhasználók a
szoftvert, amit feltelepítettek a routerre az OpenWrt leírása alapján saját maguk
fordították, és még az eredeti bináris fájlok is hibásak voltak, nem mindig működött
rajta a vezeték nélküli hálózat, vagy csak a korábbi szabványok voltak elérhetők. Az
újabb verziókon a hibákat folyamatosan javítják, és a Backfire 10.03.1 final verziójában
minden alap funkció tökéletesen működik.
2.2 Router
Ma már rengeteg háztartás, ahol van internet elérhetőség, rendelkezik egy
forgalomirányító számítógéppel, más néven routerrel. Ennek az eszköznek a fő feladata
a bejövő adatok kezelése. A bejövő vonalon érkező csomagokat a megfelelő címre
továbbítja. [1] Ahogy a technika fejlődött, nagyobb teljesítményű eszközök gyártására
nyílt lehetőség, egyszerű felhasználók számára is elérhető áron. Ha céltudatosan
szeretnék olyan routert vásárolni, amit támogat az OpenWrt, akkor a hivatalos oldalán
találunk egy listát a támogatott eszközökről. [2]
Miért érdemes olyan eszközt vásárolni, amit támogat az OpenWrt?
Részletesen testre szabható, rugalmas, folyamatosan frissülő operációs rendszer.
Pontosan nyomon követhető folyamatok.
Az alapvető funkciókon túl, további különleges funkciók elérhetők, például
különféle USB eszközök kezelése.
Egyszerű fejlesztés.
Érdemes megvizsgálni a felhasználó igényeit is ahhoz, hogy kiválasszuk a számunkra
megfelelő adottságú routert.
Mire lehet szüksége egy felhasználónak.
Nagysebességű és nagy hatótávolságú vezeték nélküli hálózat támogatása. IEEE
802.11n és korábbi szabványok.
Háromantennás MIMO (több kimenetes és több bemenetes) rendszer
Gigabites LAN portok.
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
7
USB 2.0 port.
Alacsony ár.
Az általam bemutatott router az alábbi adottságokkal bír. Rendelkezésünkre áll 4 darab
10/100/1000Mbps LAN port és egy darab 10/100/1000Mpbs WAN Port, továbbá 1
darab USB 2.0-s port is. Az előlapon elérhető egy gomb (QSS), aminek a funkciója
gyorsan és hatékonyan beállítani a vezeték nélküli kapcsolatot biztonságos kódolással.
A QSS (Quick Setup Security) gomb OpenWrt rendszeren programozható.
IEEE 802.11n, IEEE 802.11g, IEEE 802.11b vezeték nélküli szabványokat támogat, 3
darab 3dBi-s antennával. Képes akár 300Mbps sávszélességre is. 400 Mhz-es Atheros
AR9132 típusú processzorral, 32MB RAM-mal és 8MB flash tárhellyel rendelkezik. A
router alacsony áron, (15000 Ft-ért) megvásárolható.
3 Egyéb operációs rendszerek
Az OpenWrt mellett számos beágyazott operációs rendszer elérhető.
Név Tp-link 1043ND,
támogatás Frissítés
OpenWrt igen évente 1
Gargoyle igen 3 havonta
X-Wrt nem nem fejlesztik
DD-WRT igen utolsó frissítés 2010.08.09
Tomato nem nem fejlesztik
FreeWrt nem nem fejlesztik
1. táblázat. Routerekre készülő operációs rendszerek
Az 1. táblázatban felsoroltam az ismertebb rendszereket. Sok szoftver ismert ami
OpenWrt alapú viszont már nem fejlesztik. Ezek közül az ismertebbek a FreeWrt,
Tomato és az X-Wrt. Ezek eredetileg a Linksys WRT54GL típusú routerre készültek, az
újabb eszközöket nem támogatják, a fejlesztésük véget ért. A DD-Wrt rendszer
támogatja az általunk kiválasztott routert, viszont fejlesztése akadozik. A Gargoyle
rendszer erősen fejlődik. Folyamatosan fejlesztik, és gyakrabban adnak ki frissítéseket,
mint az OpenWrt csapata. [3]
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
8
3.1 Gargoyle
OpenWrt alapú rendszer, nagyon szorosan követi az OpenWrt koncepcióját. A Gargoyle
GPL licencű, viszont a weboldalukon vásárolható olyan router, amin már ez az
operációs rendszer található. Fő szempont a stabilitás és az áttekinthetőség. Az
áttekinthetőséget az Ajax felületű web interfészen keresztül biztosítják. Amikor az
OpenWrt-ből még nem volt stabil verzió, sok probléma volt, a Gargoyle már akkor
biztosított egy nagyon stabil rendszert. Minden alapvető funkció tökéletesen működött
mindig. A felmerülő problémákat gyorsan javítják, viszont a frissítésekre figyelni kell,
mert új verzióknál előfordul néha eddig nem ismert hiba, ami „brickelheti” a routert.
Ezért telepítés előtt érdemes elolvasni a verzióhoz tartozó információkat. A Gargoyle
tartalmaz olyan alapvető funkciókat, amiket az OpenWrt alapértelmezésben nem.
Például:
Jó megjelenésű monitoring rendszer, valós időben lehet nyomon követni a
hálózat sebességét.
Web-Usage, lementi a kliensek által látogatott oldalakat és a keresés során
használt kulcsszavakat.
Nagyon magas szinten konfigurálható QoS
USB storage opció, web interfészen keresztül konfigurálható tárhely
Automatikusan felismeri a rácsatlakoztatott eszközt, és felcsatolja.
USB printer, nyomtatószerver kezelése, 1.5.1 verziótól
TOR anonymizer, 32 MB RAM-nál nagyobb memóriával rendelkező routerek
esetén.
Az OpenWrt csomagjait használja. Minden script, ami azon működik, a Gargoyle
rendszeren is fut. Javaslom a használatát. Egyszerűbben kezelhető, stabilabb, mint az
OpenWrt és gyakoribbak a frissítések. A továbbiakban az alap OpenWrt rendszerrel
foglalkozunk, viszont a részletezett programok és scriptek működnek Gargoyle
rendszeren is. [4]
4 OpenWrt telepítés, alap konfiguráció
A következőkben a router frissítés utáni beállításairól, konfigurálásáról lesz szó. Leírom
az általam tapasztalt hibákat és javasolt beállításokat. Említeni fogok számos olyan
hibaforrást, amikkel a fejlesztés és tesztelés során találkoztam, viszont nem találtam a
dokumentációban vagy fórumban. A gyári szoftver frissítését OpenWrt-re és az alapvető
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
9
beállításokat, mint például az internet beállítása, nem részletezem. Számos alapbeállítást
könnyedén el tudunk végezni böngészőn keresztül, és az OpenWrt hivatalos oldalán
bővebben olvashatunk a beállításokról. Ha a http://192.168.1.1 címet beírjuk egy
böngészőbe, akkor megjelenik egy login ablak, majd bejelentkezés után más
routerekhez hasonló módon tudjuk konfigurálni az eszközt. Az alap OpenWrt alatt ez a
felület a LuCI. Ezen interfész segítségével könnyedén lehet beállítani a helyi hálózatot
(LAN), megadhatjuk a WAN beállításokat, vezeték nélküli hálózat konfigurációját stb.
További LuCI modulok telepítésével lehetőségünk nyílik egyéb beállításokra
grafikusan, például USB eszközök és fájlmegosztások beállítása, QoS (Quality of
service). Viszont ezek használatát érdemes kerülni, mert nem frissítik rendszeresen. A
modulokban előfordulhat hiba, ezért érdemes a bonyolultabb beállításokat terminálon
keresztül elvégezni. Így biztosak lehetünk a helyes működésben. Számos eszköz közül
választhatunk, amelyeket az OpenWrt támogat. Ha megbizonyosodtunk az eszköz
pontos paramétereiről, akkor a hivatalos oldalon a letöltéseknél a Backfire mappából
kiválasztjuk a nekünk megfelelő konfigurációt. [2]
4.1 A TP-Link TL-WR1043ND, OpenWrt frissítés
Ha saját képfájlt készítünk, akkor AR71xx/AR240/AR931x platformot állítjuk be
fordításkor. Az előre lefordított stabil képfájlok erre a típusú processzorra az ar71xx
mappában találhatóak. Ebben a mappában már a lefordított bináris fájl található, aminek
a neve pontosan tartalmaz minden szükséges információt, ami a firmware
kiválasztásához szükséges.
openwrt-ar71xx-tl-wr1043nd-v1-squashfs-factory.bin
openwrt-ar71xx-tl-wr1043nd-v1-squashfs-sysupgrade.bin
szoftvernév – processzortípus - router típus – router verziószáma-frissítés fajtája.
A „factory” végződésű bináris állományt csak a gyári szoftverre telepítsük, bármilyen
másik OpenWrt alapú szoftver frissítésekor a sysupgrade végződésű fájlt használjuk.
4.1.1 Flash réteg
A flashmemória egy nem felejtő (nonvolatile) adattároló technológia. Felépítés alapján
kettő típust különböztetünk meg. Az egyik a NOR, a másik a NAND típusú memória.
Az elnevezés az adatképzés módjából ered. A NOR típus egy fontos jellemzője a gyors
olvasási sebesség. Véletlenszerű memória hozzáféréssel rendelkezik. Ezen típusú
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
10
memóriákat gyakran használják beágyazott alkalmazásoknál a gyors olvasási sebesség
miatt és támogatott a XIP (Execute-in-place) funckió. Az XIP funkció lehetővé teszi a
programok direkt futtatását közvetlenül a flash memóriáról, így rendszermemóriát
spórolunk. [5] A rajta tárolt adat közvetlenül futtatható, ezzel szemben a NAND típusú
memórián nem futtatható közvetlenül a program. Általában nagyobb méretűek, mint a
NOR típusú memóriák. Az olvasásuk lassú, viszont az írásuk és a törlésük gyors.
Ha a flash memóriát az Operációs rendszer közvetlenül tudja címezni, akkor „raw
flash”-nek hívjuk. Ezzel szemben, ha az operációs rendszer nem tudja direkt címezni,
„FTL (Flash Translation Layer) flash-nek” nevezzük. A beágyazott rendszerek
általában „raw flash” típust használnak, míg a pendriveok általában FTL flash-t. [6]
A tárhelyet nem a hagyományos módon partícionáljuk (ahogy személyi
számítógépeknél szokás). MTD (Memory Technology Device) eszközként kezeljük, és
különleges fájlrendszereket használunk. MTD alrendszer egy absztrakciós réteg raw-
flash típusú eszközökhöz [7]
4.1.2 Használt fájlrendszerek:
Mini_fo: Virtuális kernel fájlrendszer, ami a csak olvasható fájlrendszereket
„írhatóvá teszi”. Beágyazott rendszerekben, live-CD-ben, sandbox környezetben
szokták használni. [8]
SquashFs: Csak olvasható fájlrendszer, ami lehetőséget ad az egész fájlrendszer
1. ábra Flash réteg felépítés
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
11
tömörítésére. Általában zlib, lzo, xz tömörítőket használ. Az OpenWrt Lempel–Ziv–
Markov veszteségmentes tömörítési algoritmust használ. Ennek a fájlrendszernek az
előnye, hogy kicsivel több hely elérhető, és implementálható a FailSafe mód (hiba
esetén visszaállítás). Hátránya, hogy csak olvasható [9]
JFFS2: Flash eszközökre kifejlesztett írható-olvasható tömörített naplózó
fájlrendszer.
4.1.3 TP-Link WR1043ND Flash réteg felépítése:
TP-Link WR-1043ND Flash elrendezés
0. réteg m25p80 Serial Peripheral Interface Bus0.0: m25p64 8192KiB
1. réteg mtd0 u-boot
128KiB mtd5 firmware 8000KiB
mtd4 art
64Kib
2. réteg mtd1 kernel
1280KiB mtd2 rootfs 6720KiB
csatolási
pont / (gyökérkönyvtár)
fájlrendszer mini_fo
3. réteg
mtd3
rootfs_data
5184KiB
Méret(KiB) 128KiB 1536KiB 5184KiB 64KiB
Név u-boot kernel rootfs_data art
csatolási
pont - - /rom /overlay -
fájlrendszer - - SquashFs JFFS2 -
2. táblázat TP-Link WR-1043ND Flash elrendezés
ART: Atheros Radio Test, tartalmazza a MAC (fizikai) címeket és a kalibrációs
adatokat a wifihez.
Csatolási pontok:
/ : Az egész root fájlrendszer, tartalmazza a /rom és /overlay
mappákat is.
/rom: Ez tartalmazza az alap fájlokat és csomagokat, mint például a
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
12
busybox, dropbear, iptables, viszont nem tartalmazza a kernelt.
/overlay Írható rész a fájlrendszeren. [6]
A frissítés után a router alapértelmezett IP címe a 192.168.1.1 lesz, és az ehhez tartozó
felhasználónév-jelszó páros a root/(üres mező). Az egyik lehetséges bejelentkezési mód,
ha a böngészőbe beírjuk az IP címet, és ott belépünk az alapértelmezett felhasználónév,
jelszó párossal. Bejelentkezés után ajánlott a saját jelszó megadása. Ezután ha SSH-val
csatlakozunk akkor az előbb beállított jelszót kell megadni.
Első lépésként érdemes feltelepíteni a Nano szövegszerkesztőt. Ezt a kisméretű
programot sokkal egyszerűbb használni, mint az alapértelmezett vi, szövegszerkesztőt.
opkg update && opkg install nano
Ezzel a paranccsal a csomaglista frissítése után a nano a lokális tárhelyre installálódik.
Második lépésként érdemes beállítani az USB támogatást és a külső meghajtókat. A
sikeres konfigurálás után lehetőség van programokat telepíteni a külső tárhelyre is.
4.2 USB támogatás
Az USB támogatással rendelkező routerekre az OpenWrt bináris fájlja már tartalmazza
a szükséges drivereket, így a rendszer már felismeri USB 1.0 vagy akár USB 2.0-s
eszközöket is. Ha a használt verzió nem rendelkezik a megfelelő támogatással, az opkg
csomagkezelő segítségével könnyen telepíthetjük.
Az USB támogatáshoz szükséges kernel modulok
kmod-usb-core Szükséges telepíteni, kernel támogatás USB eszközökre
kmod-usb-ohci Specifikus driver, OHCI usb eszközöket támogatja
kmod-usb-uhci Specifikus driver, UHCI usb eszközöket támogatja
kmod-usb2 USB 2.0 eszköz támogatás, (EHCI)
Az opkg info <csomagnév> parancs segítségével lekérdezhetjük az információkat a
csomagról. Információt kapunk a csomag méretéről, az architektúráról. Jelzi azt is, hogy
telepítetve van-e és az időpontját.
Tp-link 1043ND routeren Openwrt backfire 10.03.1-es firmware alatt
alapértelmezésként a kmod-usb2, kmod-usb-ohci, kmod-usb-core csomagok vannak
telepítve.
USB 1.1 modul telepítése. UHCI driverek esetén:opkg update
opkg install kmod-usb-uhci
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
13
insmod usbcore
insmod uhci
Ha a „No such device then your hardware is not an UHCI device.” üzenet jelenik meg,
akkor a hardverünk nem UHCI. Az opkg remove <csomagnév> paranccsal tudunk
eltávolítani egy csomagot. Távolítsuk el és telepítsük az OHCI drivercsomagot [10]
USB 2.0 modul telepítése
Az USB 1.1-es modul telepítése után az alábbi paranccsal [10]
opkg update Csomaglista frissítése
opkg install kmod-usb2 usb2-es kernelmodul telepítése
insmod usbcore az usbcore betöltése a kernelbe
insmod ehci-hcd az ehci-hcd modul betöltése a
kernelbe
4.2.1 Információk az USB eszközökről.
PC-re szánt linux alatt elérhető az lsusb nevezetű program, ami az USB eszközökről
nagyon sok információt nyújt. Ez a program az usbutils programcsomag telepítésével
érhető el.
opkg update && opkg install usbutils
Sikeres telepítés után az lsusb paranccsal tudjuk kilistázni a csatlakoztatott USB
eszközöket.
root@OpenWrt:/# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0
root hub
Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc.
USB-2.0 4-Port HUB
Bus 001 Device 003: ID 0951:1642 Kingston Technology
Bus 001 Device 004: ID 04b4:6830 Cypress Semiconductor
Corp. CY7C68300A EZ-USB AT2 USB 2.0 to ATA/ATAPI
Bus 001 Device 005: ID 046d:092b Logitech, Inc. Labtec
Webcam Plus
Ebben az esetben láthatjuk, hogy a Device 002 egy Genesys Logis típusú USB 2.0-s 4
portos HUB. A Tp-link 1043ND router 1 darab USB porttal rendelkezik. Ez problémát
okozhat abban az esetben, ha több USB eszközt szeretnénk csatlakoztatni. A megoldás
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
14
USB elosztó, más néven USB-HUB. A többi eszköz ezen keresztül csatlakozik. Létezik
aktív és passzív HUB. Az USB port 5V-os és 500 mA-es. A passzív HUB azt jelenti,
hogy nem kap külön tápfeszültséget, és az 500mA áramerősség megoszlik a 4 porton.
Ez akkor fontos, ha olyan eszközöket használunk, amelyeknél az USB egyben az
áramforrás is. [11]
A listában még látható egy külső winchester rack, egy Kingston típusú pendrive és egy
webkamera.
A dmesg parancs a kernel ring puffert listázza ki. Megmutatja, hogy mi történik a
rendszerben az eszköz rácsatlakoztatásakor.
dmesg kimenete:
usb 1-1: new high speed USB device using ar71xx-ehci and address 5
usb 1-1: configuration #1 chosen from 1 choice
hub 1-1:1.0: USB hub found
hub 1-1:1.0: 4 ports detected
Amint látjuk, a rácsatlakoztatás után egyből felismerte. A dmesg parancs 4 USB portot
jelez.
4.3 USB tárhely
Ha a routeren megtalálható az alap USB támogatás, akkor nagyon sokféleképpen
használhatjuk fel. Egy lehetőség, ha egy külső merevlemezt vagy pendrive-ot csatolunk
fel, ezzel bővítve az elérhető tárhelyet. Régebbi routereknél, amik nem rendelkeztek
USB porttal, különböző trükkös megoldásokkal próbálták megnövelni az írható tárhely
méretét, ezzel bővítve az eszköz lehetőségeit. Egy lehetőség a belső hálózaton, egy
számítógépen megosztott mappát felcsatolni (mount). Felcsatolás után úgy
hivatkozhatunk rá mintha, a router saját mappája lenne.. Ennek a módszernek a
hátránya, hogy lassú, és a számítógépnek folyamatosan mennie kell. Több helyről is
hozzáférhetnek, módosíthatják az adatokat. A másik lehetőség az SD kártyával történő
bővítés, viszont ehhez elengedhetetlen volt belenyúlni a hardverbe.
4.3.1 Fájlrendszer.
Fontos kérdés, hogy milyen fájlrendszert használunk. A támogatott fájlrendszerek
kilistázhatók az alábbi paranccsal.
opkg update
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
15
opkg list "kmod-fs*"
Kimenet a teljesség igénye nélkül.
kmod-fs-cifs - 2.6.32.27-1 - Kernel module for CIFS support
kmod-fs-exportfs - 2.6.32.27-1 - Kernel module for exportfs. Needed for some
other modules.
kmod-fs-ext2 - 2.6.32.27-1 - Kernel module for EXT2 filesystem support
kmod-fs-ext3 - 2.6.32.27-1 - Kernel module for EXT3 filesystem support
Már a lista is sok információt hordoz. Látható, hogy kernel modulról van szó.
Az ext2 egy népszerű linux alapú fájlrendszer. Gyors, nem naplózó fájlrendszer. Ideális
kisméretű pendrive-ok esetén. Kérjük le az információkat a csomagkezelő segítségével
root@OpenWrt:~# opkg info kmod-fs-ext2
Package: kmod-fs-ext2
Version: 2.6.32.27-1
Depends: kernel (= 2.6.32.27-1), kmod-fs-mbcache
Provides:
Status: install hold,user installed
Section: kernel
Architecture: ar71xx
Maintainer: OpenWrt Developers Team <[email protected]>
MD5Sum: 8fcba03200a90c80a056e9fa3cf605a4
Size: 31838
Filename: kmod-fs-ext2_2.6.32.27-1_ar71xx.ipk
Source: package/kernel
Description: Kernel module for EXT2 filesystem support
Installed-Time: 1331642478
Számos információ található a megjelenített listában. Csomagfüggőségek, méret,
architektúra. Sok esetben, más csomagoknál is nagyon hasznos információkat szolgáltat
az opkg info parancs.
A rendszer támogatja a Microsoft által kifejlesztett fájlrendszereket is, viszont ezek
használatát érdemes kerülni, helyette célszerű a Linux alapú fájlrendszerek használata.
Ha tárhelynek szeretnék használni, és megosztani az adatokat hálózaton, vagy
nagyméretű adatokat (videó, zene) szeretnénk tárolni, akkor érdemes ext3 vagy ext4
típusú fájlrendszert használni. Ezek a fájlrendszerek támogatják a naplózást, így
áramszünet esetén, vagy ha a rendszer összeomlik, és elkezdi vizsgálni, akkor gyorsan
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
16
végez a vizsgálattal, ezzel szemben az ext2 nem támogat naplózást, nagy méret esetén
sokáig eltarthat a vizsgálat, és a fájlméret limitált (4Gb).
Ahová rendszerfájlokat fogunk telepíteni, oda elég egy kisméretű, naplózás nélküli,
gyors partíció, például ext2. Ha az eszközt csak a routeren használjuk, és csak ritkán
csatlakoztatjuk PC-re, akkor érdemes ext3 vagy ext4 fájlrendszert használni. Gyakran
használt pendrive-ok esetén használhatunk ntfs vagy fat32 partíciót.
Szükséges csomagok:
kmod-usb-storage kernel modul usb tárhely támogatására
kmod-usb-storage-extras további driverek
block-mount szkript csomag fájlrendszerek felcsatlakoztatását,
tárhely ellenőrzését, swap partíciók, azaz virtuális merevlemezek kezelésének
lehetőségét támogatja.
kmod-fs-XXX a fájlrendszer kernel modulja, amit fel akarunk csatolni.
kmod-scsi-generics SCSI eszközök
ntfs-3g NTFS partíciók kezelőséhez szükséges program.
4.3.2 Konfigurálás lépései.
1. lsusb –vel listázzuk ki a már csatlakoztatott eszközöket.
2. opkg install fdisk Segítségével kilistázhatjuk a felismert partíciókat(fdisk –l)
3. Szükséges csomagok feltelepítése. Ha az eszköz rácsatlakoztatása után az lsusb
kimenetében látjuk a csatlakoztatott eszközt, de az fdisk –l hatására nem jelenik
meg, akkor telepítsük a kmod-usb-storage-extras csomagot. Előfordulhat, hogy a
csatlakoztatott eszköz illesztőprogramja nem szerepel az alapértelmezett
eszközök között
4. Használjuk a dmesg parancsot A dmesg parancs kislistáz minden
információt a csatlakoztatás után történik a kernelben, így minden hibát is.
Például néhány fájlrendszernek (pl.: VFAT), szüksége lehet nyelvi támogatásra,
ha a megfelelő csomag nincs feltelepítve, a dmesg jelzi, és az opkg
csomagkezelő segítségével meg tudjuk keresni, majd feltelepíteni.
dmesg kimenet:
FAT: codepage cp437 not found
FAT: IO charset iso8859-1 not found
Ezek után opkg update && opkg list „kmod-nls*” majd megkeressük a
megfelelő kódlapot, és feltelepítjük.
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
17
5. fstab konfigurálás vagy mountolás manuálisan szkript segítségével.
4.3.3 Fstab
Az fstab definiálja a statikus fájlrendszerek és a swap partíciók kezelését. A rendszer
indulásakor, bootoláskor hajtódik végre.
Telepítése opkg update && opkg install block-mount parancssal történik. Ahhoz hogy
rendszerinduláskor elinduljon, először aktiválni kell. Ezt könnyen meg tudjuk tenni a
/etc/init.d/fstab enable segítségével, vagy az /etc/init.d/fstab start –tal el tudjuk indítani.
A beállítást a /etc/fstab fájl módosításával tudjuk megtenni nano szövegszerkesztő
segítségével.
Egyszerű konfigurációs fájl példa:
config 'global' 'automount'
option 'from_fstab' '1'
option 'anon_mount' '1'
config 'global' 'autoswap'
option 'from_fstab' '1'
option 'anon_swap' '0'
config 'mount'
option 'target' '/home'
option 'device' '/dev/sda1'
option 'fstype' 'ext4'
option 'options' 'rw,sync'
option 'enabled' '0'
option 'enabled_fsck' '0'
A target opcióban megjelölt mappát minden esetben létre kell hozni. Ide fogja
becsatolni a /dev/sda1-es eszközt, ami ext4 típusú.
Hatékonyabb megoldás, ha egy szkript segítségével állítjuk be.
4.3.4 Külső tárhely felcsatolása szkript segítségével.
Hozzunk létre egy fájlt a /etc/init.d helyen
nano /etc/init.d/usb_mount
Másoljuk bele az alábbi kódot
1. #!/bin/sh /etc/rc.common
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
18
2. START=98
3. STOP=98
4. start()
5. busybox mount -t ext2 /dev/sdb1 /mnt/winya_sys -o
rw,noatime
6. busybox mount -t ext4 /dev/sdb3 /mnt/winya_share -o
rw,noatime
7. ntfs-3g -o rw,noatime /dev/sda4 /mnt/ winya_ntfs
8. echo 1 > /sys/class/leds/tl-
wr1043nd\:green\:qss/brightness
9. echo "merevlemez felcsatolva.”
10. busybox logger "Harddrive mounted."
11.
12. stop()
13. busybox sync
14. busybox umount /dev/sdb3
15. echo 0 > /sys/class/leds/tl-
wr1043nd\:green\:qss/brightness
16. busybox sync
17. busybox umount /dev/sdb1
18. echo "merevlemez leválasztva.”
19. busybox logger "Harddrive unmounted."
20.
A 2. sorban a START=98-cal definiált érték, (0-99 közötti érték) a rendszer indulásakor
a prioritási sorrendet jelenti. A 4. sorban indul a start függvény. Ha beírjuk a
/etc/init.d/usb_mount start parancsot, akkor ez a függvény hívódik meg. Sok helyen a
busybox kulcsszót is kiírtuk a használandó kulcsszó elé. Erre akkor van szükség, ha
távolról akarunk futtatni olyan programot vagy szkriptet, ami SSH-n keresztül
rácsatlakozik a routerre, és távolról akar parancsokat végrehajtani. Ha ez hiányzik,
akkor a távoli program ismeretlen parancs hibaüzenetet dob. A BusyBox kisebb Linux
alapú programok gyűjteménye beágyazott rendszerekre. Ha beírjuk a terminálba a
busybox parancsot, kilistázza a parancsokat, amiket tartalmaz.
Az 5. 6. sorban csatlakoztatjuk a fájlrendszereket a mount parancs segítségével.
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
19
Részletes leírást az OpenWrt operációs rendszeren a mount --help, paranccsal, vagy a
mount manuáljában találunk (man mount, PC-re szánt linux alatt).
Listázzuk ki a partíciós táblát!
root@OpenWrt:~# fdisk -l
Disk /dev/sdb: 164.6 GB, 164696555520 bytes
255 heads, 63 sectors/track, 20023 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x881445bb
Device Boot Start End Blocks Id System
/dev/sdb1 1 65 522081 83 Linux
/dev/sdb2 66 70 40162+ 82 Linux swap / Solaris
/dev/sdb3 71 20023 160272472+ 83 Linux
Ebből tisztán látjuk a csatlakoztatott eszköz méretét és még számos információt. Amire
szükségünk van, a Device Boot és a System oszlop. A system a fájlrendszer típusát jelzi
a Device Boot a helyét. A Device Bootban szereplő paramétert kell majd megadni a
mountnak paraméterként. A mount parancsban tehát a ’t’ paraméter után adjuk meg a
fájlrendszer típusát, utána a Device Node-ot, azaz az előbb említett fdiskből kiolvasott
partíció helyet. Ezt követően egy létező mappa, ahová becsatoljuk az eszközt. Végül ’o’
paraméter után az opciókat. Példuál ro/rw (read-only/read-write) csak írható vagy írható
olvasható. Az ntfs partíciókat az ntfs-3g programmal lehet felcsatolni. Paraméterezése
hasonló a mounthoz. A 8. és 15. sorban a QSS ledet kapcsoljuk be, ha 1-et küldünk el a
fájlnak, 0 esetén kikapcsol. A 10. és 19. sorban a logger parancssal a
rendszerüzenetként lehet jelölni, hogy mi történt. Nagyon hasznos funkció hibakeresés
során.
Mentés után a fájlt futtathatóvá kell tennünk a chmod +x /etc/init.d/usb_mount
paranccsal.
Ha mindent sikeresen végrehajtottunk, akkor /etc/init.d/usb_mount start paranccsal
csatoljuk fel a meghajtókat és a stoppal állítjuk le.. A felcsatolás után, a mount parancs
paraméter nélkül kiírja a felcsatolt eszközöket.
root@OpenWrt:~# mount
rootfs on / type rootfs (rw)
…
mini_fo:/overlay on / type mini_fo (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
20
/dev/sda2 on /mnt/usb_sys type ext2 (rw,sync,relatime,errors=continue)
/dev/sda1 on /mnt/usb_share type ext3 (rw,noatime,errors=continue,data=writeback)
/dev/sdb1 on /mnt/winya_sys type ext2 (rw,noatime,errors=continue)
/dev/sdb3 on /mnt/winya_share type ext4 (rw,noatime,barrier=1,data=ordered)
…
A végén látjuk az általunk felcsatolt meghajtókat. Látható, hogy melyik eszközt hova
csatoltolódott fel, és a hozzá tartozó beállítások. A dmesg parancs jelzi a felcsatolás
során lezajlott eseményeket és a hibákat. Felcsatolás boololáskor. Ha azt szeretnénk,
hogy rendszerinduláskor lefusson a szkript, akkor egy szimbolikus linket kell
készítenünk a /etc/rc.d mappába, és a fájl nevének az alábbi módon kell kinéznie.
S**fájlnév, ahol a ** 0-99-ig egy szám, ez a szám a szkript elején megadott
START=98-as szám. Induláskor a programok prioritási sorrendjét jelzi. A
rendszerfeladatok általában alacsony számok, míg az általunk definiált feladatoknak
adjunk nagy számot.
4.4 Fájlrendszerek tesztelése
A fájlrendszer kiválasztásában nagy segítséget nyújthat ez a fejezet. A következőkben
több szempontból vizsgáljuk a külső merevlemez tulajdonságait. Különféle másolások
során figyeltem a processzorhasználatot, és a másoláshoz szükséges időt. Minden típusú
mérést két féle „fájl típussal” végeztem el. A mindennapokban többször előfordul, hogy
egy nagyobb méretű vagy sok kis méretű fájlt kell mozgatnom, például egy filmet vagy
fotóalbumot. Kiválasztottam tehát egy fotóalbumot és egy azonos méretű filmet. A
fotóalbum 381 fájlból áll, és 733 MB a teljes album mérete. Elsőként azt vizsgáltam,
hogy a külső merevlemezen, egy partíción belül, mennyi idő alatt tudom átmásolni a
fájlokat. Írtam egy scriptet, ami a következő lépéseket hajtja végre.
1. String formátumban lekérem az aktuális dátumot a rendszertől.
2. Törlöm az összes állományt onnan, ahova szeretnék másolni.
3. String formátumban lekérem az aktuális időt ismét.
4. A 3. pontban lekért dátumból kivonom az 1. pontban lekért dátumot. Így
pontosan tudom, a fájlok törléséhez szükséges időt.
5. A kezdeti dátum lekérése egy változóba, normál formában.
6. Kezdeti dátum string formában.
7. Másolás
8. Másolás után közvetlenül a dátum lekérése string formátumban.
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
21
9. 8. pontban feltöltött változó és a 6. pontban feltöltött változó különbsége. Így
megkaptuk pontosan a másoláshoz szükséges időt
10. Kiíratás fájlba.
11. Tíz másodperc alvás.
12. Ismétlés 10-szer.
A script futásával párhuzamosan a cpusage parancs kimenetét folyamatosan lementem.
A cpusage a processzorhasználatot kéri le, alapértelmezésként másodpercenként, pontos
dátummal. A mérés bejezése után a dátumokból pontosan tudom, hogy egy méréshez
melyik processzorhasználat tartozik. Az összes tesztet ugyanazon a merevlemezen
végeztem, ami egy Maxtor IDE csatlakozású HDD és USB 2.0-val rendelkező külső
mobil rack segítségével csatlakozik a routerhez.
4.4.1 Fájlműveletet partíción belül.
Ext2 fájlrendszeren, lemezen belül, egy nagyméretű fájl másolása. A CPU használat
mérésekor, ha egy másolás 80 másodpercig tart, akkor 80-szor nézi meg a processzor
kihasználtságot, másodpercenként egyszer. Ezért kiszámoltam a processzorhasználat
átlagát és a szórását minden méréshez. Ezen kívül az összes másolásra is kiszámoltam
az átlagot és a szórást.
Mérés 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Átlag Szórás
Másolás
[s] 82 83 83 83 84 84 83 85 83 84 83,4 0,84
Törlés
[s] 0 0 0 0 0 0 0 0 0 0 0 0
CPU,
átlag
[%]
29,58 29,67 29,27 29,29 28,23 28,42 29,39 29,90 28,35 29,47 29,16 0,59
3. táblázat Ext2 fájlrendszeren, lemezen belül, egy nagyméretű fájl másolása.
Mérés 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Átlag Szórás
Másolás
[s] 83 83 80 81 84 90 86 81 89 82 83,9 3,41
Törlés
[s] 2 0 0 1 0 0 0 0 1 0 0,4 0,69
CPU,
átlag
[%]
28,98 28,26 28,49 29,08 28,28 29,56 29,13 29,37 28,71 28,23 28,81 0,48
4. táblázat Ext2 fájlrendszeren, lemezen belül, több kisméretű fájl másolása.
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
22
Mérés 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Átlag Szórás
Másolás
[s] 69 69 69 69 69 69 69 70 69 68 69 0,471
Törlés
[s] 2 0 0 1 0 0 0 0 0 1 0,4 0,699
CPU,
átlag
[%]
44,31 43,90 43,44 43,09 42,99 43,88 43,52 42,96 42,22 43,26 43,35 0,59
5. táblázat Ext3 fájlrendszeren, lemezen belül, egy nagy fájl másolása.
Mérés 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Átlag Szórás
Másolás
[s] 75 75 75 76 75 75 77 76 75 75 75,4 0,699
Törlés
[s] 3 1 1 0 0 1 0 0 0 0 0,6 0,966
CPU,
átlag
[%]
40,15 41,46 40,67 40,51 39,83 40,88 40,35 40,74 39,88 41,33 40,57 0,55
6. táblázat Ext3 fájlrendszeren, lemezen belül, több kis fájl másolása
Mérés 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Átlag Szórás
Másolás
[s] 65 66 66 66 67 65 66 66 66 68 66,1 0,88
Törlés
[s] 0 1 0 0 0 0 1 1 1 0 0,4 0,52
CPU,
átlag
[%]
40,35 40,14 40,51 40,80 40,47 40,68 40,22 39,79 40,60 40,14 40,37 0,30
7. táblázat Ext4 fájlrendszeren, lemezen belül, egy nagy fájl másolása
Mérés 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Átlag Szórás
Másolás
[s] 78 73 72 72 72 72 71 72 72 71 72,50 2,01
Törlés
[s] 0 0 0 0 0 1 0 1 0 1 0,30 0,48
CPU,
átlag
[%]
35,26 37,00 37,85 38,07 37,48 38,28 38,23 37,93 37,95 37,26 37,5307 0,89757
8. táblázat Ext4 fájlrendszeren, lemezen belül, több kis fájl másolása
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
23
A táblázatokból látható, hogy az ext2 fájlrendszeren a másolás alacsonyabb
processzorhasználattal jár a többi vizsgált fájlrendszerhez képest, viszont a másolás több
időt vesz igénybe. A fájltörlés elhanyagolhatóan kis érték a fájlrendszereken, ha ekkora
méretű fájlt törlünk. Az ext4 fájlrendszeren az egy darab nagyméretű fájl másolása is, és
több kisebb méretű fájl másolása esetén is gyorsabb. A naplózó ext3 és ext4
fájlrendszerek esetén több kisméretű fájl, például fotóalbum másolása több időt vesz
igénybe.
4.4.2 Másolás távolról, Samba fájl- és nyomtató kiszolgáló segítségével.
A routerre csatlakoztatott merevlemezen ext3 partíciót használtam, és vezetékkel
csatlakoztam. A távoli gépen Windows 7 Ultimate Service Pack 1, operációs rendszer
volt, és a másolás Total Commander 7.56-os verziójával történt.
A hálózati adatforgalmat a Bandwidth Monitor 3.4-es trial verziójával figyeltem.
Másodpercenként figyeltem az adatforgalmat és a router a processzorhasználatát.
2. ábra Samba3, nagy méretű fálj olvasás
Processzorhasználat átlag: 20,04 %, szórás: 4,84
0
2
4
6
8
10
12
0
5
10
15
20
25
30
35
16
:27
:38
16
:27
:42
16
:27
:46
16
:27
:50
16
:27
:54
16
:27
:58
16
:28
:02
16
:28
:06
16
:28
:10
16
:28
:14
16
:28
:18
16
:28
:22
16
:28
:27
16
:28
:31
16
:28
:35
16
:28
:39
16
:28
:43
16
:28
:47
16
:28
:51
16
:28
:55
16
:28
:59
16
:29
:03
16
:29
:07
Ad
at [
MB
]
Cp
u [
%]
Samba3, nagy méretű fálj olvasás
CPU [%] Letöltött adat [MB]
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
24
3. ábra Samba3, nagy méretű fálj írása
Processzorhasználat átlag: 47,12 %, szórás: 4,8
4. ábra Samba3, több kisméretű fájl olvasása
Processzorhasználat átlag: 17,07 %, szórás: 4,5
0
2
4
6
8
10
12
0
10
20
30
40
50
60
70
16
:42
:23
16
:42
:27
16
:42
:31
16
:42
:35
16
:42
:39
16
:42
:43
16
:42
:47
16
:42
:51
16
:42
:56
16
:43
:00
16
:43
:04
16
:43
:08
16
:43
:12
16
:43
:16
16
:43
:20
16
:43
:24
16
:43
:28
16
:43
:32
16
:43
:36
16
:43
:40
16
:43
:44
16
:43
:48
Ad
at [
MB
]
CP
U [
%]
Samba3, nagy méretű fálj írása
CPU [%] Feltöltött adat [MB]
024681012
05
1015202530
16
:32
:02
16
:32
:07
16
:32
:11
16
:32
:15
16
:32
:19
16
:32
:23
16
:32
:27
16
:32
:31
16
:32
:35
16
:32
:39
16
:32
:43
16
:32
:47
16
:32
:51
16
:32
:55
16
:32
:59
16
:33
:03
16
:33
:07
16
:33
:11
16
:33
:15
16
:33
:20
16
:33
:24
16
:33
:28
16
:33
:32
16
:33
:36
Ad
at [
MB
]
CP
U [
%]
Samba3, több kis méretű fájl olvasása
CPU [%] Letöltött adat [MB]
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
25
5. ábra Samba3, több kis méretű fájl írása
Processzorhasználat átlag: 47,13 %, szórás: 4,5
A grafikonokon látható, hogy a processzorhasználat az adatátvitel indulásakor felugrik.
Adatok írása esetén a processzorhasználat magasabb, 47% körül mozog, míg olvasáskor
20% körüli érték. Az adatküldés minden esetben folyamatos 10 MB körüli érték.
A mérésekhez felhasznált adatokat Microsoft Excel táblázatban dolgoztam fel, és a
DVD mellékletben megtalálhatóak.
A processzorhasználat mérésére a cpusage nevű programot használtam fel, amit az opkg
csomagkezelő segítségével egyszerűen feltelepíthetünk. A cpusage meghatározott
időközönként (alapértelmezésként 1 másodperc) kiírja a processzor használtsági
állapotát és a hozzá tartozó dátumot. A program nem folyamatonként listázza ki az
értékeket, hanem a teljes processzorhasználatot mutatja, ezért a mérések során
törekedtem arra, hogy más művelet ne zavarja meg a mérést. Így a táblázatokban és
grafikonokban feltűntetett adatok az adott mérésnek a teljes használatát mutatják.
A cpusage által processzorhasználata elhanyagolhatóan kicsi. Ha elindítom, és a
kimenetét egy fájlba irányítom, majd közben figyelem a top program segítségével a
processzorhasználatát, 0%-ot jelez minden esetben, valamint 1% és 3% közötti
memóriaigényt.
4.5 Csomagkezelő konfigurálás.
A külső tárhely felcsatolása után, következő lépés az opkg csomagkezelő
konfigurációja. A konfiguráció után a csomagokat a külső tárhelyre is telepíthetjük. A
konfiguráció a /etc/opkg.conf fájlban található, ebbe kell beszúrni egy sort, például nano
0
2
4
6
8
10
12
010203040506070
16
:38
:25
16
:38
:29
16
:38
:33
16
:38
:37
16
:38
:41
16
:38
:45
16
:38
:49
16
:38
:53
16
:38
:57
16
:39
:01
16
:39
:05
16
:39
:09
16
:39
:13
16
:39
:17
16
:39
:22
16
:39
:26
16
:39
:30
16
:39
:34
16
:39
:38
16
:39
:42
16
:39
:46
16
:39
:50
Ad
at [
MB
]
CP
U [
%]
Samba3, több kis méretű fájl írása
CPU [%] Feltöltött adat [MB]
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
26
szövegszerkesztővel.
A dest ram /tmp sort követően egy új sorba írjuk az alábbi sort.
dest hdd /mnt/usb_sys
dest kulcsszó a forrást jelöli, a hdd név, ahogy hivatkozunk rá, és a /mnt/usb_sys a
mappa helye, ahova telepítünk. Adott esetben a felcsatolt mappa.
Mentés után az opkg --dest hdd install mc paranccsal a midnight commandert telepítjük
a külső tárhelyre. Sikeres telepítés után mégsem tudjuk futtatni. Ha megnézzük a
telepítés helyét, láthatjuk, hogy létrejött egy a gyökér könyvtárral megegyező mappa
struktúra. (etc, bin, usr). Az itt található fájlokról kell szimbolikus linket létrehozni a
megfelelő helyre, majd ezt követően tudjuk futtatni bárhonnan. Viszont ez bonyolult és
hosszadalmas módszer. Az OpenWrt oldalán található scriptet fejlesztette tovább egy
felhasználó, és közzétette a hivatalos fórumon. [12]
Hozzunk létre egy futtatható scriptet opkg-link néven a /bin mappában! Ezek után az
opkg-link mount /mnt/usb_sys parancsot kiadva automatikusan létrehozza a szimbolikus
linkeket. A scriptet paraméter nélkül futtatva kiírja a használati utasítást. [13]
5 DLNA
A DLNA (Digital Living Network Alliance) szabvány segítségével különböző
multimédiás eszközöket kapcsolhatunk össze. A szabványt támogató eszközök között
multimédiás anyagokat továbbíthatunk. Például egy modern TV, ami támogatja a
DLNA szabványt, és rendelkezik beépített DLNA lejátszóval. Képesek vagyunk
rácsatlakozni egy szerverre távolról multimédiás anyagokat (filmet, zenét) lejátszani.
[14] OpenWrt-re feltelepíthetünk DLNA szervert, ami ellátja ezt a funkciót. Képesek
vagyunk például a routerről, egy modern tv segítségével filmet nézni vagy zenét
hallgatni.
OpenWrt-n két program elérhető, ami DLNA szerverként funkcionál. A MiniDLNA és
az uShare. A tesztelések során a miniDLNA sokszor lefagyott, és nagyon lefoglalta a
rendszer erőforrásait, nem jó választás DLNA szervernek. Az uShare programnál nem
tapasztaltam hasonló hibákat, a program megfelelően működött.
5.1 UShare
A program telepítése és konfigurálása nagyon egyszerű. A programot érdemes külső
tárhelyre telepíteni.
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
27
1. opkg update
2. opkg --dest hdd install ushare
3. opkg-link mount /mnt/winya-sys/
A csomagok frissítése (1) után telepítjük a külső tárhelyre (2), majd ezek után az opkg-
link szkript segítségével a program fájljait a megfelelő helyre linkeljük(3??).
1. config 'ushare'
2. option 'username' 'nobody'
3. option 'servername' 'OpenWrt'
4. option 'interface' 'br-lan'
5. option 'options' ''
6. option 'content_directories' '/mnt/hdd/Share'
7. option 'disable_telnet' '1'
8. option 'disable_webif' '1'
9. option 'enabled' '1'
Az 1. sorban kezdődik az ushare konfigurációja. A 6. sorban adjuk meg azt a mappát,
ahol a multimédiás anyagok szerepelnek. A 9. sorban engedélyezzük a program futását.
Érdemes egy saját indító szkriptet írni. A multimédiás programoknak nagy az
erőforrásigényük, gyorsan megtelik a memória. Viszont amennyiben létrehozunk egy
virtuális memóriaterületet, a rácsatlakoztatott merevlemezt felhasználva, akkor
problémamentes lesz a lejátszás. A következő sorokat tartalmazó futtatható szkriptet
hozzuk létre a /bin mappában.
nano /bin/ushare-starter
1. #!/bin/sh /etc/rc.common
2. start()
3. busybox mkswap /dev/sda3
4. busybox swapon /dev/sda3
5. /mnt/winya/etc/init.d/ushare start
6.
7. stop()
8. busybox swapoff /dev/sda3
9. /mnt/winya/etc/init.d/ushare stop
10.
A virtuális memória bekapcsolásához a külső merevlemezen szükséges egy swap
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
28
partíció. A 3. sorban hozzuk létre a virtuális memóriát, és a 4. sorban kapcsoljuk be.
Ezek után az ushare-starter start parancsot végrehajtva elindul a DLNA szerver. Ekkor a
routerre csatlakozott eszközök a belső hálózaton látják, ha rendelkeznek DLNA
lejátszóval. A Microsoft Windows Media Player a 10. verziójától támogatja a DLNA
szabványt. Az XBMC egy ingyenes és nagyon igényes DLNA lejátszó, amit akár önálló
operációs rendszerként is lehet használni. [15]
5.2 Szükséges erőforrás.
Érdemes figyelni az erőforrásra. A TP-LINK WR1043ND router képes full HD (1080p)
videó továbbítására vezeték nélküli hálózaton szaggatás nélkül, viszont több sok
erőforrást igénylő folyamat esetén az eszköz lefagy, és újraindul. Sok erőforrást igénylő
szolgáltatások például:
Adatmozgatás a routerre kötött külső merevlemezen.
Olvasás vagy írás a megosztott tárhelyről.
DLNA szerver (adatfolyam továbbítás)
Webszerver (speciális funckiók esetén, amik például fájlműveleteket hajtanak
végre)
Folyamatos töltés internetről, például torrentezés.
Tehát a sok erőforrást igénylő folyamatok közül érdemes mindig egyet futtatni, akkor
biztosak lehetünk benne, hogy a router hibátlanul ellátja az alap funkcióit. Előfordulhat,
hogy elfogy az erőforrás. Ekkor a rendszer újraindul, és betölti az alap rendszert, majd
pár perc múlva minden program tökéletesen újra működik (azok, amelyek induláskor
elindulnak).
6 EDAQ530
Az EDAQ 530 egy kisméretű (4cm*7.8cm*2cm), 12 bites adatgyűjtő interfész. 5V
feszültségről üzemel, így nem szükséges külső táplálás, az USB port biztosítja a
megfelelő tápfeszültséget. Az USB kommunikáció FTDI (Future Technology Devices
6. ábra EDAQ530 bemeneti csatlakozó
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
29
International) chipen keresztül történik. Az eszköz csatlakoztatása után 5-10 másodperc
telik el, amíg az eszköz készenléti állapotba lép. Három csatornán van lehetőségem
feszültséget mérni. A 6. ábrán látható a szabványos csatoló.[16]
Látható, hogy van egy tápláló csatlakozás, aminek a névleges értéke 5V, valós értéke
3.3 V körüli értéknek felel meg. A 12 bites eszköz felbontása:
5V/212
=5 V/4096=1.22 mV
Az eszközzel feszültséget tudunk mérni, viszont így csak a feszültség alapú szenzorokat
tudnánk használni, ezért a készítők beleépítettek egy funkciót, aminek a segítségével
közvetetten lehet ellenállást mérni. Egy parancs elküldésével be lehet kapcsolni egy
felhúzó ellenállást, aminek ismert a pontos értéke, így ki lehet számolni az ellenállást a
mért feszültségből.
7. ábra Feszültségosztó kapcsolási rajza
(1)
(2)
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
30
Ahogy a képen is látható, ha számítógépre csatlakoztatjuk az eszközünkrt, akkor
létrejön egy virtuális soros kommunikációs port (ha a megfelelő driverek telepítve
vannak). Linux alatt /dev/ttyUSB0 néven. Ezt a féle kommunikációt a Putty program
segítségével tudjuk kipróbálni.
8. ábra FTDI kommunikációs port az eszközkezelőben
A megfelelő paraméterek beállítása után képesek vagyunk kommunikálni az eszközzel.
Ez a féle kommunikáció nagyon hasznos a fejlesztés kezdeti szakaszában. Például, ha
elküldjük a @I parancsot, és utána többször elküldünk valamilyen karaktert, akkor a
következő üzenetet kapjuk vissza.
@IEDAQ530C (c) 30/06/2010 www.noise.physx.u-szeged.hu
Ez a parancs az eszközbe épített, azonosításra szolgáló karaktersorozatot adja vissza. A
parancs elküldése után minden elküldött karakter hatására kapunk egy darab karaktert.
Tehát ahhoz, hogy visszakapjuk a teljes karaktersorozatot, a @I után el kell még
küldenünk 53 karaktert.
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
31
7 FTDI programkönyvtár (libFTDI)
Közvetlen tesztelésre hasznos ez a kommunikáció, viszont ha programot alapozunk
erre, számos hibába ütközünk. Problémák lehetnek a késleltetéssel, ezért a programot
tele kell tűzdelni milliszekundumos várakozásokkal. Ha újra csatlakoztatjuk az eszközt,
vagy ha több eszközt használunk, nem tudjuk pontosan, hogy melyik soros
kommunikációs porton van az általunk használt eszköz
Az FTDI többféle programkönyvtárat biztosít számunkra. Mi a libFTDI-t használjuk.
[13] Minden FTDI chip rendelkezik egy sorozatszámmal. Az FTDI programkönyvtár
biztosít számunkra olyan funkciót, amellyel a rácsatlakoztatott eszközöket
végigpásztázva, lekéri az sorozatszámokat. Képesek vagyunk adott sorozatszámú
eszközzel kommunikálni anélkül, hogy mindig meg kellene nézni a kommunikációs
port számát.
7.1 FTDI OpenWrt-n
Már tudjuk, hogy Windowson, Linuxon, MacOS X-en vagy BSD variánsokon
hatékonyan tudunk kommunikálni libFTDI vagy közvetlen soros portos kommunikáció
segítségével. Ha a routeren kérjük le az FTDI-jal kapcsolatos parancsokat.
opkg update && opkg list |grep ftdi
kmod-usb-serial-ftdi - 2.6.32.27-1 - Kernel support for FTDI USB-to-Serial
converters
libftdi - 0.18-1 - libFTDI - FTDI USB driver with bitbang mode
Két csomag látható. Az egyik egy kernel modul, a másik a libftdi könyvtár, amire
szükségünk van. A libFTDI csomagnak további csomagokat is igényel. A libusb, és a
libconfuse csomagot is használja.
OpenWrt-n libusb és confuse néven szerepelnek, ezeket a csomagokat kell telepíteni.
Az FTDI támogatás OpenWrt 10.03.1-rc4 és a Gargoyle 1.3.14 verzióknál, valamint a
korábbi verziók előtt nem elérhető. A modul elérhető, viszont telepíteni nem lehet. Ezt a
hibát a későbbi verzióknál kijavították. Csatlakoztassuk a műszerünket a routerre
rákötött USB-hubra, majd vizsgáljuk meg az lsusb kimenetét.
Bus 001 Device 005: ID 0403:6001 Future Technology Devices International, Ltd
FT232 USB-Serial (UART) IC
Látható, hogy az FTDI chipet a rendszer felismeri, mint USB eszköz. Ha az FTDI
kernel modult is sikeresen feltelepítettünk, és csatlakoztattuk az eszközt, a dmesg
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
32
parancs utolsó sorában látható, hogy az FTDI eszközt felismerte és csatolta a
/dev/ttyUSB0 helyre.
usb 1-1.1: FTDI USB Serial Device converter now attached to ttyUSB0
8 Kommunikációs program
Az általam készített program, stabil kommunikációt biztosít a mérőműszerrel. A C++
nyelven írt program, az FTDI library segítségével tartja fenn a kapcsolatot. A program
kezelése felhasználóbarát módon történik. A vezérlés a Linuxban megszokott
parancssori argumentumokon keresztül történik. Az EDAQ530-on található 8051-es
mikrovezérlő programja, a dokumentációban elérhető. A mikrovezérlő a következőképp
működik. Minden parancs a ’@’ jellel kezdődik. Ezt követően egy karakter a parancs,
majd még egy karakter a paraméter, ha szükséges. Minden elküldött karaktert azonnal
visszaküldd az eszköz. A visszaküldött karakterekkel „jelez” a program, hogy a
karaktereket sikeresen megkapta. A következő parancsok találhatók a mikrovezérlőn.
Parancs Visszaküldött adat [bájt] Leírás
I 51 Identifikációs karaktersorozat
M 6 Egy mérést hajt végre, 3 csatornán
S folyamatos folyamatos mérés, kilépés Escape
f - mintavételezési frekvencia
Q 3 paraméterek lekérdezése
P - felhúzó ellenállások
E - Infra led ki/bekapcsolása
9. táblázat EDAQ530 parancs táblázata
A fenti táblázatban a visszaküldött adat nem tartalmazza a visszaküldött parancsokat.
[17] A @M parancs egy mérést hajt végre mindhárom csatornán, majd eltolva az
adatokat, bájtonként küldi vissza. A hat bájt páronként tartalmazza a hasznos
információt. Ahhoz, hogy bájtonként lehessen küldeni, páronként az első bájt jobbra
van shiftelve 8-cal. A kiolvasás után vissza kell állítani, „összerakni” a bájtokat. A @S
parancs hatására az eszköz a beállított mintavételezési frekvencián folyamatosan közli
az adatokat, és az Escape (27) karakter hatására áll le. Fontos parancs még a @P. Ezzel
tudjuk bekapcsolni a felhúzó és lehúzó ellenállásokat. Egy paraméter is szükséges a
parancshoz, ami egy bájt. Ennek a négy legkisebb helyértékű bitje fontos csak. Ezzel
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
33
állítjuk be a csatornákon a felhúzó ellenállásokat és a lehúzó ellenállást. Négy értéket
lehet beállítani.
PULLUP1 = c & 1;
PULLUP2 = c & 2;
PULLUP3 = c & 4;
PULLDN3 = c & 8;
A PULLUP1, PULLUP2, PULLUP3 paraméterek, rendre az A, B, C csatornák. ’c’ az
elküldött bájt. A változók értéke a ’c’ paraméter és a látható szám értéke, bitszintű „és”
kapcsolatuk eredménye. A felhúzó ellenállásoknál a 0 érték jelenti a bekapcsolt
állapotot, és a lehúzó ellenállásnál az 1 érték jelenti a bekapcsolt állapotot. Ezen
információk alapján felírhatjuk a következő táblázatot.
Csatorna.
Lehúzó ell. be. Decimális Bináris
A 6 00000110
AB 4 00000100
ABC 0 00000000
B 5 00000101
BC 1 00000001
C 3 00000011
AC 2 00000010
0 7 00000111
Lehúzó ell. Ki.
A 14 00001110
AB 12 00001100
ABC 8 00001000
B 13 00001101
BC 9 00001001
C 11 00001011
AC 10 00001010
0 15 00001111
A táblázatban az első nyolc érték a lehúzó ellenállás kikapcsolt állapota mellett, az 1.
oszlopban látható csatornákon kapcsolja be a felhúzó ellenállásokat. A programban a
10. táblázat Felhúzó ellenállás beállítás
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
34
decimális értékeket használom fel az ellenállások beállítására.
A következő oldalon található folyamatdiagram (9. ábra) mutatja a program működését.
A program vezérlése parancssori argumentumok segítségével történik. Az
argumentumokat a getopt.h függvénykönyvtár segítségével valósítottam meg, így a
Linuxban megszokott módon tudom kezelni. Például a help menüt a -h vagy --help
paraméterrel tudjuk kiíratni. A getopt_long a két gondolatjeles hosszú formájú
parancsot jelöli. A getopt_short és getop_long-hoz tartozó beállításokat egy
struktúrában tárolom. A program indulása után azonnal végigmegyek a paraméterlistán,
majd minden funkció egy switch ciklusban beállítja a hozzá tartozó globális változót.
Így a program futása során pontosan tudom, hogy a programnak milyen beállításokkal
kell működnie. Fontos, hogy a mérés akkor kezdődik el, ha paraméterként megadjuk a -
O, vagy --one-measure kapcsolót. Ha a paraméter szerepel az argumentumok között,
engedélyezzük, hogy csatlakozzon az eszközre. Bonyolultabb beállításoknál lehetőség
van kiíratni a beállított paraméterlistát, és a csatlakoztatott FTDI eszközről lekérhetők
az információkat (ehhez engedélyezni kell a mérést). Ezek után engedélyezem eszközön
a beállított felhúzó/lehúzó ellenállásokat, majd indul egy ciklus, ami addig megy, amíg
a paraméterben megadott mérésszámot el nem éri. A mérés pillanatában mindig lekérem
az időt és dátumot. Ha fájlba írom a mért adatokat, akkor a pontos dátumot is kiírom,
így pontosan tudom a mérések időpontját. A beállítások között elérhető olyan funkció,
amely közvetlenül ellenállást vagy hőmérsékletet ad vissza. A hőmérsékletet
thermisztorral mérem. A thermisztor egy ellenállás alapú szenzor.
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
35
9. ábra Folyamatábra
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
36
Ellenállás méréséhez először a megfelelő csatornán be kell kapcsolnom a felhúzó
ellenállást, majd ebből ki tudom számolni az ellenállást. Ha hőmérsékletet is akarok
mérni thermisztorral az ellenállásból tudok számolni hőmérsékletet. A temp-ch-X
parancs ahol X a megfelelő csatornát jelöli (a,b,c) automatikusan elvégzi az összes
beállítást, és a megadott csatornán hőmérsékletet ad vissza Celsiusban. A mérés és az
értékek számolása után, ha beállítottuk a fájlba írást, akkor kiírom az eredményeket
fájlba és a kimenetre is. A mérések közötti időt milliszekundumban adhatjuk meg. Ha
lefutott a ciklus, azaz elértük a megadott mérésszámot akkor a program megfelelően
lezárja a kapcsolatokat és kilép. A program működését már értjük viszont még nem
értjük a kommunikációt.
A program tervezése során törekedtem arra, hogy a program mobilis legyen,
fejleszthető. OpenWrt rendszeren elérhető a GNU Standard C++ library, így
lehetőségünk van objektum orientált programok írására. A libFtdi segítségével
hatékonyan tudunk kommunikálni az FTDI chipekkel. Tehát már csak egy olyan
osztályra van szükségünk, ami ezt a függvénykönyvtárat felhasználva hatékonyan
kommunikál az EDAQ530-al, vagy más EDAQ eszközzel például EDAQ24. A
következő UML diagramon pontosan végigkövetjük a program szerkezetét.
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
37
10. ábra Osztálydiagram
A diagram jobb oldalán látható az Ftdi csomag, ami jelen esetben névteret jelöl, és ez
tartalmazza a List és a Context osztályokat. Ezek a hivatalos libFtdi C++ osztályok. A
diagramban csak a fontosabb funkciókat jelöltem. A libFtdi, linux alatt C nyelvet
használ, viszont a hivatalos oldalukon található egy header fájl, ami C++ nyelven
íródott, így ezt felhasználva objektum orientáltan is tudunk kommunikálni. Az
Edaq530.cpp a fő osztályom, ebben található a main függvény, a parancssori
argumentumok kezelése és a fájlkiíratást megvalósító CSVout osztály, ami CSV
(comma-separated value) formátumban írja ki az adatokat pontos vesszővel elválasztva.
A stabil kommunikációt az edaqConnect.hpp fájlban definiált Edaq osztály garantálja.
Példányosításkor a default konstruktor beállítja a szükséges paramétereket a
csatlakozáshoz (Vendor id, Product Id, sávszélesség). A csatlakoztatott FTDI chipek
adatait egy listában tárolom, és a find_all függvény segítségével tudom lekérdezni. A
Connect függvény sorra beállítja a kommunikációhoz szükséges beállításokat. Ezek a
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
38
beállítások a Context osztályban találhatóak. A feltöltött listán keresztül tudjuk
meghívni, ha végiglépkedünk egy iterátor segítségével, Jelen esetben a lista egyelemű.
Az EDAQ530 által használt beállítások az alábbi táblázatban láthatóak.
Sávszélesség 230400
Adat bit 8
Stop bit 2
Paritás None
Flow Control None
Hibajelzésre ERR_CODE, enum típus definiálok, amiben pontosan leírom a felmerülő
hibákat. A ConnectInfo az FTDI chipről szolgáltat adatokat. Ha az eszközre akarunk
írni, vagy az eszközről akarunk olvasni, akkor egy itárátor segítségével végiglépkedve a
listán, minden elemre meghívhatjuk a write vagy read metódust. A read és a write
metódusnak kettő paramétere van. Az első egy előjeltelen karaktertömb, és egy integer.
A read esetében a karaktertömbbe olvasunk pontosan annyi bájtnyi adatot amekkora
számot megadtunk a második paraméterben. Write esetében a karaktertömböt küldjük
el, és a második paraméter ennek a mérete. Ha az EDAQ530-on található parancsokat
külön-külön metódusban akarjuk kezelni, akkor ez a féle írás/olvasásmód bonyolult és
számos hiba forrása lehet. Ezért írtam egy saját read és write metódust ahol a fent
említett módszert használom. Így csak egy helyen megyek végig a listán. Ezzel
leegyszerűsödött a parancs küldés és fogadás szintaxisa. A korábbiakban említettük,
hogy az EDAQ530 a következő koncepción alapul. Minden elküldött karaktert azonnal
visszaolvasok. Viszont az FTDI által biztosított függvényekkel tetszőleges méretet
tudok írni és olvasni. A SendCommand metódus biztosítja, hogy a paraméterben
megadott karaktertömb egyesével elküldi, majd visszaolvassa, az adatokat Van olyan
eset, amikor egy bájt adatot kapunk. A GetByte metódus kiolvas pontos egy bájt adatot
és egy előjeltelen karakterként adja vissza. Most már a bármelyik parancsot egyszerűen
implementálhatjuk a GetByte és a SendCommand függvények segítségével.
Én a @M, és a @P parancsokat implementáltam. A @M-el egy mérést tudok
végrehajtani, a @P parancs pedig a felhúzó ellenállásokat állítja be a már részletezett
módon. A Sensor osztály GetResistance metódusa számolja az ellenállást. A Thermistor
11. táblázat Kommunikációs beállítások
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
39
osztály GetTemperature metódusa számolja a hőmérsékletet.[8] A hőmérsékletet az
alábbi képlettel tudjuk kiszámolni.
(
)
Ahol. B=3977 K és R25=104Ω
8.1 Program futtatása terminálból.
Ha lefordítottuk az OpenWrt SDK segítségével majd feltelepítettük a csomagot, akkor
már elérhető a /bin könyvtárban így bárhonnan futtatható a routeren belül. [18] A
program neve Edaq530. Először futtassuk le az Edaq530 --help parancsot, ezzel kiírja a
részletes használati utasítást. Írassuk ki az FTDI chip tulajdonságait. Ehhez az Edaq -P -
O parancsot szükséges végrehajtani. Ahol a -P írja ki a beállított paramétereket, és ha
csatlakoztunk az eszközre, akkor az FTDI információkat is kilistázza.
FTDI információk:
------------------------------------------------------
FTDI (0x41b160)
Vendor: FTDI
Description: FT232R USB UART
Serial: A1004dqp
Product: 24577
Baudrate: 230400
------------------------------------------------------
Látható többek között a chipen található sorozatszám, a chip leírása és a beállított sáv
szélesség. Csatlakoztassunk a középső csatornára egy termisztort és mérjük meg az
ellenállását szobahőmérsékleten.
root@OpenWrt:~# Edaq530 --count-res-ch-b -O
-----------------------------------------------
Measure 0.
Original value(A,B,C) : 14,1948,44
2012-5-1 15:38:45
(3)
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
40
Channel A:14
Channel B:9068.9
Channel C:44
A méréseket egy vonal választja el egymástól a könnyebb olvashatóság érdekében és az
ezt közvető sor jelzi a mérés sorszámát. Ez akkor hasznos, ha több mérést végzünk. Az
original value, a mért adatokat mutatja. Ebben az esetben az ellenállást a B értékből
számoljuk. A --count-res-ch-b hatására automatikusan bekapcsolódik a felhúzó
ellenállás a ’B’ csatornán, és a mért eredmény kiszámolja az eredményt. A Channel B
jelzi a B csatorna értékét, ami 9068.9 Ω. Ebben az esetben az ’A’ és ’C’ csatornán lévő
jeleket nem kell figyelembe venni. Mérjük meg a hőmérsékletet.
root@OpenWrt:~# Edaq530 --temp-ch-b -O
-----------------------------------------------
Measure 0.
Original value(A,B,C) : 21,1948,49
2012-5-1 15:35:30
Channel A:21
Channel B:27.2008
Channel C:49
Az Original value középső értéke megegyezik az előző mérésnél mért adattal, viszont
most a Channel B értéke 27,2008 °C
Tudjuk, hogy az általunk használt termisztor ellenállása 25 °C-on 10000Ω. Ebben az
esetben a két mérésből megállapíthatjuk, hogy a 27°C-on az termisztor ellenállása
9068Ω
Most végezzünk el egy hosszabb mérést. A szenzort tegyük be a hűtőszekrénybe és
végezzünk több mérést, ezzel vizsgálva a lehűlési görbét. 400 db mérést végzünk, és a
mérések közötti időtartam 1 másodperc. Az eredményt kiíratjuk egy CSV fájlba majd
ábrázoljuk a megoldást.
A parancs, amit le kell futtatni: Edaq530 --time 400 -m 1000 --temp-ch-b -o output.csv -
O
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
41
11. ábra Szenzor lehűlési görbe
A grafikonon Y tengelyén a hőmérséklet látható, az X tengelyen pedig az pontos dátum
és idő.
8.2 Program elérése böngészőn keresztül.
Lehetőségünk van a routerre webszervert telepíteni. További modulok telepítésével CGI
szkriptek futtatására lesz lehetőségünk, így böngészőn keresztül tudunk különböző
programokat meghívni, például az EDAQ530-al történő kommunikációra szolgáló
programot. Először ehhez telepítenünk kell a webszervert.
8.2.1 Webszerver konfigurálása és telepítése
A programot érdemes a már beállított külső tárhelyre telepíteni. Most a lighttpd
webszervert fogjuk használni. Előnye, hogy kisméretű és a modulokat külön-külön lehet
engedélyezni, ezzel memóriát megtakarítva. A modulokat az opkg segítségével tudjuk
kilistázni. Most csak az alapbeállításokat tekintjük át, a program részletesen van
dokumentálva az OpenWrt hivatalos oldalán és számos más helyen jól használható
dokumentáció elérhető.
0
5
10
15
20
25
30
20
12
-4-3
0 1
5:2
:47
20
12
-4-3
0 1
5:2
:60
20
12
-4-3
0 1
5:3
:14
20
12
-4-3
0 1
5:3
:27
20
12
-4-3
0 1
5:3
:40
20
12
-4-3
0 1
5:3
:54
20
12
-4-3
0 1
5:4
:7
20
12
-4-3
0 1
5:4
:20
20
12
-4-3
0 1
5:4
:34
20
12
-4-3
0 1
5:4
:47
20
12
-4-3
0 1
5:4
:60
20
12
-4-3
0 1
5:5
:14
20
12
-4-3
0 1
5:5
:27
20
12
-4-3
0 1
5:5
:40
20
12
-4-3
0 1
5:5
:53
20
12
-4-3
0 1
5:6
:7
20
12
-4-3
0 1
5:6
:20
20
12
-4-3
0 1
5:6
:33
20
12
-4-3
0 1
5:6
:47
20
12
-4-3
0 1
5:6
:60
20
12
-4-3
0 1
5:7
:13
20
12
-4-3
0 1
5:7
:27
20
12
-4-3
0 1
5:7
:40
20
12
-4-3
0 1
5:7
:53
20
12
-4-3
0 1
5:8
:7
20
12
-4-3
0 1
5:8
:20
20
12
-4-3
0 1
5:8
:33
20
12
-4-3
0 1
5:8
:47
20
12
-4-3
0 1
5:8
:60
20
12
-4-3
0 1
5:9
:13
20
12
-4-3
0 1
5:9
:27
Hő
mé
rsé
kle
t [°
C]
Idő
Lehülési görbe
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
42
Először is telepítsük fel a lighttpd-t és a lighttpd-mod-cgi-t ami a webszerver CGI
modulja. Majd ezek után az opkg-link szkriptet lefuttatni, ami bemásolja a program
fájljait a megfelelő helyre. Mindezek után tudjuk szerkeszteni a lighttpd konfigurációs
fájlját a /etc/lighttpd/lighttpd.conf helyen.
opkg --dest hdd install lighttpd-mod-cgi lighttpd
opkg-link mount /mnt/winya_sys/
nano /etc/lighttpd/lighttpd.conf
Az alap konfigurációs fájl, nagyon jól dokumentált és tartalmaz egy példabeállítást. Az
alábbi kóddal kell kiegészíteni a konfigurációs fájlt.
1. server.modules = ( "mod_cgi" )
2. server.document-root = "/mnt/winya_sys/wwwroot"
3. server.port = 8080
4. cgi.assign = ( )
5. $HTTP["url"] =~ "^/cgi-bin"
6. cgi.assign = ( "" => "/bin/sh", ".sh" => "/bin/sh" )
Az 1. sor engedélyezi a CGI modult, a 2. sor beállítja a honlapok
dokumentumkönyvtárát. Ennek létező mappának kell lennie. A harmadik sor port
beállítások. és a 4.5.6. sor a CGI szkriptet konfigurálja. A szkriptek a wwwroot mappán
belül egy cgi-bin mappában kell, hogy elhelyezkedjenek. és ebben az esetben sh
szkripteket vár. Lehetőség van még perl szkriptek futtatására is. A következő paranccsal
tudjuk elindítani a webszervert. [19]
/etc/init.d/lighttpd start
12. ábra Programfuttatás böngészőből
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
43
A 12. ábrán látható a program futtatása, a C csatornán. A C csatornán az ellenállás
értéke 10207Ω. Ez azért van, mert egy ellenállás alapú termisztor volt rákötve aminek
az ellenállása 25°C-on 10000Ω A CGI szkript egy egyszerű statikus html kódot
tartalmaz. Amikor megnyitom az oldalt, lefut a szkript. Az oldal akkor jelenik meg,
amikor lefutott a program. A böngésző frissítésével újra lefut a program. Ennek egy
hátránya, hogy a program minden frissítéskor rácsatlakozik az EDAQ530-ra majd a
mérés után lezárja a kapcsolatot, ez sok időt vesz igénybe. Publikáció keretétében
jelenleg fejlesztése folyik egy olyan programnak, ami az eddig részletezett dolgokat
felhasználva hatékony és gyors kommunikációt biztosít.
13. ábra Az eszközök működés közben
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
44
9 Irodalomjegyzék
[1] A. S. Tanenbaum, Számítógép Hálózatok, ISBN 963-545-384-1, 2004.
[2] „OpenWrt,” 3 május 2012. [Online]. Available: http://wiki.openwrt.org/toh/start.
[3] „List of wireless router firmware projects,” [Online]. Available:
http://en.wikipedia.org/wiki/List_of_wireless_router_firmware_projects.
[4] „Gargoyle Router Management Utility,” [Online]. Available: http://www.gargoyle-
router.com/.
[5] A. TAL, „NAND vs. NOR flash technology,” 2 január 2002. [Online]. Available:
http://www2.electronicproducts.com/NAND_vs_NOR_flash_technology-article-
FEBMSY1-feb2002-html.aspx.
[6] „OpenWrt, Flash Layout,” [Online]. Available:
http://wiki.openwrt.org/doc/techref/flash.layout.
[7] C. Simmonds, „Linux flash file systems,” 2009. [Online]. Available:
http://www.embedded-linux.co.uk/downloads/ESC-5.4-flash_filesystems-
slides.pdf.
[8] „Mini_fo,” [Online]. Available: http://www.denx.de/wiki/Know/MiniFOHome.
[9] SquashFs. [Online]. Available: http://lxr.free-
electrons.com/source/Documentation/filesystems/squashfs.txt.
[10] „OpenWrt, USB basic support,” [Online]. Available:
http://wiki.openwrt.org/doc/howto/usb.essentials.
[11] „USB 2.0 specifikáció,” [Online]. Available: http://www.usb.org/developers/docs/.
[12] „Opkg-Link script,” [Online]. Available:
https://forum.openwrt.org/viewtopic.php?id=24620.
[13] „OpenWrt OPKG Package Manager,” 08 04 2012. [Online]. Available:
http://wiki.openwrt.org/doc/techref/opkg#installation.destination.
[14] „DLNA,” [Online]. Available: http://ww.dlna.org.
[15] „OpenWrt, uShare configuration,” [Online]. Available:
http://wiki.openrt.org/doc/uci/ushare.
[16] K. Kopasz, P. Makra és Z. Gingl, „UsingEDAQ530,” 2010. [Online]. Available:
http://www.noise.physx.u-szeged.hu/Instruments/Edaq530/EDAQ530-
hardware.pdf.
[17] K. Kopasz, P. Makra és Z. Gingl, „Thumb-size USB-to-sensor interface supports
efficient experimentation in multilevel education of physics and other disciplines,”
[Online]. Available: http://www.noise.physx.u-
szeged.hu/EduDev/EDAQ530/Default.aspx.
[18] „Writing and Compiling A Simple Program For OpenWrt,” [Online]. Available:
http://www.gargoyle-router.com/wiki/doku.php?id=openwrt_coding.
[19] „Openwrt, Lighttpd,” [Online]. Available:
http://wiki.openwrt.org/doc/howto/http.lighttpd.
[20] „libFTDI, FTDI USB driver,” [Online]. Available:
http://www.intra2net.com/en/developer/libftdi/index.php.
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
45
10 Nyilatkozat
Alulírott, Tóth Szabolcs mérnök informatikus BSc szakos hallgató, kijelentem,
hogy a dolgozatomat a Szegedi Tudományegyetem, Informatikai Tanszékcsoport
Műszaki Informatika Tanszékén készítettem, mérnök informatikus BSc diploma
megszerzése érdekében.
Kijelentem, hogy a dolgozatot más szakon korábban nem védtem meg, saját
munkám eredménye, és csak a hivatkozott forrásokat (szakirodalom, eszközök, stb.)
használtam fel.
Tudomásul veszem, hogy szakdolgozatomat a Szegedi Tudományegyetem
Informatikai Tanszékcsoport könyvtárában, a helyben olvasható könyvek között
helyezik el.
2012. május 18.
_________________
Tóth Szabolcs
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
46
11 Köszönetnyilvánítás
Köszönettel tartozom témavezetőmnek, Szépe Tamásnak, amiért szívesen fogadott az
egyedi szakdolgozat témával, illetve a dolgozat írása közben nyújtott hasznos
tanácsokért.
Köszönettel tartozom Dr Gingl Zoltán tanszékvezetőnek, akihez a fejlesztések során
felmerülő problémákkal bármikor fordulhattam.
Köszönöm Vig Jácint barátomnak, aki segített a korai próbálkozásokban.
Végül, de nem utolsó sorban köszönöm szerető családomnak, Tóth Ottónak, Tóthné
Darázs Tündének és Tóth Rékának hogy szeretetükkel és bizalmukkal mindvégig
támogattak.