# Ethernut

Ethernut ist ein Open-Source-Hardware- und Software-Projekt zum Betrieb von Embedded-Ethernet-Systemen und wird überwiegend im Forschungsbereich und in industriellen Anwendungen eingesetzt.

## Entwicklungsgeschichte

Nach der rasanten Entwicklung des Internets als Kommunikationsmedium für menschliche Benutzer erschien vielen Entwicklern die Idee eines Internets der Dinge als logische Weiterentwicklung. So entstanden um das Jahr 2000 mehrere freie und kommerzielle Projekte mit dem Ziel, eingebettete Systeme in bestehende TCP/IP-Netze zu integrieren. Die Herausforderung bestand darin, dass die zu dieser Zeit üblichen 8-Bit-Mikroprozessoren selten über mehr als 64 Kilobyte Speicher verfügten. So veröffentlichte der britische Entwickler Dave Hudson im Jahr 2000 den offenen Quellcode eines Echtzeitbetriebssystemkerns mit integrierten TCP/IP-Stack unter dem Namen Liquorice.
Ein weiteres Problem bestand darin, dass es zu dieser Zeit kaum geeignete Hardware gab. Unter anderem waren fast alle verfügbaren Netzwerk-Controller mit PCI-Bus für einfache Mikrocontroller ungeeignet. Für die Mikrocontroller-Familie Atmel AVR existierte bereits eine große Zahl freier Entwicklungswerkzeuge und so wurde im Jahr 2001 ein erstes Board auf Basis des ATmega103 und einem veralteten, aber noch in Produktion befindlichen, Ethernet-Controller mit ISA-Bus unter BSD-Lizenz veröffentlicht. Es zählt damit zu den Pionieren freier Hardware.
Hudson stellte die Arbeit an Liquorice nach einem Jahr ein. Der Quellcode wurde in das neu gegründete Projekt Ethernut übernommen, um die freie Hardware und Software zusammenzuführen. Nach ersten Veröffentlichungen im Entwicklerforum AVR Freaks wechselte das Projekt im Jahr 2002 zum Webportal SourceForge.

## Hardware

2015 waren vier verschiedene Referenz-Designs (Ethernut 1, Ethernut 2, Ethernut 3 und Ethernut 5) als betriebsbereit aufgebaute Platinen erhältlich.
In allen Ausführungen sind die gleichen funktionellen Baugruppen enthalten:
* Ethernet-Schnittstelle
* RS232-Schnittstelle
* Stromversorgung
* Nahezu alle I/O-Pins des Mikrocontrollers verfügbar
Die Designs unterscheiden sich vor allem im verwendeten Mikrocontroller (Ethernut 1 & 2: 8-bit AVR, Ethernut 3 & 5: 32-bit Arm) und der Speicherverfügbarkeit. So ist ab dem Ethernut 3 ein Slot für MMC-Speicherkarten verfügbar.

## Software
### Nut/OS

Das Betriebssystem für die Boards heißt Nut/OS. Es ist ein modulares Echtzeitbetriebssystem, das unter der BSD-Lizenz veröffentlicht ist.
Merkmale:
* Kooperatives Multithreading
* Garantierte Interrupt-Antwortzeiten
* Priorisierte Ereignisbehandlung
* Verschiedene konfigurierbare Timer
* Dynamische Speicherverwaltung
* Techniken zur Prozesssynchronisation
* Gute Portierbarkeit auf andere Architekturen

### Nut/Net

Der Netzwerk-Stack der Ethernut-Software heißt Nut/Net. Er stellt eine umfangreiche API für verschiedene Protokolle zur Verfügung.
Unterstützte Protokolle:
* Ethernet
* ARP
* IP
* ICMP
* UDP
* TCP
* PPP
* DHCP
* DNS
* SNTP
* SNMP
* FTP
* TFTP
* Syslog
* HTTP
* WINS (Subset)

### Konfiguration und Anwendungen

Die Einrichtung von Nut/OS und Nut/Net ist denkbar einfach. Nach dem Herunterladen der Dateien wird ein Konfigurationswerkzeug ausgeführt, welches nach wenigen Einstellungen die Bibliotheken für die ausgewählte Hardware erstellt.
Bei der Programmierung der Anwendung in C werden nun die Bibliotheken von Nut/OS und Nut/Net benutzt. Zusätzlich steht dem Anwendungsprogrammierer die C-Standardbibliothek zur Verfügung. Neben C wird C++ weitestgehend unterstützt. Des Weiteren existiert ein Lua-Interpreter, so dass Lua-Skripte auf dem Board ausgeführt werden können.
Ethernut liefert eine Vielzahl von einfach gehaltenen Beispielprogrammen mit, um den Einstieg in Nut/OS zu erleichtern.

### Unterstützte Architekturen

* Atmel AVR (z. B.: ATmega103, ATmega128, ATmega2561, AT90CAN128 u. a.)
* Atmel AVR32 (z. B.: AT32UC3A, AT32UC3B u. a.)
* ARM7 (z. B.: AT91R40008, AT91SAM7X, LPC-E2294, Game Boy Advance u. a.)
* ARM9 (z. B.: AT91SAM9260, AT91SAM9XE u. a.)
* ARM Cortex M (z. B. STM32, LPC17)
Folgende Architekturen werden zwar prinzipiell unterstützt, werden aber aktuell nicht aktiv gewartet:
* H8/300
* Motorola 68000

### Bluetooth Stack

Die Forschungsgruppe für verteilte Systeme der ETH Zürich hat ein verteiltes Sensornetz mit Sensorknoten auf AVR-Basis entwickelt. Diese Sensorknoten kommunizieren über Bluetooth miteinander. Als Softwarebasis wird der Open-Source-Bluetooth-Stack BTNut verwendet. Der BTNut-Stack basiert auf Nut/OS und erweitert es um Bluetooth-Funktionalität. Obwohl der BTNut-Stack in erster Linie für die BTNode-Sensorknoten entwickelt wurde, lässt sich der Bluetooth-Stack auch auf andere Applikationen portieren.

## Verbreitung

Durch die frühe Verfügbarkeit und das offene Konzept der Hardware stießen Ethernut-Boards zunächst im Forschungsbereich auf Interesse, wo man sich mit verschiedenen Aspekten des Ubiquitous Computing auseinandersetzte. Unter anderem diente es als erste eingebettete Plattform für Contiki. Die freizügige Lizenz macht aber auch den kommerziellen Einsatz unkomplizierter und sowohl Hardware als auch Software fanden Einzug in zahlreiche Produkte.
Laut eigener Aussage verkaufte der deutsche Hersteller, die egnite GmbH, bisher ca. 33.000 Ethernuts (Stand: Dezember 2013). Weitere Hersteller kompatibler Hardware sind Achatz electronics (Niederlande), proconX (Australien), Propox (Polen), SOC Robotics (Kanada), HW group s.r.o. (Tschechien), thermotemp Embedded-IT (Deutschland). Des Weiteren wird das Nut/OS-Betriebssystem als Basis für das BTNode-Sensornetz der ETH Zürich verwendet.

## Ähnliche Geräte

* Arduino
* Banana Pi
* BeagleBoard
* Cubieboard
* Intel Galileo
* Orange Pi
* PandaBoard
* Raspberry Pi
* Tinkerforge