Operating Systems Principles SS2005: Difference between revisions
No edit summary |
m (Operating Systems Principles moved to Operating Systems Principles SS2005) |
||
(39 intermediate revisions by 9 users not shown) | |||
Line 2: | Line 2: | ||
Bei den Knoten in unserem Mesh-Netzwerk handelt es sich um Router der Firma Linksys (WRT54GS). |
Bei den Knoten in unserem Mesh-Netzwerk handelt es sich um Router der Firma Linksys (WRT54GS). |
||
Hierbei haben wir die vorhandene Firmware durch |
Hierbei haben wir die vorhandene Firmware durch OpenWrt http://openwrt.org ausgetauscht. |
||
finden Sie dabei unter [[Programming_the_Linksys_WRT54GS_Wireless_Broadband_Router]]. |
Nähere Informationen finden Sie dabei unter [[Programming_the_Linksys_WRT54GS_Wireless_Broadband_Router]]. |
||
Für das Praktikum sei folgende sehr einfache Netztopologie für eine Multi-Hop Mesh-Netzwerk |
Für das Praktikum sei folgende sehr einfache Netztopologie für eine Multi-Hop Mesh-Netzwerk |
||
Line 14: | Line 14: | ||
Erkennbar hierbei ist, dass Knoten WRT1 direkt mit Knoten WRT2, jedoch nicht direkt mit Knoten WRT3 |
Erkennbar hierbei ist, dass Knoten WRT1 direkt mit Knoten WRT2, jedoch nicht direkt mit Knoten WRT3 |
||
kommunizieren kann (er benötigt die Hilfe von Knoten WRT2). Als Routing-Protokoll haben wir das |
kommunizieren kann (er benötigt die Hilfe von Knoten WRT2). Als Routing-Protokoll haben wir das |
||
Dynamic Source Routing ( |
Dynamic Source Routing (http://www-2.cs.cmu.edu/~dmaltz/dsr.html ) Protokoll auf Layer 2 (Sicherungsschicht) |
||
verwendet werden. |
prototypisch implementiert. Dieses soll auch im Praktikum verwendet werden. |
||
Der Zugriff auf die Router erfolgt über telnet: |
|||
zubow@linux:~> telnet wrt1 |
|||
=Lab 1: Cross-Compilation= |
=Lab 1: Cross-Compilation= |
||
Dieses Praktikum soll Ihnen einen Einblick in die Entwicklung von Software für Embedded Devices |
Dieses Praktikum soll Ihnen einen Einblick in die Entwicklung von Software für Embedded Devices |
||
(Cross-Compilation) geben. Hierbei werden Sie mit Hilfe von OpenWrt Software für WRT54GS entwickeln. |
|||
Zu diesem Zweck haben wir eine Linux-Entwicklungsumgebung (Toolchain, ect.) aufgebaut. Nähere |
|||
Informationen dazu finden Sie unter [[Using_StandardizedDevelopmentEnvironment]]. |
|||
Für das Praktikum kann die Toolchain wie folgt gebaut und verwendet werden: |
|||
== OpenWrt-Quellen == |
|||
Die Quellen des OpenWRT-Projektes können über cvs abgerufen werden: |
|||
cvs -d:pserver:anonymous@openwrt.org:/openwrt login |
|||
cvs -d:pserver:anonymous@openwrt.org:/openwrt co buildroot |
|||
== Benötigte Tools/Bibliotheken == |
|||
Damit sich die Toolchain übersetzen lässt, werden die folgenden Tools bzw. Bibliotheken benötigt: |
|||
* wget, tftp |
|||
* cvs, subversion |
|||
* gcc, gcc-c++, bison, flex |
|||
* patch, gettext |
|||
* autoconf, automake |
|||
* zlib-devel |
|||
== OpenWRT-Build-Prozess == |
|||
Für die spätere Verwendung von Click wird ein C++-Compiler benötigt. Daher ist die folgende |
|||
Änderung im ''$OPENWRT/buildroot/Makefile'' vorzunehmen: |
|||
INSTALL_LIBSTDCPP:=true |
|||
Sollten alle benötigten Bibliotheken vorliegen, so kann OpenWRT mit Hilfe von make gebaut werden: |
|||
linux:/home/wrt/buildroot/# make |
|||
Hinweis: Der initiale Build-Prozess ist sehr zeitaufwändig. |
|||
== Andere Ansätze == |
|||
Verwendung von [[CrossTool]] |
|||
== Zugriff vom WRT auf Bibliotheken/Tools == |
|||
Der (Flash-)Speicher auf den WRTs ist nicht nur limitiert, sondern auch extrem langsam. Für den |
|||
Entwicklungsprozess kann man auf den WRTs Verzeichnisse via NFS mounten: |
|||
@wrt1:/# mount MY_NFS_SERVER:/share/ /mnt/share -o nolock |
|||
== Datenbank compilieren == |
|||
Da das configure - Skript von der Datenbank buggy ist, zunächst ein Patch dafür: |
|||
http://www.informatik.hu-berlin.de/~sborcher/sar/db.patch |
|||
Diesen Patch in das Verzeichnis src kopieren. |
|||
Anschließend das Makefile für die Datenbank in das Verzeichnis make kopieren: |
|||
http://www.informatik.hu-berlin.de/~sborcher/sar/db.mk |
|||
(wie quotet man ein tab-erhaltendes Makefile in ein Wiki?) |
|||
Anschliessend ein make DB. |
|||
2.Lösung |
|||
Im Rahmen des Praktikums entstand eine 2.Lösung. Das Patchen |
|||
des Configure-Skriptes ist nicht unbedingt nötig. Der Patch entfernt alles was |
|||
mit libpthread zu tun hat, da die ulibc diese Funktionen schon bieten. Die libpthread |
|||
lässt sich jedoch via ipkg installieren und so ist der Patch nicht nötig, |
|||
Die 2.Lösung patcht das Makefile.in, da Pfadangeben für das Target "make uninstall" |
|||
fehlerhaft sind (DEST_DIR wird nicht beachtet). |
|||
Das Makefile bdb.mk enthält ausserdem das ziel bdb-ipkg mit dem es möglich ist ein |
|||
ipkg-Packet zu erstellen. |
|||
Die nötigen Dateien sind zu finden unter: |
|||
http://www.informatik.hu-berlin.de/~sombrutz/openwrt |
|||
(bdb.mk und db_4.3.28.NC-Makefile.in.patch) |
|||
== IPKG == |
|||
Die portierte Berkley-DB sollte als ipkg-File von der URL http://sar.informatik.hu-berlin.de/research/roofnet/ipkg/ |
|||
heruntergeladen werden können. |
|||
=Lab 2: Click= |
|||
http://www.pdos.csail.mit.edu/click/click.gif |
|||
[[ClickModularRouter|Click]] ist ein vom MIT entwickelter modularer Software-Router. |
|||
Mit Hilfe der umfangreichen Click-API lassen sich schnell neue Router-Konfigurationen entwickeln. |
|||
Auch wir werden uns bei der Entwicklung auf Click stützen. |
|||
Um Click mit Hilfe von OpenWRT zu bauen, muss das Makefile click.mk in das |
|||
''$OPENWRT/buildroot/make''-Verzeichnis kopiert werden: |
|||
############################################################# |
|||
# |
|||
# click |
|||
# |
|||
############################################################# |
|||
CLICK_DIR:=$(BUILD_DIR)/click |
|||
click-source: $(CLICK_DIR)/.unpacked |
|||
$(CLICK_DIR)/.unpacked: $(DL_DIR)/$(CLICK_SOURCE) |
|||
(cd $(BUILD_DIR); \ |
|||
svn co svn://merkur.sardmn.informatik.hu-berlin.de/brn/click) |
|||
touch $(CLICK_DIR)/.unpacked |
|||
$(CLICK_DIR)/.configured: $(CLICK_DIR)/.unpacked |
|||
(cd $(CLICK_DIR); rm -rf config.cache; \ |
|||
$(TARGET_CONFIGURE_OPTS) \ |
|||
CFLAGS="$(TARGET_CFLAGS)" \ |
|||
AR_CREATEFLAGS="cru" \ |
|||
./configure \ |
|||
--build=i686-pc-linux-gnu \ |
|||
--host=mipsel-linux \ |
|||
--disable-linuxmodule \ |
|||
--enable-brn \ |
|||
--enable-wifi \ |
|||
--enable-tools=mixed \ |
|||
); |
|||
touch $(CLICK_DIR)/.configured |
|||
$(CLICK_DIR)/click: $(CLICK_DIR)/.configured |
|||
$(MAKE) CC=$(TARGET_CC) -C $(CLICK_DIR) |
|||
$(TARGET_DIR)/usr/bin/click: $(CLICK_DIR)/click |
|||
install -c $(CLICK_DIR)/userlevel/click $(TARGET_DIR)/usr/bin/click |
|||
$(STRIP) $(TARGET_DIR)/usr/bin/click > /dev/null 2>&1 |
|||
click: uclibc $(TARGET_DIR)/usr/bin/click |
|||
click-clean: |
|||
$(MAKE) -C $(CLICK_DIR) clean |
|||
rm -rf $(TARGET_DIR)/usr/bin/click |
|||
click-dirclean: |
|||
rm -rf $(CLICK_DIR) |
|||
Anschließend kann Click über den Aufruf: |
|||
linux:/home/wrt/buildroot/# make click |
|||
gebaut werden. |
|||
=Lab 3: Address Resolution Protocol (ARP)= |
|||
Das ARP-Protokoll ( http://www.erg.abdn.ac.uk/users/gorry/course/inet-pages/arp.html ) wird vom |
|||
Internet-Protokoll (IPv4) dazu verwendet IP-Netzwerkadressen auf Hardware-Addressen |
|||
(Data-Link-Protocol) abzubilden. Hierbei wird in aller Regel eine Anfrage mit Hilfe eines Broadcasts (ARP-Request) |
|||
realisiert. Im Falle eines Multi-Hop Mesh-Netzwerkes ist dies jedoch keine praktikable Lösung. Eine Lösung hierfür |
|||
könnten die aus dem Bereich der P2P-Netzwerke bekannten Distributed Hashtables |
|||
( http://www.infoanarchy.org/wiki/index.php/Distributed_hash_table ) darstellen. |
|||
=Durchführung des Praktikums= |
|||
Folgende Fragestellungen bzw. Aktivitäten sind im Rahmen des Praktikums zu klären bzw. durchzuführen: |
|||
*Welche Besonderheiten sind bei der Realisierung von ARP in AdHoc-Mesh-Netzwerken zu beachten? |
|||
*Wie können Informationen in einem solchen Netzwerk gespeichert werden? |
|||
**Dezentrale Speicherung (siehe Distributed Hashtable) |
|||
**Redundante Speicherung |
|||
**generisches Interface zu einer DHT (APIs) |
|||
**Eigenentwicklung vs. Verwendung einer bereits vorhandenen Bibliothek |
|||
*Welche Anforderungen werden an einen ARP-Proxy gestellt? |
|||
*Fallback-Strategien (Broadcast?) |
|||
*Transparenz des ARP-Dienstens |
|||
*Selbstorganisation (keine manuellen Vorgänge) |
|||
=Suggested Readings= |
|||
* Click |
|||
** Quick Introduction ([http://www/teaching/_previous-years/2004-w%20BerlinRoofNet%20Research%20Seminar/presentations/040-click_modular_router.pdf] ) |
|||
** Eddie Kohler, Robert Morris, Benjie Chen, John Jannotti, Frans Kaashoek. The Click Modular Router. ([http://www/teaching/2005-s%20BerlinRoofNet%20Research%20Seminar/readings/click_modular_router.pdf] ) |
|||
** Eddie Kohler. The Click Modular Router (Thesis). ([http://www/teaching/2005-s%20BerlinRoofNet%20Research%20Seminar/readings/click_modular_router_in_detail.pdf] ) |
|||
* Distributed Hash Tables |
|||
** [DHT [http://www.informatik.hu-berlin.de/~ccarsten/DHT/]] |
|||
==Informationen zum SVN-Repository== |
|||
[[Hacking the Netgear wgt634u]] |
Latest revision as of 08:18, 12 April 2006
Lab 0: Hardware
Bei den Knoten in unserem Mesh-Netzwerk handelt es sich um Router der Firma Linksys (WRT54GS). Hierbei haben wir die vorhandene Firmware durch OpenWrt http://openwrt.org ausgetauscht. Nähere Informationen finden Sie dabei unter Programming_the_Linksys_WRT54GS_Wireless_Broadband_Router.
Für das Praktikum sei folgende sehr einfache Netztopologie für eine Multi-Hop Mesh-Netzwerk gegeben (siehe Abbildung):
Erkennbar hierbei ist, dass Knoten WRT1 direkt mit Knoten WRT2, jedoch nicht direkt mit Knoten WRT3 kommunizieren kann (er benötigt die Hilfe von Knoten WRT2). Als Routing-Protokoll haben wir das Dynamic Source Routing (http://www-2.cs.cmu.edu/~dmaltz/dsr.html ) Protokoll auf Layer 2 (Sicherungsschicht) prototypisch implementiert. Dieses soll auch im Praktikum verwendet werden.
Der Zugriff auf die Router erfolgt über telnet:
zubow@linux:~> telnet wrt1
Lab 1: Cross-Compilation
Dieses Praktikum soll Ihnen einen Einblick in die Entwicklung von Software für Embedded Devices (Cross-Compilation) geben. Hierbei werden Sie mit Hilfe von OpenWrt Software für WRT54GS entwickeln. Zu diesem Zweck haben wir eine Linux-Entwicklungsumgebung (Toolchain, ect.) aufgebaut. Nähere Informationen dazu finden Sie unter Using_StandardizedDevelopmentEnvironment.
Für das Praktikum kann die Toolchain wie folgt gebaut und verwendet werden:
OpenWrt-Quellen
Die Quellen des OpenWRT-Projektes können über cvs abgerufen werden:
cvs -d:pserver:anonymous@openwrt.org:/openwrt login cvs -d:pserver:anonymous@openwrt.org:/openwrt co buildroot
Benötigte Tools/Bibliotheken
Damit sich die Toolchain übersetzen lässt, werden die folgenden Tools bzw. Bibliotheken benötigt:
- wget, tftp
- cvs, subversion
- gcc, gcc-c++, bison, flex
- patch, gettext
- autoconf, automake
- zlib-devel
OpenWRT-Build-Prozess
Für die spätere Verwendung von Click wird ein C++-Compiler benötigt. Daher ist die folgende Änderung im $OPENWRT/buildroot/Makefile vorzunehmen:
INSTALL_LIBSTDCPP:=true
Sollten alle benötigten Bibliotheken vorliegen, so kann OpenWRT mit Hilfe von make gebaut werden:
linux:/home/wrt/buildroot/# make
Hinweis: Der initiale Build-Prozess ist sehr zeitaufwändig.
Andere Ansätze
Verwendung von CrossTool
Zugriff vom WRT auf Bibliotheken/Tools
Der (Flash-)Speicher auf den WRTs ist nicht nur limitiert, sondern auch extrem langsam. Für den Entwicklungsprozess kann man auf den WRTs Verzeichnisse via NFS mounten:
@wrt1:/# mount MY_NFS_SERVER:/share/ /mnt/share -o nolock
Datenbank compilieren
Da das configure - Skript von der Datenbank buggy ist, zunächst ein Patch dafür:
http://www.informatik.hu-berlin.de/~sborcher/sar/db.patch
Diesen Patch in das Verzeichnis src kopieren.
Anschließend das Makefile für die Datenbank in das Verzeichnis make kopieren:
http://www.informatik.hu-berlin.de/~sborcher/sar/db.mk
(wie quotet man ein tab-erhaltendes Makefile in ein Wiki?)
Anschliessend ein make DB.
2.Lösung
Im Rahmen des Praktikums entstand eine 2.Lösung. Das Patchen des Configure-Skriptes ist nicht unbedingt nötig. Der Patch entfernt alles was mit libpthread zu tun hat, da die ulibc diese Funktionen schon bieten. Die libpthread lässt sich jedoch via ipkg installieren und so ist der Patch nicht nötig, Die 2.Lösung patcht das Makefile.in, da Pfadangeben für das Target "make uninstall" fehlerhaft sind (DEST_DIR wird nicht beachtet). Das Makefile bdb.mk enthält ausserdem das ziel bdb-ipkg mit dem es möglich ist ein ipkg-Packet zu erstellen.
Die nötigen Dateien sind zu finden unter: http://www.informatik.hu-berlin.de/~sombrutz/openwrt (bdb.mk und db_4.3.28.NC-Makefile.in.patch)
IPKG
Die portierte Berkley-DB sollte als ipkg-File von der URL http://sar.informatik.hu-berlin.de/research/roofnet/ipkg/ heruntergeladen werden können.
Lab 2: Click
http://www.pdos.csail.mit.edu/click/click.gif
Click ist ein vom MIT entwickelter modularer Software-Router. Mit Hilfe der umfangreichen Click-API lassen sich schnell neue Router-Konfigurationen entwickeln. Auch wir werden uns bei der Entwicklung auf Click stützen.
Um Click mit Hilfe von OpenWRT zu bauen, muss das Makefile click.mk in das $OPENWRT/buildroot/make-Verzeichnis kopiert werden:
############################################################# # # click # ############################################################# CLICK_DIR:=$(BUILD_DIR)/click click-source: $(CLICK_DIR)/.unpacked $(CLICK_DIR)/.unpacked: $(DL_DIR)/$(CLICK_SOURCE) (cd $(BUILD_DIR); \ svn co svn://merkur.sardmn.informatik.hu-berlin.de/brn/click) touch $(CLICK_DIR)/.unpacked $(CLICK_DIR)/.configured: $(CLICK_DIR)/.unpacked (cd $(CLICK_DIR); rm -rf config.cache; \ $(TARGET_CONFIGURE_OPTS) \ CFLAGS="$(TARGET_CFLAGS)" \ AR_CREATEFLAGS="cru" \ ./configure \ --build=i686-pc-linux-gnu \ --host=mipsel-linux \ --disable-linuxmodule \ --enable-brn \ --enable-wifi \ --enable-tools=mixed \ ); touch $(CLICK_DIR)/.configured $(CLICK_DIR)/click: $(CLICK_DIR)/.configured $(MAKE) CC=$(TARGET_CC) -C $(CLICK_DIR) $(TARGET_DIR)/usr/bin/click: $(CLICK_DIR)/click install -c $(CLICK_DIR)/userlevel/click $(TARGET_DIR)/usr/bin/click $(STRIP) $(TARGET_DIR)/usr/bin/click > /dev/null 2>&1 click: uclibc $(TARGET_DIR)/usr/bin/click click-clean: $(MAKE) -C $(CLICK_DIR) clean rm -rf $(TARGET_DIR)/usr/bin/click click-dirclean: rm -rf $(CLICK_DIR)
Anschließend kann Click über den Aufruf:
linux:/home/wrt/buildroot/# make click
gebaut werden.
Lab 3: Address Resolution Protocol (ARP)
Das ARP-Protokoll ( http://www.erg.abdn.ac.uk/users/gorry/course/inet-pages/arp.html ) wird vom Internet-Protokoll (IPv4) dazu verwendet IP-Netzwerkadressen auf Hardware-Addressen (Data-Link-Protocol) abzubilden. Hierbei wird in aller Regel eine Anfrage mit Hilfe eines Broadcasts (ARP-Request) realisiert. Im Falle eines Multi-Hop Mesh-Netzwerkes ist dies jedoch keine praktikable Lösung. Eine Lösung hierfür könnten die aus dem Bereich der P2P-Netzwerke bekannten Distributed Hashtables ( http://www.infoanarchy.org/wiki/index.php/Distributed_hash_table ) darstellen.
Durchführung des Praktikums
Folgende Fragestellungen bzw. Aktivitäten sind im Rahmen des Praktikums zu klären bzw. durchzuführen:
- Welche Besonderheiten sind bei der Realisierung von ARP in AdHoc-Mesh-Netzwerken zu beachten?
- Wie können Informationen in einem solchen Netzwerk gespeichert werden?
- Dezentrale Speicherung (siehe Distributed Hashtable)
- Redundante Speicherung
- generisches Interface zu einer DHT (APIs)
- Eigenentwicklung vs. Verwendung einer bereits vorhandenen Bibliothek
- Welche Anforderungen werden an einen ARP-Proxy gestellt?
- Fallback-Strategien (Broadcast?)
- Transparenz des ARP-Dienstens
- Selbstorganisation (keine manuellen Vorgänge)
Suggested Readings
- Click
- Distributed Hash Tables
- [DHT [4]]