Booten vom USB-Stick

Aus NG-Return Wiki
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Voraussetzungen

  • Coolstream mit Original-Image
  • PC (oder Mac) mit Netzwerkverbindung zur Cooli, serieller Schnittstelle und Nullmodemkabel
  • Terminalprogramm (Hyperterminal o.ä)

Die Vorbereitungen, um vom USB-Stick booten zu können, sind nicht sehr umfangreich oder kompliziert, aber Ihr solltet schon wissen, wie man per FTP und Telnet auf die Box zugreift!

USB-Stick einrichten

Der USB-Stick sollte mit dem Dateisystem EXT3 formatiert werden. Verwendet dazu entweder ein Partitionierungsprogramm wie bspw. Partition Magic oder EASEUS Partition Master, wenn ihr nur über einen Windows-PC verfügt, oder formatiert den Stick gleich an einem Linux-PC, wenn ihr könnt - von der Formatierung an der Cooli über mkfs.ext3 aus der busybox raten auch wir ab.

Der vorbereitete USB-Stick wird nun (vorzugsweise hinten) an die gebootete Cooli angesteckt, wo er automatisch erkannt und gemounted wird. Anschließend öffnet man eine Telnet-Sitzung mit der Cooli und gibt folgende Befehle ein:

cd /tmp/sda1

oder, falls bereits eine interne Festplatte in der Box ihren Dienst verrichtet

cd /tmp/sdb1

da die Festplatte dann bereits nach sda1 gemounted ist.
Als nächstes wird das Image auf den Stick kopiert. Dafür zeigen wir hier zwei Wege auf:

   1. Kopieren des Flash-Inhalts auf den Stick

Mit dem nachstehenden Befehl werden zunächst die nötigen Verzeichnisse und Dateien auf den Stick kopiert:

cp -a /bin /dev /etc /lib /media /root /sbin /share /usr /var ./

und mit dem nächsten Befehl werden weitere erforderliche Verzeichnisse auf dem Stick angelegt:

mkdir mnt proc sys tmp

   2. Entpacken eines beliebigen Images auf dem Stick

Zunächst wird das Image-Archiv via FTP-Client auf die Box nach /tmp/media/sda1 (oder /tmp/media/sdb1 [s.o.]) übertragen, bevor man wieder in das Telnet-Fenster wechselt und den Befehl zum Entpacken gibt

tar -xvf image.tar

oder bei gzip-gepackten Archiven

tar -xvzf image.tar.gz

Damit ist der USB-Stick eigentlich schon fertig. Jetzt gilt es nur noch, der Coolie beizubringen, dass sie vom USB-Stick booten soll.

linuxrc

Dazu wird ein zusätzliches Skript mit Namen linuxrc im Root-Verzeichnis im Flash angelegt.
Hinweis: Wer sich ein NG-Coolstream-Image in den Flash installiert hat,der braucht sich um die linuxrc nicht zu kümmern, da sie bereits im Image integriert ist. Dann bitte gleich mit den Bootargs weitermachen.
Ist die Datei linuxrc noch nicht vorhanden, dann könnt ihr sie entweder mit dem nachstehenden Inhalt selbst in einem UNIX-konformen Editor erstellen und im Root-Verzeichnis des Flash-Speichers abspeichern, oder ihr ladet sie einfach von hier aus dem Forum und speichert sie im Root-Verzeichnis des Flash-Speichers.

#!/bin/sh
#
# /linuxrc script for USB booting
#
# (C) 2009 Stefan Seyfried, License: GPL V2
#
# this is a hack for booting the coolstream HD1 from USB
# put this script into the original root fs as /linuxrc,
# chmod it to 0755 and add "init=/linuxrc" to the bootargs of
# U-Boot
#
# the usb stick should have an "/oldroot" directory, so you
# can unmount the jffs2 "old" root later.
#
e="/bin/echo linuxrc:"

$e "***** linuxrc by NG-Team *****"

if /bin/test -e /var/etc/.boot_usb_off; then
     $e "flagfile <boot usb off> exists, doing normal init."
     $e "Goodbye!"
     exec /sbin/init
fi

$e mount...
/bin/mount /proc
/bin/mount /dev
$e create needed nodes...
/bin/mknod -m 660 /dev/console c 5 1
/bin/mknod -m 660 /dev/null c 1 3
/bin/mknod -m 660 /dev/sda b 8 0
/bin/mknod -m 660 /dev/sda1 b 8 1
$e create /tmp/newroot directory...
/bin/mkdir -p /tmp/newroot
$e sync all this stuff...
/bin/sync
#$e sleep 5...
#/bin/sleep 5
$e mounting sda1...

if ! /bin/mount -n /dev/sda1 /tmp/newroot; then
     $e "mount failed, cleaning up and doing normal init."
     $e "Goodbye!"
     /bin/umount /proc
     exec /sbin/init
fi

if /bin/test -e /tmp/newroot/sbin/pivot_root; then
     $e "using pivot_root to enter new root"
     cd /tmp/newroot
     sbin/pivot_root . oldroot
     /bin/mknod -m 755 /dev/console c 5 1
     exec sbin/chroot . sbin/init < dev/console > dev/console 2>&1
fi

$e "no /sbin/pivot_root on sda1, trying normal chroot"

if /bin/test -x /tmp/newroot/sbin/init; then
     exec /sbin/chroot /tmp/newroot /sbin/init
fi

$e "no /sbin/init on sda1, cleaning up and booting from flash."

/bin/umount /proc
/bin/umount /tmp/newroot
/bin/rmdir /tmp/newroot

$e "Goodbye!"

exec /sbin/init

Dieses Skript muss zwingend ausführbar sein. Dazu gebt ihr der Datei noch die Rechte 755 - entweder im FTP-Programm, oder per Telnet:

chmod 755 /linuxrc

Bootargs

Jetzt müssen wir noch dafür sorgen, dass das Skript auch bei jedem Systemstart ausgeführt wird. Dazu müssen die Bootargs der Cooli erweitert werden.

Auf dem PC wird nun ein Terminalprogramm gestartet und eine Verbindung aufgebaut mit folgenden Einstellungen:

  • Bits pro Sekunde: 115200
  • Datenbits: 8
  • Parität: Keine
  • Stoppbits: 1
  • Flusssteuerung: Hardware

Nun wird die Box eingeschaltet und das Booten wird durch Drücken einer beliebigen Taste unterbrochen. Sobald der Prompt erscheint, macht ihr die folgende Eingabe (je nach Cooli-Typ):
HD1

setenv bootargs console=ttyRI0 mtdparts=cx2450xflash:512k(U-Boot)ro,4096k(kernel),28160k(systemFS) root=mtd2 rootfstype=jffs2 rw mem=384M init=/linuxrc

Neo

setenv bootargs console=ttyRI0 mtdparts=cx2450xflash:384k(U-Boot)ro,128k(Splash),4096k(kernel),28160k(systemFS) root=mtd3 rootfstype=jffs2 rw mem=384M init=/linuxrc

Zee

setenv bootargs console=ttyRI0 mtdparts=cx2450xflash:384k(U-Boot)ro,128k(Splash),4096k(kernel),28160k(systemFS) root=mtd3 rootfstype=jffs2 rw mem=384M init=/linuxrc

Die Eingabe wird mit Enter bestätigt. Jetzt ist die Änderung allerdings noch nicht permanent - um die Änderungen an den Botargs dauerhaft zu speichern, gebt ihr den Befehl

saveenv

ein, bevor ihr die Box mit

boot

neu startet.
Ist alles erfolgreich verlaufen, dann könnt ihr nach dem Booten im Root-Verzeichnis nicht die Datei linuxrc finden, sondern das Verzeichnis lost and found, weil das Image vom USB-Stick gebootet wurde.
Hinweis: Ist im Flash auch ein NG-Image, dann muß man der Cooli mitteilen, dass sie beim nächsten Starten vom Stick booten soll. Dazu wählt man unter menu-Taste -> NG-Image Einstellungen -> Boooten von USB-Device den Eintrag linuxrc (statt aus für das Booten aus dem Flash-Speicher). Hinweis: Weil die /linuxrc ein fallback hat, macht es auch nichts aus, wenn der USB-Stick nicht eingesteckt ist. Und weil der Kernel ein fallback hat, macht es auch nichts aus, wenn kein /linuxrc da ist. Die Box bootet dann einfach aus dem Flash.


Danksagung

Unser Dank gilt Seife, dessen Anleitung, die in diversen Foren zu finden ist, auch unserer Anleitung zugrunde lag.


--Tuner & Trapped 20:00, 20. Feb. 2011 (CEST)

Meine Werkzeuge