Entwicklung

Aus NAS-4220

Wechseln zu: Navigation, Suche

RaidSonic hat mit den Beispielpaketen und dem Paket HowTo eine Basis geschaffen für eigene Entwicklungen. Hier seien noch ein paar weitere Hintergründe erleutert.

Leider hat noch niemand dokumentiert, wie man eigene Programme gegen die Libraries der NAS4220-B-Firmware kompiliert! BITTE HELFT MIT UND DOKUMENTIERT DAS HIER, DAMIT WIR ENDLICH EIGENE SOFTWARE ERSTELLEN KÖNNEN!!! Ideal wäre ein HelloWorld-Programm mit Anleitung, wie man das kompiliert...

Inhaltsverzeichnis

Offene Fragen

  • Welche Tool-Chain benötigt man zum Kompilieren für die NAS-4220B?
  • Kompiliert man mit uCLibc, (E)ABI...?
  • Wie kompiliert man ein eigenes Programm, ohne die ganze Firmware aus den Sourcen von Raidsonic kompilieren zu müssen (kann jemand ein "HelloWorld" beschreiben)?


Dokumentationen

Offizielle Dokumentationen

von Raidsonic sind auf der Seite Entwickler-Dokumentation gesammelt.

Das lesen dieser Dokumentation wird dringend empfohlen, da viele Fragen hier bereits beantwortet werden.

Ebenso sind die offiziellen Dokumentationen von Cobalt dort gesammelt.

Anleitungen von Dritten

gibt es auch zahlreiche, z. B.:

Quellcode der NAS4220-B

Raidsonic stellt auf der Service-Seite der Homepage sowohl den Quellcode des Embedded Linux als auch des Boot-Loaders RedBoot zum Download zur Verfügung!

[Seit November 2008 gibt es auch fehlerbereinigte offene Kernelquellen http://sourceforge.net/projects/gemini-board/]


Entwicklungs-Werkzeuge

Die folgenden Entwicklungs-Umgebung kommen in Frage (bisher nicht getestet!), um Quellcode in ausführbare Binaries für die NAS-4220B zu übersetzen.

ScratchBox

ScratchBox wird für die Entwicklung empfohlen, da es funktioniert.

Ein umfangreiches HowTo wurde vom Forennutzer Hessijames erstellt.

Dort wird erklärt, wie man einen Cross-Compiler auf seinem Linux-Rechner installiert und ein Hello-World-Programm kompiliert.


CodeSourcery G++ for ARM

CodeSourcery G++ for ARM (free lite edition)

Zu diesem Tool-Kette gibt es noch keine Erfolg-Meldungen für die NAS...

Dieses Tool basiert auf der freien GNU tool chain und bietet die Möglichkeit, auch für ARM9-Prozessoren zu kompilieren (Cross-Compiler). Das Tool läuft unter Windows und Linux, die freie Edition bietet allerdings nur Kommandozeilen-Unterstützung (nicht die Eclipse-IDE der kommerziellen Version).

Lt. Datenblatt des CPU-Herstellers der NAS-4220B (siehe Prozessor_und_Chipsatz) ist eine MMU-Einheit vorhanden und es wird (leider nur) der ARM4-Befehlssatz unterstützt, so dass man wahrscheinlich die CodeSourcery-Version für ARM uClinux einsetzen kann [Nachtrag: ARM uCLinux geht leider auch nicht].

Die CodeSourcery-Version für ARM GNU/Linux kann man nicht verwenden, mit arm-none-linux-gnueabi-gcc kompilierte Dateien verursachen bei der Ausführung auf der NAS4220-B die Fehler-Meldung Illegal instruction (core dumped). Lt. Doku des CodeSourcery-Herstellers erfordert die ARM GNU/Linux-Version mindestens eine Kernel-Version ab 2.6.16, damit EABI-Systemaufrufe unterstützt werden. Die IcyBox setzt aber die Kernel-Version 2.6.15 ein.

Die Installation des Compilers wird auch bei NAS-Central recht gut beschrieben.


NAS 4220B

Man kann z. Bsp. den Kernel auch auf der Box selbst in einer debian-chroot umgebung kompilieren. [1]


Nützliche Links


Grundtechniken

Symbolische Links als Overlay

Das Betriebssystem des NAS4220 wird nach dem Starten vom Bootloader in eine Ramdisk entpackt. Ist eine Festplatte vorhanden werden bestimmte Dateien die für den Betrieb des NAS dauerhaft vorhanden sein müssen, d.h. die einen Systemneustart überleben sollen von der Systempartition der Festplatte in das Dateisystem des NAS per symbolischen Link hineingebunden.

Diese Technik lässt sich auch nutzen um beispielsweise Systemdateien des NAS quasi zu Überschreiben. Dabei ist allerdings etwas Vorsicht angebracht, denn einige Systemdateien werden von Sausalito der Middleware des NAS überschrieben. Denn die Firmware des NAS speichert die Systemeinstellungen nicht primär in den Linux üblichen Konfigurationsdateien sondern in einer Datenbank (codb). Dieses System wurde damals für die SUN Cobalt Systeme von Berkley Leuten entwickelt und ist sehr einfach auch über Shellskripte zu nutzen.

Es empfiehlt sich also nicht, Dateien, die von Sausalito verändert werden einfach per SymLink zu überschreiben.

Eine Applikation - Ein Verzeichnis

RaidSonic hat bei seinen bisherigen Paketen alle für eine Software nötige Dateien in einen Unterordner unter dem Namen der Applikation im Verzeichnis application in der Freigabe puplic untergebracht. Das soll deswegen so sein, dass bei Fehlverhalten der entsprechenden Applikation einfach nur das entsprechende Verzeichnis gelöscht werden muss.

Das soll die Gesamtstabilität auch für wenig erfahrene Benutzer erhöhen und ist unbedingt zu empfehlen. Notwendige Konfigurationsdateien können per Symlink an die passende Stelle des Dateisystems gesetzt werden.


Ausführungsebenen

Um Software auf dem NAS zu installieren und zu Starten stehen grundsätzlich mehrere Ausführungsebenen zur Verfügung.

Init Datei

Wie in dem o.g. HowTo beschrieben führt das NAS beim Starten eine Datei mit dem Namen init in jedem Unterverzeichnis, dass es im Verzeichnis Applications der Freigabe public findet aus. Diese kann ein Skript sein, dass die Infrastruktur für das Programmpaket anlegt und auch die eigentliche Anwendung z. B. einen Serverprozess startet. Diese init-Datei wird allerdings sehr früh im Startprozess des NAS ausgeführt. So wurden zu diesem Zeitpunkt die Constructor genannten Skripte oder Binärdateien noch nicht ausgeführt, die die Infrastruktur, die von Sausalito kontrolliert wird noch nicht gestartet. Das führt dazu, dass hier z. B. noch nicht alle Benutzer angelegt sind.

Init Script der Webserver Application
  #!/bin/sh
  #					20071111
  # by Knut Trepte for Raidsonnic GmbH
  #					
  # The configuration for the additional Webserver has to be done in webserver.conf
  #
  # Where are we?
  HD_MNT_POINT=$(cat /usr/sausalito/codb/objects/1/Disk.rootdir 2> /dev/null)
  #
  # Make startscript start with sausalito constructors:
  if [ ! -e /usr/sausalito/constructor/92_construct_sshserver ]; then
     ln -s $HD_MNT_POINT/public/applications/webserver/sausalito/constructor/95_construct_webserver /usr/sausalito/constructor/95_construct_webserver
  fi

Deshalb muss so manche Anwendung später gestartet werden. Die dafür notwendigen Skripte können durch das Init-Skript allerdings per Symlink an die passende Stelle gesetzt werden oder sogar erstellt werden.

Das erstellen eines Skriptes oder seine gezielte Veränderung ist zum Beispiel durch den Umstand nötig, dass sich Pfadangaben in einem RAID system von einem mit JBOD unterscheiden, da die Systempartition hier anders gemounted wird. Das Init-Skript des Webservers zeigt das anschaulich. Hier werden mit einem Befehl „cat“ die notwendigen Pfade ermittelt.

  # Where are we?
  HD_MNT_POINT=$(cat /usr/sausalito/codb/objects/1/Disk.rootdir 2> /dev/null)

Sausalito Constructors

Eine Möglichkeit eine Anwendung dann zu starten, wenn der gesamte Betriebsystemkontext zur Verfügung stellt ein Skript in das Verzeichnis der Sausalito Constructor Dateien zu stellen. Auch das ist am Beispiel des Webserverpaketes gut zu studieren. Die zweistellige Zahl des Skriptnamens legt die Startreihenfolge der Sausalito Construktor Dateien fest. Hierbei sollte man auf die passende Einordnung achten.

  # Make startscript start with sausalito constructors:
  if [ ! -e /usr/sausalito/constructor/92_construct_sshserver ]; then
     ln -s $HD_MNT_POINT/public/applications/webserver/sausalito/constructor/95_construct_webserver /usr/sausalito/constructor/95_construct_webserver
  fi

Grundlegende Konflikte

Das Disk Spin Down Problem

Je mehr Applikationen auf dem NAS laufen um so mehr Festplattenzugriffe sind notwendig, da das RAM nicht groß genug ist alle notwendigen Dateien als RAM-Disk aufzunehmen. Da beist die Maus keinen Faden ab, mit dem Problem kämpfen alle Systeme.

Eine mögliche Lösung könnte darin gesucht werden, dass periodisch auf das System zugreifende Prozesse vorher ermitteln, ob die Festplatte ausgeschaltet wurde. Das ist aber nicht immer möglich und sinnvoll.

Die von einigen Workarounds hier durchgeführte Auslagerung der codb in die RAM-Disk sorgt dafür, dass Systemänderungen per Web-GUI flüchtig werden. Die codb beim herunterfahren wieder auf die Platte zu schreiben, hat auch nur dann Wirkung, wenn das System zwischendurch nicht abstürzt oder die Stromversorgung unterbrochen wird. So steht hier Systemstabilität gegen SpinDown.

Lösung des Spindown Problems

Installiert euch die Modifizierte Firmware

Ausblicke in die Zukunft

RaidSonic hat angekündigt das System weiter umzuarbeiten. Dabei werden einige Neuerungen dafür sorgen, dass vieles einfacher wird.

UnionFS statt Symlinks

Das wird die bisherige Link-Technik ersetzen. Hier sorgt ein bestimmter Dateisystemtreiber dafür, dass aus RAM-Disk und Systempartition eins wird.

Entwicklungsumgebung

RaidSonic hat eine Entwicklungsumgebung angekündigt in der Pakete für das NAS erstellt werden können.

Paket Management

Das Installieren und Verwalten von Paketen wird zukünftig ein Paketmanager übernehmen.

Persönliche Werkzeuge
Andere Sprachen