Szegedi Tudományegyetem Informatikai Tanszékcsoport
Alkalmazásfejlesztés és teljesítményoptimalizá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
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
2
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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
3
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
1
Tartalom TARTALMI ÖSSZEFOGLALÓ ...................................................................................................................... 3
2
BEVEZETÉS .................................................................................................................................... 5 2.1 2.2
3
EGYÉB OPERÁCIÓS RENDSZEREK ................................................................................................... 7 3.1
4
OPENWRT ................................................................................................................................... 5 ROUTER ...................................................................................................................................... 6
GARGOYLE .................................................................................................................................. 8
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 5.2
USHARE .................................................................................................................................... 26 SZÜKSÉGES ERŐFORRÁS. ........................................................................................................... 28
6
EDAQ530 ..................................................................................................................................... 28
7
FTDI PROGRAMKÖNYVTÁR (LIBFTDI) .......................................................................................... 31 7.1
8
FTDI OPENWRT-N .................................................................................................................... 31
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
4
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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
5
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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.
6
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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ő. Tp-link 1043ND,
Név
Frissítés
támogatá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]
7
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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ő
8
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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ú
9
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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]
1. ábra Flash réteg felépítés
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 rawflash 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
10
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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 1. réteg
m25p80 Serial Peripheral Interface Bus0.0: m25p64 8192KiB mtd0 u-boot mtd4 art mtd5 firmware 8000KiB 128KiB 64Kib mtd1 kernel
2. réteg
1280KiB
csatolási
mtd2 rootfs 6720KiB / (gyökérkönyvtár)
pont fájlrendszer
mini_fo mtd3
3. réteg
rootfs_data 5184KiB
Méret(KiB)
128KiB
1536KiB
Név
u-boot
kernel
-
-
csatolási pont fájlrendszer
-
-
5184KiB
/rom SquashFs
64KiB
rootfs_data
art
/overlay
-
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
11
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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
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
12
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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 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
13
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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
14
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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 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
15
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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.
16
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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
17
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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/tlwr1043nd\: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/tlwr1043nd\: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.
18
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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
/dev/sdb1
1
65
/dev/sdb2
66
70
/dev/sdb3
71
Blocks Id System 522081 83 Linux 40162+ 82 Linux swap / Solaris
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)
19
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
/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.
20
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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
82
83
83
83
84
84
83
85
83
84
83,4
0,84
0
0
0
0
0
0
0
0
0
0
0
0
29,58
29,67
29,27
29,29
28,23
28,42
29,39
29,90
28,35
29,47
29,16
0,59
Másolás [s] Törlés [s] CPU, átlag [%]
3. táblázat Ext2 fájlrendszeren, lemezen belül, egy nagyméretű fájl másolása. Mérés Másolás [s] Törlés [s]
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Átlag
Szórás
83
83
80
81
84
90
86
81
89
82
83,9
3,41
2
0
0
1
0
0
0
0
1
0
0,4
0,69
28,98
28,26
28,49
29,08
28,28
29,56
29,13
29,37
28,71
28,23
28,81
CPU, átlag
0,48
[%] 4. táblázat Ext2 fájlrendszeren, lemezen belül, több kisméretű fájl másolása.
21
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
Mérés Másolás [s] Törlés [s]
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Átlag
Szórás
69
69
69
69
69
69
69
70
69
68
69
0,471
2
0
0
1
0
0
0
0
0
1
0,4
0,699
44,31
43,90
43,44
43,09
42,99
43,88
43,52
42,96
42,22
43,26
43,35
0,59
CPU, átlag [%] 5. táblázat Ext3 fájlrendszeren, lemezen belül, egy nagy fájl másolása.
Mérés Másolás [s] Törlés [s]
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Átlag
Szórás
75
75
75
76
75
75
77
76
75
75
75,4
0,699
3
1
1
0
0
1
0
0
0
0
0,6
0,966
40,15
41,46
40,67
40,51
39,83
40,88
40,35
40,74
39,88
41,33
40,57
0,55
CPU, átlag [%] 6. táblázat Ext3 fájlrendszeren, lemezen belül, több kis fájl másolása
Mérés Másolás [s] Törlés [s]
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Átlag
Szórás
65
66
66
66
67
65
66
66
66
68
66,1
0,88
0
1
0
0
0
0
1
1
1
0
0,4
0,52
40,35
40,14
40,51
40,80
40,47
40,68
40,22
39,79
40,60
40,14
40,37
0,30
CPU, átlag [%] 7. táblázat Ext4 fájlrendszeren, lemezen belül, egy nagy fájl másolása
Mérés Másolás [s] Törlés [s]
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Átlag
Szórás
78
73
72
72
72
72
71
72
72
71
72,50
2,01
0
0
0
0
0
1
0
1
0
1
0,30
0,48
35,26
37,00
37,85
38,07
37,48
38,28
38,23
37,93
37,95
37,26
37,5307
0,89757
CPU, átlag [%] 8. táblázat Ext4 fájlrendszeren, lemezen belül, több kis fájl másolása
22
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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.
35 30 25 20 15 10 5 0
12
8 6 4
Adat [MB]
10
2 0 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
Cpu [%]
Samba3, nagy méretű fálj olvasás
CPU [%]
Letöltött adat [MB]
2. ábra Samba3, nagy méretű fálj olvasás
Processzorhasználat átlag: 20,04 %, szórás: 4,84
23
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
70 60 50 40 30 20 10 0
12 8 6
4
Adat [MB]
10
2
CPU [%]
16:43:48
16:43:44
16:43:40
16:43:36
16:43:32
16:43:28
16:43:24
16:43:20
16:43:16
16:43:12
16:43:08
16:43:04
16:43:00
16:42:56
16:42:51
16:42:47
16:42:43
16:42:39
16:42:35
16:42:31
16:42:27
0 16:42:23
CPU [%]
Samba3, nagy méretű fálj írása
Feltöltött adat [MB]
3. ábra Samba3, nagy méretű fálj írása
Processzorhasználat átlag: 47,12 %, szórás: 4,8
12 10 8 6 4 2 0
Adat [MB]
30 25 20 15 10 5 0 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
CPU [%]
Samba3, több kis méretű fájl olvasása
CPU [%]
Letöltött adat [MB]
4. ábra Samba3, több kisméretű fájl olvasása
Processzorhasználat átlag: 17,07 %, szórás: 4,5
24
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
CPU [%]
Adat [MB]
16:39:50
16:39:46
16:39:42
16:39:38
16:39:34
16:39:30
16:39:26
16:39:22
16:39:17
16:39:13
16:39:09
16:39:05
16:39:01
16:38:57
16:38:53
16:38:49
16:38:45
16:38:41
16:38:37
16:38:33
12 10 8 6 4 2 0 16:38:29
70 60 50 40 30 20 10 0 16:38:25
CPU [%]
Samba3, több kis méretű fájl írása
Feltöltött adat [MB]
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
25
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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.
26
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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 opkglink 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
27
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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
6. ábra EDAQ530 bemeneti csatlakozó
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
28
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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)
29
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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.
30
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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
31
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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
Kommunikációs program
8
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
32
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
á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.
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
A
14
00001110
AB
12
00001100
ABC
8
00001000
B
13
00001101
BC
9
00001001
C
11
00001011
AC
10
00001010
0
15
00001111
Lehúzó ell. be.
Lehúzó ell. Ki.
10. táblázat Felhúzó ellenállás beállítás
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
33
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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.
34
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
9. ábra Folyamatábra
35
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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.
36
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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
37
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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 11. táblázat Kommunikációs beállítások
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
38
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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. (3) (
)
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
39
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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
40
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
Lehülési görbe 30
Hőmérséklet [°C]
25 20 15 10 5
2012-4-30 15:2:47 2012-4-30 15:2:60 2012-4-30 15:3:14 2012-4-30 15:3:27 2012-4-30 15:3:40 2012-4-30 15:3:54 2012-4-30 15:4:7 2012-4-30 15:4:20 2012-4-30 15:4:34 2012-4-30 15:4:47 2012-4-30 15:4:60 2012-4-30 15:5:14 2012-4-30 15:5:27 2012-4-30 15:5:40 2012-4-30 15:5:53 2012-4-30 15:6:7 2012-4-30 15:6:20 2012-4-30 15:6:33 2012-4-30 15:6:47 2012-4-30 15:6:60 2012-4-30 15:7:13 2012-4-30 15:7:27 2012-4-30 15:7:40 2012-4-30 15:7:53 2012-4-30 15:8:7 2012-4-30 15:8:20 2012-4-30 15:8:33 2012-4-30 15:8:47 2012-4-30 15:8:60 2012-4-30 15:9:13 2012-4-30 15:9:27
0
Idő 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ő.
41
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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
42
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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
43
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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.gargoylerouter.com/. [5] A. TAL, „NAND vs. NOR flash technology,” 2 január 2002. [Online]. Available: http://www2.electronicproducts.com/NAND_vs_NOR_flash_technology-articleFEBMSY1-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_filesystemsslides.pdf. [8] „Mini_fo,” [Online]. Available: http://www.denx.de/wiki/Know/MiniFOHome. [9] SquashFs. [Online]. Available: http://lxr.freeelectrons.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/EDAQ530hardware.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.uszeged.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.
44
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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
45
Alkalmazásfejlesztés és teljesítmény-optimalizálás linux alapú routeren
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.
46