Operating Systems Principles SS2005: Difference between revisions

From
Jump to navigation Jump to search
No edit summary
m (Operating Systems Principles moved to Operating Systems Principles SS2005)
 
(41 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 Firmware durch eine eigene ausgetauscht (OpenWRT). Nähere Informationen
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 13: Line 13:


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).
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=
=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 WLan-Router der Firma Linksys (WRT54GS) entwickeln.
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):

Infrastructure of WRT lab network

Netzwerktopologie

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
    • Quick Introduction ([1] )
    • Eddie Kohler, Robert Morris, Benjie Chen, John Jannotti, Frans Kaashoek. The Click Modular Router. ([2] )
    • Eddie Kohler. The Click Modular Router (Thesis). ([3] )
  • Distributed Hash Tables

Informationen zum SVN-Repository

Hacking the Netgear wgt634u