Features:
- Gerade mal ein bisschen kleiner als eine 3,5" Festplatte
- 100mbit Netzwerkschnittstelle
- 2 USB-Ports
- 266 mhz Prozessor
- 8 mb Flashspeicher
- 32 mb SD-Ram
- Unschlagbarer Preis von gerade mal 75
- Sieht nicht schlecht aus
Linksys liefert das gerät mit einem 2.4er kernel, Samba und einem entsprechenden Webinterface aus, damit man USB-platten anschliessen kann, und diese per Webinterface-konfiguration über den Samba im Netzwerk freigeben kann. Das ist zwar schön, reicht mir jedoch nicht. Ich will eine vollwertige Distribution darauf. Somit habe ich den Thread hier gestartet um gentoo darauf zum laufen zu bekommen, dies zu Dokumentieren, euch Fragen zu stellen, und schliesslich zu vesuchen, eine Schritt für Schritt Dokumentation für alle gentoo-user hier im Forum, im gentoo-wiki, oder auf den webseiten des embedded-gentoo projektes zur verfügung zu stellen. Ich hoffe, dass sich hier ein paar Leute finden, die selbst daran interessiert sind, gentoo darauf zum laufen zu bekommen
Hier im Startthread sammle ich Arbeitsschritte und Informationen. Ich werde sie wahrscheinlich nicht sofort beim posten ausformulieren, werde mir jedoch Mühe geben, zumindest halbwegs verständlich zu sein. Früher oder später werde ich das ganze mit ssicherheit mal ausformulieren.
Das Gerät:
- Die CPU:
Die NSLU2 wird mit einem Intel IXP420 als Prozessor ausgelifert. Der XScale-Kern basiert auf der ARMv5TE Architektur und ist auf 266Mhz ausgelegt. Nichts desto trotz wird er in diesem Gerät nur mit 133 getaktet. Durch eine sehr einfache Modifikation kann man den Prozessor "deunderclocken". Wie man es anstellt ist hier zu sehen.
- Speicher:
Die CPU ist angeschlossen an 8mb Flash-Speicher(0x50000000 - 0x50800000) Die 8MB Flash sind folgendermaßen aufgebaut:
- Start: 0x50000000, Länge: 0x40000 (256K) - der Bootcode
- Start: 0x50040000, Länge: 0x20000 (128K) - Systemkonfiguration (ich glaube für den bootmanager)
- Start: 0x50060000, Länge: 0x100000 (1MB) - Platz für den Kernel
- Start: 0x50160000, Länge: 0x6A0000 (6.625MB) - Das /-Dateisystem
- USB-Controller:
Das Gerät selbst hat 2 USB-Ports nach außen laufen. Der USB-Controller meldet sich in lspci als "USB Controller: NEC Corporation USB 2.0 (rev 04)"und wird problemlos von ohci/uhci unterstützt. Problemlos lässt sich auch ein aktiver USB-Hub anschliessen - aktiv daher, weil ich nicht glaube, dass der eigene USB der NSLU2 genügend Strom für viele Geräte liefert.
Getestet habe ich den USB-Controller bisher mit 4 Festplatten im USB-Gehäuse und einem RFID-Reader welcher an einem Serial2USB-Converter hängt. Alles lief Problemlos, auch gleichzeitig.
- Netzwerk:
Die Netzwerkschnittstelle wird direkt vom Prozessor bereitgestellt, und basiert damit auf dem IXP420 Chip, zu welchem man hier genauere Informationen findet. der Proprietäre Treiber dafür ist in Portage vorhanden und kann gegen den 2.6er Kernel gebaut werden.
- Bootloader:
Ausgeliefert wird das Gerät mit dem Bootloader namens "RedBoot". Dieser genügt auch für unsere Zwecke und wir lassen ihn drauf. Obgleich es möglich ist, diesen durch den APEX Bootloader zu ersetzen.
Gentoo installieren:
Auf los gehts los
- Wir brauchen ein Installationssystem
- Die Maschine in den Updatemodus bringen
- upslug2 emergen und testen
- Openslug installieren
- Gentoo Stage3 auf eine Festplatte
- Festplatte einrichten
- Stage-tarball herunterladen und entpacken
- Portagesnapshot herunterladen und entpacken
- chrooten
- Portage-tree snchronisieren
- Profil auswählen und testen
- Arm-Profil verlinken
- linux-headers updaten
- screen emergen
- Einrichten einer Crosscomplile-Umgebung
- Crossdev emergen
- Stage4 umgebung für die Target-Architektur einrichten
- Kernel installieren
- Kernelquellen besorgen
- Kernel patchen
- Cross-kompilieren
- Module auf die NSLU übertragen
- Kernelimage bearbeiten
- Netzwerktreiber crossscompilen
- Nötige Systemtools installieren und Konfigurationen bearbeiten
- Devfs raus, udev rein!
- Systemlogger
- Cron
- Netzwerkconfiguration
- /etc/fstab editieren
- /etc/conf.d/* editieren
- Kernelimage auf die NSLU übertragen und rebooten
Anmerkung 2: Das Howto schliesst zwar im Großen und Ganzen alles ein, jedoch ist es nicht vollständig. Copy&Paste funktioniert also _nicht_! Ich werde es weiter korrigieren und verbessern, Grundkenntnisse und Verständnis sollten jedoch bei jedem zu genüge vorhanden sein, der die Absicht hat, sich an diesem Howto zu orientieren.
- Wir brauchen ein Installationssystem
Linksys liefert die Maschine zwar mit einem 2.4er Linux aus, dieses ist jedoch nicht ausreichend um von dort aus Gentoo zu installieren (kein ssh, nicht alle Werkzeuge etc.). Also müssen wir uns eines besseren bedienen, damit wir ein Grundsystem haben, womit wir eine Festplatte partitionieren können, den Stage-tarball herunterladen und entpacken können, sowie einige Dateien editieren können und schliesslich in unser neues Root-System chrooten.
Hierfür benutzen wir die Distribution Openslug, welche komplett auf den Flash-speicher passt.- Die Maschine in den Updatemodus bringen
Zuerst sollten wir überprüfen, ob das Gerät überhaupt funktioniert. Dafür verbinden wir es mit unserem Switch und schalten es ein, ohne dabei irgendwelche Festplatten oder sonstiges angeschlossen zu haben. Wenn nach ca 1-2 Minuten die Ready/Status Lampe auf Grün wechselt, und wir das Gerät anpingen können, oder sogar auf das Webinterface (IP steht in der Dokumentation) kommen, ist schon alles geritzt und wir können wieder getrost den Stecker ziehen.
Nun bringen wir das Gerät auf folgendem Weg in den Update-Modus:- Darauf achten, dass nichts ausser dem Netzteil und einem Netzwekkabel angeschlossen ist
- Mit einem Kugelschreiber oder sonstigem an der Hinterseite das Reset-knöpfchen drücken und weiterhin gedrückt halten.
- Nun auf der Vorderseite den Power-on-button einmal drücken (den Reset-knopf weiterhin gedrückt halten)
- Nach ca. 10 Sekunden, sofort in dem Moment, wo die Ready/Status-Lampe auf Rot wechselt - den Reset-knopf loslassen. Dafür hast man ca. eine halbe Sekunde Zeit, danach ist es schon zu spät.
- Wenn die Ready/Status-Lampe abwechselnd Rot und Grün blinkt, befindet sich die NSLU im Update-Modus.
- upslug2 emergen und testen
Um die NSLU mit einer anderen Firmware zu bestücken, benötigen wir das tool Upslug2. Mike Frysinger vom embedded-gentoo Projekt hat dieses Tool bereits in Portage gestellt, somit können wir es bequem auf unserem Arbeitsplatzrechner, von dem aus wir die Gentoo-installation betreuen installieren:Vorrausgesetzt, die NSLU ist im Upgrademodus und hängt im gleichen Supnetz wie wir und hat entsprechend keinen IP-Konflikt etc. können wir sie sehen, indem wir nach der Installation auf unserem Arbeitsplatzrechner ein simples "upslug2" in die shell werfen. Die Ausgabe sollte wie folgt aussehen:Code: Select all
[13:57:39]|[chilla@chucky]|~/nslu/openslug-bin$ sudo emerge upslug2Damit wissen wir, dass die NSLU im Upgrademodus ist und unser upslug2 funktioniert. Ausserdem wissen wir die MAC-Addresse der NSLU, welche wir benötigen um die Firmware zu flashen.Code: Select all
[13:40:26]|[chilla@chucky]|~$ upslug2 NSLU2 00:13:10:d6:1d:f2 Product ID: 1 Protocol ID: 0 Firmware Version: R23V29 [0x2329]
Achtung: Dieser Output erscheint NUR, wenn die originale Linksysfirmware noch installiert ist. Sobald mal ein anderer Kernel drauf ist, findet man die NSLU nicht mehr auf diese weise. Schreibt euch also die MAC-Adresse auf (alternativ steht sie auch nochmal auf der Unterseite des Geräts aufgedruckt) - Openslug installieren
Nun, da das Maschinchen im Upgrade-Modus ist und unser upslug2 funktioniert, können wir Openslug auf dem zielsystem installieren. Dazu holen wir uns das binäre Image von Openslug und flashen es mittels upslug auf das Zielsystem. (Nach wie vor dürfen noch keine anderen Geräte an das Gerät angeschlossen sein!) Danach bootet das Gerät automatisch durch und wir können uns per SSH einloggen:- Openslug hier herunterladen.
- entpacken:
Code: Select all
[13:57:39]|[chilla@chucky]|~/nslu/openslug-bin$ unzip OpenSlug-2.7-beta-firmware.zip - Auf das Zielsystem übertragen:
Code: Select all
[13:57:39]|[chilla@chucky]|~/nslu/openslug-bin$ upslug2 --target=00:13:10:d6:1d:f2 --image=openslug-2.7-beta.bin - Wenn alles geklappt hat, bootet die NSLU nun automatisch neu. Falls ihr einen dchp-Server im Netzwerk habt, bekommt sie nun von diesem eine. Ansonsten sollte die IP 192.168.1.77 sein. Was nun wirklich die IP der NSLU ist verrät uns ein Blick auf
Code: Select all
ping -b 192.168.1.255 - Schliesslich loggen wir uns auf dem Zielsystem ein (das standard-root-pw lautet "opeNSLUg") und initialisieren es:
Code: Select all
ssh root@192.168.1.77 - Und initialisieren das Grundsystem:Der command "turnup init" fragt uns nach einigen Einstellungen, die wir setzen möchten - erklärt sich eigentlich alles von alleine.
Code: Select all
turnup init
- Die Maschine in den Updatemodus bringen
- Gentoo Stage3 auf eine Festplatte
Die folgenden Schritte sind eigentlich in der offiziellen offiziellen Gentoo-installations-doku besser und ausführlicher beschrieben als hier. Der Vollständigkeit halber und da ich ein anderes Stage-tarball verwende, schreibe ich sie hier trotzdem nieder.- Festplatte einrichten
Nun ist es an der Zeit, eine Festplatte anzuschliessen, zu partitionieren und zu formatieren. In meinem Fall habe ich eine 200GB Platte vo Samsung in ein billiges USB-Gehäuse gesteckt, das ich für 20 bei Arlt um die Ecke gekauft habe.- Die Festplatte wird angschlossen und mit dem command "dmesg" wird überprüft, ob sie richtig erkannt wurde:
Code: Select all
root@sluggy:~# dmesg [...] Vendor: SAMSUNG Model: SP2014N Rev: 0000 Type: Direct-Access ANSI SCSI revision: 00 SCSI device sda: 390721968 512-byte hdwr sectors (200050 MB) [...] - Mittels "fdisk" wird nun die Platte partitioniert. Für den Anfang erstelle ich nur eine 20GB große /-Partition und nochmal 500MB Swap. Wer nicht weiss, wie das geht, kann dies hier nachschauen.
Code: Select all
root@sluggy:~# fdisk /dev/sda
Schliesslich sieht meine Partitionierung folgendermaßen aus:Code: Select all
root@sluggy:~# fdisk -l /dev/sda Disk /dev/sda: 200.0 GB, 200049647616 bytes 255 heads, 63 sectors/track, 24321 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 1 1825 14659312 83 Linux /dev/sda2 1826 1887 498015 82 Linux swap - Nun werden beide Partitionen formatiert:
Code: Select all
root@sluggy:~# mkfs.ext3 /dev/sda1 root@sluggy:~# mkswap /dev/sda2 root@sluggy:~# swapon /dev/sda2 - Und schliesslich erstellen wir uns einen Mount-punkt und mounten unsere zukünftige /-Partition dorthin:
Code: Select all
root@sluggy:~# mkdir /mnt/gentoo root@sluggy:~# mount -t ext3 /dev/sda1 /mnt/gentoo/
- Die Festplatte wird angschlossen und mit dem command "dmesg" wird überprüft, ob sie richtig erkannt wurde:
- Stage-tarball herunterladen und entpacken
Die netten Jungs vom embedded-gentoo Projekt haben schon das schwierigste bereits für uns erledigt: Sie haben einen Stage3-Tarball für embedded-arm Systeme mit softfloat und der uclib erstellt, dessen wir uns bedienen können. Wir befinden uns also per ssh als root auf dem Zielsystem und haben eine fertig eingerichtete und formatierte, sowie genügend große Partition nach /mnt/gentoo gemountet. Dorthin wechseln wir nun und laden uns das Stage3-Archiv von dieser Seite herunter:Code: Select all
root@sluggy:~# cd /mnt/gentoo/ root@sluggy:/mnt/gentoo# wget http://ftp.uoi.gr/mirror/OS/gentoo/experimental/arm/embedded/stages/stage3-armeb-uclibc-softfloat-2005.1.tar.bz2 root@sluggy:/mnt/gentoo# tar xvjpf stage3-armeb-uclibc-softfloat-2005.1.tar.bz2 - Portagesnapshot herunterladen und entpacken
Nun laden wir uns auch einen aktuellen Portage-snapshot herunter unt entpacken ihn:Code: Select all
root@sluggy:/mnt/gentoo# wget http://ftp.uoi.gr/mirror/OS/gentoo/snapshots/portage-latest.tar.bz2 root@sluggy:/mnt/gentoo# tar xvjf portage-latest.tar.bz2 -C /mnt/gentoo/usr - chrooten
Da wir nun ein Grundsystem in /mnt/gentoo liegen haben, können wir auch schon reincrhooten, nachdem wir noch einige notwendige Dinge gemountet haben:Geschafft: wir befinden uns in Gentoo Linux auf einem embedded-arm MaschinchenCode: Select all
root@sluggy:~# mount -o bind /dev /mnt/gentoo/dev root@sluggy:~# mount -o bind /dev/pts /mnt/gentoo/dev/pts root@sluggy:~# mount -t proc none /mnt/gentoo/proc chroot /mnt/gentoo /bin/bash
- Portage-tree snchronisieren
Nun synchronisieren wir noch den Portage-tree.Code: Select all
sluggy / # emerge --sync
- Profil auswählen und testen
Das Standardprofil des benutzten Stage3-Tarballs ist ein 2.4er. Da ich aber ein 2.6er Kernel verwenden möchte, ändere ich dies um, installiere die neuen linux-headers des 2.6er kernels und emerge Screeen um das Profil zu testen- /etc/make.conf editieren
Zuerst schaue wird nachgeschaut, was noch in der /etc/make.conf zu machen ist. Morfic hat mir seine passende make.conf gegeben und ich habe noch der Sicherheit halber (ich habe nicht in die defaults geschaut) ein paar Useflags gesetzt. Nun sieht die make.conf so aus:Code: Select all
CFLAGS="-march=armv5t -Os" CHOST="armeb-softfloat-linux-uclibc" CXXFLAGS="-march=armv5t -Os" USE="-opengl -qt -gtk -gtk2 -kde -gnome -motif -X -arts -oss -alsa -esd -ipv6 apache2" - Arm-Profil verlinken
Nun löschen wir den derzeitigen Link zum 2.4er Profil und verlinken unser gewünsches 2.6er Profil:Code: Select all
sluggy / # rm /etc/make.profile sluggy / # ln -s /usr/portage/profiles/uclibc/arm /etc/make.profile - linux-headers updaten
Nun ist es notwendig, dass wir die Linux-headers updaten:Code: Select all
sluggy / # emerge -u linux-headers - screen emergen
Um zu sehen, ob die Einstellungen korrekt sind, und von unserem nativen gcc richtig ausführbare dateien erstellt werden, emerge ich mir screen, da ich es gerade während solcher installationen gerne verwende.Code: Select all
sluggy / # emerge screen
- Einrichten einer Crosscomplile-Umgebung
Die NSLU wird standardmäßig mit 133 Mhz betrieben. Das ist für heutige Verhältnisse wirklich nicht viel. Selbst wenn man die Sperre wie hier beschrieben rausnimmt, und damit den Takt auf 266Mhz anhebt (wofür der Prozessor übrigens eigentlich ausgelegt ist), hat man immernoch nicht die Performance um genussvoll mit gentoo zu arbeiten. Schon am Beispiel von screen, welches ich ein paar Zeilen weiter oben zum Testene emerged habe, hat man deutlich gesehen, wie lahm die kiste eigentlich ist. Ich werde mit Sicherheit einen großen Teil der Software nativ auf dem System emergen - dafür ist gentoo schliesslich gemacht -, aber im Moment habe ich keine große Lust drauf, so lange zu warten, bis mein Kernel gebaut ist. Zumal ich sowieso das kernelimage von außen per upslug2 wieder auf die Maschine schieben möchte.
Also setze ich mir eine Crosscompile-umgebung auf, damit ich nachher den Kernel auf meinem schnellen Arbeitsplatzrechner bauen kann. Dies ist leichter als es sich anhört:- Crossdev emergen
Crossdev ist ein geniales tool. Erstellt uns compiler, toolchains, uclibcs und binutils, welche auf unserem Arbeitsplatzrechner laufen, jedoch für unsere Zielarchitektiv (embedded-arm) kompilieren. Nurnochmal um sicherzugehen: Wir führen das Folgende auf unserem Arbeitsplatzrechner aus, nicht auf der NSLU!Code: Select all
sudo emerge crossdev - Stage4 umgebung für die Target-Architektur einrichten
Nun benötigen wir alles für die Kompilierung von ARM-Programmen. Falls wir es noch nicht drin haben, müssen wir folgende Zeile in die /etc/make.conf unseres Arbeitsplatzrechners eintragen:Nun können wir ganz einfach unsere Crosscompile-umgebung erstellen:Code: Select all
PORTDIR_OVERLAY="/usr/local/portage"Code: Select all
[16:15:30]|[chilla@chucky]|~$ sudo crossdev armeb-softfloat-linux-uclibc
- Einen Kernel installieren
Jetzt gehts ans eingemachte. Einige eeigenschaften der NSLU2 sind nicht vom vanilla-kernel unterstütz, zudem verwenden wir noch die uclibc statt der glibc, da hilft nur eins: kernel patchen. Als Grundlage nutzen wir einen halbwegs aktuellen 2.6.14.3, den wir uns zu beginn von kernel.org herunterladen werden. Danach jagen wir ein paar patches drüber und cross-kompilieren ihn auf unserem Arbeitsplatzrechner. Danach wird das erstelle Kernelimage noch ein wenig bearbeitet, damit der bootloader unseres Zielsystems es laden kann, und die kompilierten Module werden auf unseren Zielrechner übertragen. Das Kernelimage wird erst ganz zum Schluss übertragen, da wir dafür die NSLU neu booten müssen.- Kernelquellen besorgen
Ich erstelle mir ein Arbeitsverzeichnis für die Kernel-geschichte und lade mir die 2.6.14.3er Quellen runter:Code: Select all
[17:11:43]|[chilla@chucky]|~/nslu$ mkdir nslu2-kernel [17:11:43]|[chilla@chucky]|~/nslu$ cd nslu2-kernel/ [17:12:28]|[chilla@chucky]|~/nslu/nslu2-kernel$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.3.tar.bz2 [17:13:50]|[chilla@chucky]|~/nslu/nslu2-kernel$ tar xjf linux-2.6.14.3.tar.bz2 - Kernel patchen
Die Patches hat morfic glaube ich alle von Openslug zusammengesucht, ich habe noch einen hinzugefügt. Das gesamte paket lade ich mir runter, entpacke es und patche damit die Kernelquellen:Nun hole ich mir noch morvic's config:Code: Select all
[17:14:37]|[chilla@chucky]|~/nslu/nslu2-kernel$ wget http://chilla.biz/projekte/gentoo-slug/files/nslu2-patches-2.6.14.3.tar.bz2 [17:16:48]|[chilla@chucky]|~/nslu/nslu2-kernel$ tar xjf nslu2-patches-2.6.14.3.tar.bz2 [17:17:11]|[chilla@chucky]|~/nslu/nslu2-kernel$ mv patches/ linux-2.6.14.3 [17:17:21]|[chilla@chucky]|~/nslu/nslu2-kernel$ cd linux-2.6.14.3 [17:17:36]|[chilla@chucky]|~/nslu/nslu2-kernel/linux-2.6.14.3$ for i in `cat patches/nslu2-patches.list` ; do patch -p1 < patches/$i ; doneCode: Select all
[17:18:10]|[chilla@chucky]|~/nslu/nslu2-kernel/linux-2.6.14.3$ wget http://dev.gentoo.org/~morfic/nslu2/nslu2-2.6.14.3.config [17:22:08]|[chilla@chucky]|~/nslu/nslu2-kernel/linux-2.6.14.3$ mv nslu2-2.6.14.3.config .config [17:22:22]|[chilla@chucky]|~/nslu/nslu2-kernel/linux-2.6.14.3$ make ARCH=arm CROSS_COMPILE=armeb-softfloat-linux-uclibc- oldconfig dep - Cross-kompilieren
Nun wird der Kernel kompiliert. Ich befinde mich die ganze Zeit auf meinem Arbeitsplatzrechner, da ich keine Lust habe, das auf der langsamen NSLU zu machen. Da ich vorhin meine Crosscompile-Umgebung mit crossdev gebaut habe, kann ich nun ganz einfach darauf zurückgreifen und den Kernel für eine andere Architektur kompilieren:Damit wir die Module noch separat bekommen, erstellen wir uns dafür noch schnell ein verzeichnis und lassen uns die Module dort hineininstallieren:Code: Select all
make ARCH=arm CROSS_COMPILE=armeb-softfloat-linux-uclibc-Code: Select all
[17:30:46]|[chilla@chucky]|~/nslu/nslu2-kernel/linux-2.6.14.3$ mkdir /home/chilla/nslu/nslu2-2.6.14.3-modules/ [17:30:54]|[chilla@chucky]|~/nslu/nslu2-kernel/linux-2.6.14.3$ make INSTALL_MOD_PATH=/home/chilla/nslu/nslu2-2.6.14.3-modules/ DEPMOD=/bin/true modules_install - Module auf die NSLU übertragen
Die kompilierten module können wir schonmal packenn und auf die NSLU übertragen und nebenbei erstellen wir schonmal das Verzeichnis, wo später das Modul für die Netzwerkschnittstelle liegt.Damit hätten wir schon mal die Kernelmodule auf dem Zielrechner.Code: Select all
[17:44:26]|[chilla@chucky]|~/nslu/nslu2-kernel/linux-2.6.14.3$ cd ../../ [17:33:05]|[chilla@chucky]|~/nslu$ tar cjf nslu2-2.6.14.3-modules.tar.bz2 nslu2-2.6.14.3-modules [17:35:21]|[chilla@chucky]|~/nslu$ scp nslu2-2.6.14.3-modules.tar.bz2 root@192.168.1.77:/mnt/gentoo/root/ [17:35:40]|[chilla@chucky]|~/nslu$ ssh root@192.168.1.77 root@sluggy:~# chroot /mnt/gentoo/ /bin/bash sluggy / # cd /root/ sluggy ~ # tar xjf nslu2-2.6.14.3-modules.tar.bz2 sluggy ~ # cp -r nslu2-2.6.14.3-modules/lib/modules/2.6.14.3 /lib/modules/ sluggy ~ # mkdir /lib/modules/2.6.14.3/kernel/drivers/ixp400/ sluggy ~ # exit root@sluggy:~# exit
- Kernelimage bearbeiten
Auch wenn das Image erst später installiert wird, so machen wir es trotzdem jetzt noch "ready to be slugged". Damit der Bootloader das image laden kann, muss es noch leicht modifiziert werden - dies erledigt ein kleines script für uns:Damit haben wir nun ein Kernel-image erhalten, wechles von der NSLU2 gebootet werden kann.Code: Select all
[17:51:46]|[chilla@chucky]|~/nslu$ cd nslu2-kernel/ [17:51:49]|[chilla@chucky]|~/nslu/nslu2-kernel$ wget http://dev.gentoo.org/~morfic/nslu2/prepimage [17:56:21]|[chilla@chucky]|~/nslu/nslu2-kernel$ chmod +x prepimage [17:55:37]|[chilla@chucky]|~/nslu/nslu2-kernel$ cp linux-2.6.14.3/arch/arm/boot/zImage . [17:55:53]|[chilla@chucky]|~/nslu/nslu2-kernel$ ./prepimage
- Netzwerktreiber kompilieren
Glücklicherweise steht der Netzwertreiber in Portage. Diesen können wir bequem auf unserem Arbeitsplatz kompilieren - dort haben wir ja auch noch die kernel-sourcen abgelegt. Schliesslich schieben wir das entstandene Modul noch auf die NSLU, dann hätten wir auf Seiten des Kernels im Prinzip alles fertig.- Aus irgendeinem Grund müssen bei mir die Kernelquellen nach /usr/src/linux gelinkt werden.
Code: Select all
[21:45:05]|[chilla@chucky]|~$ su chucky chilla # rm /usr/src/linux - Nun demaskieren wir noch den Netzwerktreiber und kompilieren ihn schliesslich:
Code: Select all
chucky chilla # ln -s /home/chilla/nslu/nslu2-kernel/linux-2.6.14.3 /usr/src/linux chucky ~ # echo "net-misc/ixp4xx arm" >> /etc/portage/package.keywords chucky ~ # CHOST=armeb-softfloat-linux-uclibc emerge ixp4xx - Nun schieben wir noch die Kernelmodule auf die NSLU:
Code: Select all
chucky ~ # scp /lib/modules/2.6.14.3/kernel/drivers/net/ixp400_eth.ko root@192.168.1.77:/mnt/gentoo/lib/modules/2.6.14.3/kernel/drivers/net/ixp400_eth.ko chucky ~ # ssh root@192.168.1.77 root@sluggy:~# mkdir /mnt/gentoo/lib/modules/2.6.14.3/kernel/drivers/ixp400/ root@sluggy:~# exit chucky ~ # scp /lib/modules/2.6.14.3/kernel/drivers/ixp400/ixp400.ko root@192.168.1.77:/mnt/gentoo/lib/modules/2.6.14.3/kernel/drivers/ixp400/ixp400.ko
- Aus irgendeinem Grund müssen bei mir die Kernelquellen nach /usr/src/linux gelinkt werden.
- Netzwerktreiber crosscompilen
Ich weiss zwar nicht den Grund, doch leider lässt sich der Netzwerktreiber nicht nativ kompilieren. Daher müssen wir auch ihn auf unserem Arbeitsplatzrechner kompilieren und danach die Module auf das Zielsystem übertragen:Code: Select all
# echo "net-misc/ixp4xx arm" >> /etc/portage/package.keywords # CHOST=armeb-softfloat-linux-uclibc emerge ixp4xx # scp /lib/modules/2.6.14.3/kernel/drivers/net/ixp400_eth.ko root@192.168.1.77:/mnt/gentoo/lib/modules/2.6.14.3/kernel/drivers/net/ # scp /lib/modules/2.6.14.3/kernel/drivers/ixp400/ixp400.ko root@192.168.1.77:/mnt/gentoo/lib/modules/2.6.14.3/kernel/drivers/ixp400/
- Nötige Systemtools installieren und Konfigurationen bearbeiten
- Devfs raus, udev rein!
Der Stagetarball kommt mit devsd daher. Wir benutzen jedoch einen 2.6.14er kernel, welcher kein devfs mehr unterstützt. Somit steigen wir auf udev um:Code: Select all
sluggy / # emerge udev && emerge -C devfsd - Systemlogger
Syslog-ng ist zwar schon ein sehr ausgewachsener Syslogger, aber ich verwende ihn trotzdem, da die NSLU bei mir die Systemlogs von anderen Rechnern empfangen soll.Code: Select all
sluggy / # emerge syslog-ng sluggy / # rc-update add syslog-ng default - Cron
Und einen Cron-jobber brauchen wir ebenso:Code: Select all
# emerge vixie-cron # rc-update add vixie-cron default - Cron
Falls benötigt, installiert man noch dhcpcd:Code: Select all
# emerge dhcpcd - Netzwerkconfiguration
Meine Netzwerkkonfiguration sieht folgendermaßen aus:Code: Select all
sluggy / # nano -w /etc/conf.d/net config_eth0=( "192.168.1.77 netmask 255.255.255.0 broadcast 192.168.1.255" ) routes_eth0=( "default via 192.168.1.1" ) - /etc/fstab editieren. Meine sieht folgendermaßen aus:
Code: Select all
sluggy / # cat /etc/fstab /dev/sda1 / ext3 defaults 1 1 /dev/sda2 swap swap defaults 0 0 proc /proc proc defaults 0 0 usbfs /proc/bus/usb usbfs defaults 0 0 - Nun noch ein paar andere Konfigurationsdateien editieren:Wir sollten auch noch unser rootpassswort festplagen:
Code: Select all
sluggy / # nano -w /etc/conf.d/hostname sluggy / # nano -w /etc/conf.d/domainnameUnd ausserdem darauf achten, dass der ssh-server, sowie System-logger etc. beim Booten gestartet werden:Code: Select all
# passwdUnd ausserdem müssen wir noch die Module in die /etc/modules.autoload/kernel-2.6 eintragen:Code: Select all
# rc-update add dropbear default # rc-update add net.eth0 default # rc-update add domainname defaultCode: Select all
# echo "ixp400" >> /etc/modules.autoload/kernel-2.6 # echo "ixp400_eth0" >> /etc/modules.autoload/kernel-2.6
- Devfs raus, udev rein!
- Kernelimage auf die NSLU übertragen und booten
Nun ist es fast geschafft. Es fehlt nurnoch der wichtigste Schritt: das Installieren des Kernels. Um dies zu tun, muss man die NSLU herunterfahren und wieder in den Upgrade-modus bringen. Wichtig ist hierbei wieder: Alle zusätzliche Hardware wie Festplatten, USB-Sticks oder sonstiges abklemmen. Am Gerät dürfen nurnoch Netzwerk und Strom angeschlossen sein. Wie ihr dann die NSLU in den Upgrade-Modus bringt ist bereits bei 1. beschrieben worden. Wenn sich das Gerät im Upgrademodus befindet (die Ready/Status Lampe rot-grün blinkt), dann setzen wir uns wieder an unseren Arbeitsplatz und führen folgendes (natürlich mit der Mac-adresse eurer NSLU) aus:Es ist geschafft. Nachdem das Kernelimage auf die NSLU übertragen wurde, sollte sie automatisch durchbooten, und unser Gentoo sollte per ssh erreichbar sein.Code: Select all
upslug2 --target=00:13:10:d6:1d:f2 --kernel=/home/roman/nslu/nslu-kernel/linux-2.6.14.3/zImake.ok
Möchte mich noch bedanken:
- Bei den Jungs von openembedded, bzw openslug. Ohne deren Infos wäre ich nich so weit gekommen
- ganz großes Tennis von den embedded-gentoo-jungs. Das sie nerds*geeks² - sie haben nich zu letzt den stagetarball geschaffen

- Im speziellen möchte ich Vapier und SpankY aus #embedded-gentoo danken, beide machen sehr gute Pakete ohne die ich aufgschmossen wäre (stage3-arm-tarball, crossdev, ixp4xx etc.)
- Und noch ein besonderer dank zuletzt and Morfic aus #gentoo-embedded. Er hat mir vieles Schritt für Schritt erklärt und viele Sachen (gerade der kernel mit den patches und der config) in diesem howto kommen von ihm!
Links zu den ganzen Seiten, wo ich mir infos geholt habe kommen in den nächsten Tagen.. nu wüsch ich euch allen erstma n guten rutsch
was geht und was nich geht:
- Nativ kompilieren funzt logischerweise - aber es is laaaaaaaangsaaaaaaam:
Code: Select all
sluggy dev # genlop -t sudo vim * app-admin/sudo Mon Jan 2 16:53:18 2006 >>> app-admin/sudo-1.6.8_p9-r2 merge time: 12 minutes and 52 seconds. * app-editors/vim Mon Jan 2 06:36:51 2006 >>> app-editors/vim-6.4 merge time: 46 minutes and 56 seconds. [/list] [size=150]--------------------------------------------------------------------- totes & todo & misc ---------------------------------------------------------------------[/size] [size=150]todo:[/size] [list] [*]CONFIG_CMDLINE in der kernelconfig um darin rootfs und sonstiges festzulegen [*]netzerkkarte ist ixp0 und nicht eth0 [*]2.6.15 + patches von openembedded? [*]Blinklichter ebuild [*]fotos [*]anderes Gehäuse? [*]fest installierte serielle Schnittstelle [*]lcd von usblcd.de (mit lcdproc?) [*]übersetzung ins englische [*]Kernel kompilieren richtigstellen (nach /usr/src/linux) [/list]


