Lxf78 hálózati eszköz illesztőprogram - a kezek

Annak ellenére, hogy a tanfolyam a bemutató, megpróbálom, hogy a szükséges magyarázatokat és hivatkozásokat a sikeres és helyes megértése a cikk anyag, az olvasó szüksége lesz néhány kezdeti tudást. Először is - ismerik a nyelvet ezenkívül C programozási, feltételezem, hogy az olvasó, hogy hogyan működik a számítógépes hálózatok, dolgozott a Linux operációs rendszer, és tudja, mit jelent a „core modul”.

Minden megadott példák a cikket - a munkások, és képviseli a szükséges kezdő lépéseit nagyon utat, hogy kell menni tanulni, hogyan kell létrehozni a különböző vezetők hálózati eszközök. Régebben Mandrake 10.1 eloszlású kernel 2.6.8.1-12mdk. Más változatban a kernel, akkor lehet, hogy néhány kisebb változtatásokat a forráskódot.

Ahhoz, hogy lefordítja a kernel modulokat után tipikus telepítés forgalmazás, akkor is kell telepíteni a forráskód a rendszermag a usr / src könyvtárba. A disztribúciómban kellett manuálisan kell elvégezni, mert akkor is, ha a kijelölt speciális telepítési lehetőségeket, és rámutatott annak szükségességét, hogy ez a forráskód a megfelelő helyen lennék, csak sűrű kernelforrásokat 2.4. A kívánt forrás elosztás található, a harmadik lemezt a mappa / media / main3 / a rpm-csomag: kernel-source-2.6-2.6.8.1-12mdk.i586.rpm. Ezek segítségével telepíthető a következő parancsot:

A telepítés kell tenni konzol módban a könyvtárat tartalmazó csomagot root.

A program megkezdése előtt a Tanács munkája létrehozni egy működő könyvtár / home / user /<что-нибудь>. melyik lesz az eredmény a szövegeket, és tegye a Makefile, elvitt a példa a javasolt környezet KDevelop fejlesztés, némileg módosított, saját működőképességének biztosítására (ó, ezek különösen a szabad szoftver!):

Befogadni ezt a fájlt, hogy illeszkedjen az Ön igényeinek, cserélje myname nevére a modult. Szerelje make parancsot.

Üdvözöljük a világ a Linux hackerek!

Mentse ezt a készüléket bármilyen fájl (például helloworld.c), hogy a szükséges változtatásokat a Makefile (lásd. Fent), majd futtassa tenni. A képernyőn meg kell jelennie:

A sikeres összeállítás a katalógusban készített fájlok száma, ahonnan már érdekeit saját objektummodul helloworld.ko. Töltse le a kapott modult a kernel akkor kell használni ezt a parancsot:

Ebben az esetben a modul lesz írva a lista a betöltött modulok a / proc / modules (ez ellenőrizhető a cat / proc / modules paranccsal | grep helloworld). Ezen túlmenően, a kezdeti funkció ssl_init_module (void) indul. hívórendszer funkció printk (). amelynek célja a naplózás és a figyelmeztetések kernel módban. Nem fogjuk vizsgálni részletesen munkájában ezt a funkciót, akkor vegye figyelembe, csak azt, hogy mint argumentum egy üzenetet «Helló Világ!» A modult betöltése után kell nézni a fájl a / var / log / messages. ahol (ha konfigurálva démon syslog) küldött legtöbb jelentés jön ki a sejtmagban. A kényelem nyomon a kialakuló új üzenetek a fájllal, akkor a parancs

Ha figyelmen kívül hagyta a tanácsot tapasztalt és még mindig fejlődő kernelmodulokat grafikus környezetben, célszerű futtatni egy külön terminál ablak, ami egyfajta „kommunikációs konzol.”

Vegye ki a modult a kernel, akkor használja a következő parancsot:

Ebben az esetben, futás a konzol üzenetek figyelhető meg, mint az egység búcsút a világ minden ugyanaz „az elérhető vele.”

Matrix kapcsolat

A következő lépés az utunkon, hogy hozzon létre egy egyszerű hálózati meghajtó modul. Ebből a célból a modul kell adnunk egy adatstruktúra struct net_device hálózati meghajtó. meghatározását, amely a header fájlban /usr/include/linux/netdevice.h. A szerkezet által képviselt funkciók és területek, amelyek számunkra a legfontosabbak a következők:
• char name [IFNAMSIZ] - tartalmazza a nevét, a felület jelenik meg, amikor beállítja a hálózati alrendszer.
• int (* nyitott) (struct net_device * dev) - a funkció, amely akkor aktiválódik, ha az ifconfig aktiválja a közüzemi felületen.
• int (* stop) (struct net_device * dev) - a funkció, amely akkor aktiválódik, ha a stop felületen.
• int (* hard_start_xmit) (struct sk_buff * SKB, struct net_device * dev) - a funkció, amely aktiválja a hálózati alrendszer minden alkalommal átvinni kívánt adatcsomag.
• struct net_device_stats * (* get_stats) (struct net_device * dev) -, hogy a funkció meghívásra kerül, valahányszor egy olyan alkalmazás megkísérli megszerezni statisztikát a adatinterfész.
• void * priv - további mutatót, amely felhasználható önkényesen.

A többi mező és funkciókat biztosít a vezető további lehetőségeket, hogy most már nem lehet figyelembe venni. Céljuk megtalálható kézikönyvekben. Meg kell jegyezni, hogy azonnal az érkező adat fogadását a hálózati eszköz általában akkor fordul elő megszakítja, a felvezető és a kifejezetten hivatkozik e felvezető nem tartalmazza a szerkezet a felület.

Meg kell, hogy töltse ki a szükséges terepmunkát a vezető számára. Ha a mező egy mutató a funkció - azt kell végrehajtani ezt a funkciót. A vezető, definiáljuk az inicializálási funkció (nyitott). megálló (stop) és az adatok (hard_start_xmit). továbbá meghatározzák szerkezet net_device_stats. amelynek tartalmát fogjuk átvészelni egy további mutató (priv).

Annak érdekében, hogy a rendszer felismeri, hogy egy betölthető modul a vezető hálózati eszköz, amikor betölti a modult dozhen mesélj neki ez a különleges funkció register_netdev (). Az ő mentesítés funkció modul jelentések unregister_netdev (). Mivel érv ezen funkciók vezetjük egy mutatót a adatszerkezetét járművezetők.

Elindítani a hálózati interfész alrendszer vezetőnek meg kell használni a különleges funkció netif_start_queue (). ha abbahagyja - netif_stop_queue () függvényt. egy érv, amely szintén egy mutatót a vezető szerkezet.

Ha szükséges, adatátviteli keresztül a hálózati operációs rendszer okozza interfész hard_start_xmit () függvény egy mutató egy puffer (sk_buff) vezetjük, mint egy érv. amely egy kész-IP-datagram. A hívott függvény kell tennie minden, ami szükséges, hogy küldjön egy datagram egy hálózati eszközhöz történő továbbítására a fizikai rétegen, majd megmondja a rendszernek, hogy a csomagot továbbítjuk meghívásával dev_kfree_skb (). egy érv, amely egy mutató a puffer nyert OS. Az átviteli ciklus a vezető befejeződik, a rendszer képes kitölteni a puffer új adatokkal meglazult, és a sofőr megvárja a következő szállítási és egy mutató a puffer kész.

Ahogy a sofőr még nem jár semmilyen eszközt az átviteli függvény, hogy elbírja a továbbított adatokat saját puffert (my_buf). és regisztrálja ezeket az adatokat formájában üzeneteket printk () függvénnyel. Hogy képviselje a rögzített adatokat szöveges formában bemutatjuk a programot támogató funkciók tpdumpk () és printAddr ().

Azt, hogy mi a szöveg, még a legegyszerűbb, de a hálózati meghajtó:

Ahhoz, hogy töltenie és kezdeti vezetők összeállított kényelmes a használata egy kis szkript, amelynek szövege az alábbiakban olvasható:

Delay (sleep 1) van szükség annak érdekében, hogy a rendszer nem volt ideje, hogy regisztrálja a modult, és kész volt inicializálni a felületet a benyújtás időpontjában a ifconfig paranccsal. Miután letöltötte és inicializálása sofőrünk a képernyőn megjelenik az a szöveg (információ más hálózati interfészek elhagytuk a helytakarékosság):

Ha a számítógép csatlakozik az internethez, mielőtt elküldené a adataink felület, ügyeljen arra, hogy ne zavarja a számítógép beállításait. Konfigurálja a tűzfalat (tűzfal), figyelembe véve a kialakult egy új alhálózat, vagy akár kapcsolja ki hibakeresés közben (különösen óvatos egyidejűleg lehet kikapcsolni, és az interneten).

Ahhoz, hogy teszteljük a felület alkalmassága futtatásához szükséges egy külön konzol parancsot tail -f / var / log / messages meg az aktuális üzenetet a mag és a munkavégzés konzol parancsot használjuk:

Így próbálják az ICMP-csomagokat egy nem létező felületen, amely elérhető a vezető. Mint egy interfész, például a funkciók adatgyűjtő sofőrünk még az operációs rendszereket küldött csomagokat fog veszni. De nem nekünk! Minden továbbított csomagok dokumentálni kell a / var / log / messages. és ez látható a konzol hasonló üzenet a következő:

Ha a számítógép úgy van beállítva, hogy a munka egy hálózathoz, akkor valószínűleg azt találjuk, hogy időről időre a felületen fogadja és broadcast csomagok, amelyek könnyen megtalálható a monoton háttérben irányítják.

A következő feladat - tanítani vezetők az adatok fogadására és elküldi azokat a hálózati alrendszer Linux. Ehhez bevezetjük a kívánt funkciót, majd lépjen kapcsolatba a hardver eszköz, amely ellenőrzi az adatátvitel kábelen keresztül. Mivel egy ilyen eszköz, akkor használja a COM portot a számítógépen. Így kapunk egy hasonló program a híres SLIP driver. Persze, a sofőr nem fogja támogatni mindazokat a funkciókat a híres prototípus, de sokkal könnyebb lesz, és nem igényel semmilyen bonyolult démonokat. Mindez azonban lesz a következő rész. Ne hagyja ki!

. hasznos linkek

Kapcsolódó cikkek