# Bootfähiger USB-Stick mit Minimalsystem

## Inte

Fragen und Tipps bitte hier in den Thread

Kritik bitte ausschließlich per PN, ICQ oder eMail

Aktuell

02 Jun 2004 Momentan wird in eine Shell (ash) gebootet, mit der eine rudimentäre Manipulation der Festplatten möglich ist. Dank Bootsplash sieht diese auch recht nett aus.

03 Jun 2004 fbi funktioniert jetzt auch.

07 Jun 2004 Unterstützung für alte Gerätenamen (/dev/sdx, /dev/hdx, etc.) hinzugefügt.

Grub OK

Kernel OK

Initrd OK

Bootsplash OK

fbi OK

Busybox

RootFs

...

Die Motivation

Ich will mit Eurer Hilfe versuchen einen bootfähigen USB-Stick mit einem minimalen System zu erstellen, um Bilder auf einer Framebuffer Konsole anzuzeigen (fbi) und mit gebräuchlichen Tools (Busybox), Daten sichern zu können.

Zwar gibt es viele Mini-Distributionen bzw. Anleitungen die einen ähnlichen Weg gehen, aber leider stelle ich mir oft Fragen auf die selbst Google keine zufriedenstellende Antwort hat. Deswegen hoffe ich, daß wir eine Anleitung für ein minimales USB-System entwickeln, mit der auch Unbedarfte etwas anfangen können.

Step by step

Grub

Während der folgenden Schritte gehe ich davon aus, daß die Unterstützung für den USB-Stick in den laufenden Kernel einkompiliert ist (fest oder als Modul) und der Mountpoint /mnt/stick lautet.

```
mke2fs /dev/sda1

mount -t ext2 /dev/sda1 /mnt/stick/

mkdir -p /mnt/stick/boot/grub

cp /boot/grub/stage1 /mnt/stick/boot/grub/

cp /boot/grub/stage2 /mnt/stick/boot/grub/

cp /boot/grub/e2fs_stage1_5 /mnt/stick/boot/grub/

cp /boot/grub/splash.xpm.gz /mnt/stick/boot/grub/
```

/mnt/stick/boot/grub/grub.conf

```
cat > /mnt/stick/boot/grub/grub.conf << "EOF"

title MyMiniLinux

splashimage=(hd0,0)/boot/grub/splash.xpm.gz

kernel=(hd0,0)/boot/bzImage root=/dev/scsi/host1/bus0/target0/lun0/part1 video=mtrr,vesa:1024x768 vga=0x317 splash=silent

initrd=(hd0,0)/boot/initrd.gz

EOF
```

Den Symlink auf menu.lst nicht vergessen  :Wink: 

```
cd /mnt/stick/boot/grub

ln -sf grub.conf menu.lst

umount /mnt/stick
```

Jetzt den Stick noch bootfähig machen und schon geht's mit dem Kernel weiter:

```
grub

grub> root (hd1,0)

 Filesystem type is ext2fs, partition type 0x83

grub> setup (hd1)

 Checking if "/boot/grub/stage1" exists... yes

 Checking if "/boot/grub/stage2" exists... yes

 Checking if "/boot/grub/e2fs_stage1_5" exists... yes

 Running "embed /boot/grub/e2fs_stage1_5 (hd1)"...  22 sectors are embedded... succeeded

 Running "install /boot/grub/stage1 (hd1) (hd1)1+22 p (hd1,0)/boot/grub/stage2

 /boot/grub/menu.lst"... succeeded

 Done.

grub> quit
```

Kernel

Vanilla Kernel 2.6.6 von http://www.kernel.org und Bootsplash Patch (bootsplash-3.1.4-2.6.6.diff) von http://www.bootsplash.de/files/

 :Idea:  Vor der ersten Konfiguration immer erst die Quellen säubern und den Kernel patchen:

```
make mrproper

patch -p1 < bootsplash-3.1.4-2.6.6.diff

make menuconfig
```

```
Code maturity level options  --->

  [*] Prompt for development and/or incomplete code/drivers

  [*]   Select only drivers expected to compile cleanly

  [*]   Select only drivers that don't need compile-time external firmware

General setup  --->

  [*] Support for hot-pluggable devices[*]

  Configure standard kernel features (for small systems)  --->

    [*]   Enable futex support

    [*]   Enable eventpoll support

    [*]   Anticipatory I/O scheduler

    [*]   Optimize for size

Processor type and features  --->

  Subarchitecture Type (PC-compatible)  --->

  Processor family (Pentium M)  --->

  [*] Generic x86 support

  [*] Preemptible Kernel

  [*] Machine Check Exception

  [*] MTRR (Memory Type Range Register) support

Power management options (ACPI, APM)  --->

  [*] Power Management support

  ACPI (Advanced Configuration and Power Interface) Support  --->

    [*] ACPI Support

    [*]   Sleep States (EXPERIMENTAL)

    [*]   AC Adapter

    [*]   Battery

    [*]   Button

    [*]   Fan

    [*]   Processor

    [*]     Thermal Zone

  CPU Frequency scaling  --->

    [*] CPU Frequency scaling

    [*]   CPU frequency table helpers

    [*] Intel Enhanced SpeedStep

Bus options (PCI, PCMCIA, EISA, MCA, ISA)  --->

  [*] PCI support

  PCI access mode (Any)  --->

  [*] Legacy /proc/pci interface

Executable file formats  --->

  [*] Kernel support for ELF binaries

  [*] Kernel support for a.out and ECOFF binaries

  [*] Kernel support for MISC binaries

Device Drivers  --->

  Block devices  --->

    [*] Loopback device support

    [*] RAM disk support

    (4096) Default RAM disk size

    [*]   Initial RAM disk (initrd) support

  ATA/ATAPI/MFM/RLL support  --->

    [*] ATA/ATAPI/MFM/RLL support

    [*]   Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support

    [*]     Include IDE/ATA-2 DISK support

    [*]     generic/default IDE chipset support

    [*]     PCI IDE chipset support

    [*]       Sharing PCI IDE interrupts support

    [*]       Generic PCI IDE Chipset Support

    [*]       Generic PCI bus-master DMA support

    [*]         Use PCI DMA by default when available

    [*]         Intel PIIXn chipsets support

  SCSI device support  --->

    [*]   legacy /proc/scsi/ support

    [*]   SCSI disk support

  Input device support  --->

    [*] i8042 PC Keyboard controller

    [*] Keyboards

    [*]   AT keyboard support

  Character devices  --->

    [*] Virtual terminal

    [*]   Support for console on virtual terminal

    [*] Unix98 PTY support

  Graphics support  --->

    [*] Support for frame buffer devices

    [*]   VESA VGA graphics support

    Console display driver support  --->

      [*] VGA text console

      [*]   Video mode selection support

      [*] Framebuffer Console support

    Bootsplash configuration  --->

      [*] Bootup splash screen

  USB support  --->

    [*] Support for Host-side USB

    [*]   USB device filesystem

    [*]   EHCI HCD (USB 2.0) support

    [*]   UHCI HCD (most Intel and VIA) support

    [*]   USB Mass Storage support

File systems  --->

  [*] Second extended fs support

  [*] Reiserfs support

  DOS/FAT/NT Filesystems  --->

    [*] DOS FAT fs support

    [*]   VFAT (Windows-95) fs support

  Pseudo filesystems  --->

    [*] /proc file system support

    [*] sysfs file system support

    [*] /dev file system support (OBSOLETE)

    [*]   Automatically mount at boot

    [*] Virtual memory file system support (former shm fs)

  Native Language Support  --->

    (iso8859-1) Default NLS Option

    [*]   NLS ISO 8859-1  (Latin 1; Western European Languages)
```

Das Kompilieren und Kopieren nicht vergessen  :Wink: 

```
make

mount -t ext2 /dev/sda1 /mnt/stick

cp arch/i386/boot/bzImage /mnt/stick/boot/

umount /mnt/stick
```

Initrd

Da es ein Timing-Problem beim Erkennen des USB-Sticks gibt, brauchen wir eine InitialRamdisk (initrd) um eine Pause im Bootvorgang zu erzeugen. Es gibt zwar ein Patch (usb-storage-root.patch), aber leider ist mir keins für den 2.6er Kernel bekannt. Außerdem wird die initrd für den Bootsplash sowieso benötigt.  :Wink: 

Als Erstes wird ein leeres Dateisystem erstellt und als Loopback-Device gemounted (Der Kernel muß das Loopback-Device unterstützen und der Mountpoint /mnt/loop muß vorhanden sein):

```
dd if=/dev/zero of=initrd bs=1024k count=1

mke2fs -F -m0 initrd

mount -t ext2 -o loop initrd /mnt/loop
```

Dann besorgen wir uns die aktuelle Version von Busybox (z.B. busybox-1.00-pre10.tar.gz). Für die initrd kompilieren wir die nötigsten Programme (z.B. echo, usleep, etc.) statisch und kopieren das Binary auf das Loopback-Device:

```
make menuconfig
```

```
Build Options  --->

  [*] Build BusyBox as a static binary (no shared libs)

Coreutils  --->

  [*] echo (basic SUSv3 version taking no options)

  [*] usleep

Another Bourne-like Shell  --->

  Choose your default shell (ash)  --->

  [*]     Optimize for size instead of speed (NEW)
```

```
make dep

make

mkdir -p /mnt/loop/{dev,bin}

cp busybox /mnt/loop/bin

cd /mnt/loop/bin

ln -s busybox ash

ln -s busybox echo

ln -s busybox sh

ln -s busybox usleep
```

linuxrc

 :Idea:  Das linuxrc-Skript wird nach dem Laden der initrd automatisch ausgeführt und enthält alle Befehle, die notwendig sind um auf das RootFs zugreifen zu können. Uns reicht eine kleine Pause, damit der USB-Stick erkannt wird. Falls wichtige Treiber (z.B. für das Dateisystem) als Modul kompiliert wurden, müssen diese hier geladen werden. Da zum Ausführen von Skripten eine Shell benötigt wird, wird auch klar warum die ash-Funktionalität von Busybox aktiviert wurde.

```
cat > /mnt/loop/linuxrc << "EOF"

#!/bin/sh

/bin/echo "Executing Busybox 'usleep 5000000'"

/bin/usleep 5000000

/bin/echo "Proceeding ..."

EOF
```

```
chmod +x /mnt/loop/linuxrc

umount /mnt/loop

gzip initrd

mount /mnt/stick

cp initrd.gz /mnt/stick/boot

umount /mnt/stick
```

Bootsplash

Zm Glück benutzen wir ja alle Gentoo  :Wink:  und können uns hier ein paar Schritte ersparen. Zunächst wird der UserSpaceStuff installiert:

```
emerge bootsplash
```

Dann besorgen wir uns ein hübsches Theme von Bootsplash.org (z.B Default Linux Theme) und entpacken es nach /etc/bootsplash. Jetzt müssen wir nur noch an unsere initrd.gz das Theme anhängen und schon wird die Konsole bunt.

 :Idea:  Das splash-Tool hängt alle für den Bootsplash wichtigen Daten an die initrd. Deswegen muß die initrd vorher gepackt werden (gzip initrd) und nicht hinterher, weil der gepatchte Kernel die Bootsplash-Daten an der initrd.gz und nicht in ihr sucht.

```
mount /mnt/stick

splash -s -f /etc/bootsplash/Linux/config/bootsplash-1024x768.cfg >> /mnt/stick/boot/initrd.gz

umount /mnt/stick
```

 :Arrow:  Falls es noch Fragen zum Bootsplash geben sollte, dann werf doch einen Blick in [HOWTO] Gentoo Bootsplash und Framebuffer von equinox0r.

RootFs + Busybox

Nun werden die benötigten Systemordner und ein paar grundlegende Dateien angelegt:

```
mount /mnt/stick

mkdir -p /mnt/stick/{bin,dev,etc/init.d,initrd,mnt,proc,root,sbin,sys,tmp,usr/{bin,sbin}}
```

/etc/inittab

```
cat > /mnt/stick/etc/inittab << "EOF"

::sysinit:/etc/init.d/rcS

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a -r

vc/1::respawn:/bin/sh

vc/2::askfirst:/bin/sh

vc/3::once:/bin/dmesg

EOF
```

/etc/init.d/rcS

```
cat > /mnt/stick/etc/init.d/rcS << "EOF"

#!/bin/sh

/bin/echo "Mounting filesystems ..."

/bin/mount -a

/bin/echo "Starting devfsd ..."

/sbin/devfsd /dev

EOF
```

Ausführbar macht das Skript gleich nochmal soviel Spaß  :Smile: 

```
chmod +x /mnt/stick/etc/init.d/rcS
```

/etc/fstab

```
cat > /mnt/stick/etc/fstab << "EOF"

none    /proc           proc    defaults        0 0

none    /sys            sysfs   defaults        0 0

none    /dev/pts        devpts  defaults        0 0

none    /dev/shm        tmpfs   defaults        0 0

none    /proc/bus/usb   usbfs   defaults        0 0

EOF
```

/etc/passwd

```
cat > /mnt/stick/etc/passwd << "EOF"

root:x:0:0:root:/root:/bin/sh

EOF
```

/etc/group

```
cat > /mnt/stick/etc/group << "EOF"

root:x:0:

bin:x:1:

EOF
```

/etc/devfsd.conf

```
cat > /mnt/stick/etc/devfsd.conf << "EOF"

REGISTER     .*      MKOLDCOMPAT

UNREGISTER   .*      RMOLDCOMPAT

EOF
```

Als nächstes kompilieren wir Busybox mit allen gewünschten Tools:

```
make menuconfig
```

```
General Configuration  --->

  [*] Support for devfs

  [*] Use the devpts filesystem for Unix98 PTYs

Build Options  --->

  [*] Build BusyBox as a static binary (no shared libs)

Archival Utilities  --->

  [*] bunzip2

  [*] gunzip

  [*] gzip

  [*] tar

  [*]     Enable archive creation (NEW)

  [*]     Enable -j option to handle .tar.bz2 files

  [*]     Enable -z option (NEW)

Coreutils  --->

  [*] cat

  [*] chgrp

  [*] chmod

  [*] chown

  [*] chroot

  [*] cp

  [*] dd

  [*] df

  [*] echo (basic SUSv3 version taking no options)

  [*] ls

  [*]     Enable filetyping options (-p and -F) (NEW)

  [*]     Enable symlinks dereferencing (-L) (NEW)

  [*]     Enable recursion (-R) (NEW)

  [*]     Show username/groupnames (NEW)

  [*] mkdir

  [*] mknod

  [*] mv

  [*] rm

  [*] rmdir

  [*]   Calculate terminal & column widths (NEW)

Editors  --->

  [*] vi

  [*]     Enable ":" colon commands (no "ex" mode) (NEW)

  [*]     Enable yank/put commands and mark cmds (NEW)

  [*]     Enable search and replace cmds (NEW)

  [*]     Catch signals (NEW)

  [*]     Remember previous cmd and "." cmd (NEW)

  [*]     Enable -R option and "view" mode (NEW)

  [*]     Enable set-able options, ai ic showmatch (NEW)

  [*]     Support for :set (NEW)

  [*]     Handle window resize (NEW)

  [*]     Optimize cursor movement (NEW)

Init Utilities  --->

  [*] init

  [*]     Support reading an inittab file? (NEW)

  [*]     Should init be _extra_ quiet on boot? (NEW)

  [*] halt

  [*] poweroff

  [*] reboot

Login/Password Management Utilities  --->

  [*] Use internal password and group functions rather than system functions

  [*] getty

  [*] login

  [*] passwd

  [*] su

  [*] sulogin

  [*] Support for shadow passwords

  [*]     Use busybox shadow password functions

Miscellaneous Utilities  --->

  [*] devfsd

Another Bourne-like Shell  --->

  Choose your default shell (ash)  --->

  [*]     Optimize for size instead of speed

Linux System Utilities  --->

  [*] dmesg

  [*] fbset

  [*]     Turn on extra fbset options (NEW)

  [*]     Turn on fbset readmode support (NEW)

  [*] mount

  [*] umount

  [*]     Support for loop devices
```

```
make dep

make

make PREFIX=/mnt/stick install

umount /mnt/stick/
```

fbi

```
emerge fbi
```

```
mount /mnt/stick

cp /usr/bin/fbi /mnt/stick/usr/bin/
```

Ein ldd /usr/bin/fbi gibt uns folgende Shared Libraries aus:

```
linux-gate.so.1 =>  (0xffffe000)

libm.so.6 => /lib/libm.so.6 (0x40021000)

libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x40043000)

libungif.so.4 => /usr/lib/libungif.so.4 (0x40061000)

libpng.so.3 => /usr/lib/libpng.so.3 (0x40069000)

libz.so.1 => /usr/lib/libz.so.1 (0x40094000)

libtiff.so.3 => /usr/lib/libtiff.so.3 (0x400a2000)

libexif.so.9 => /usr/lib/libexif.so.9 (0x400e9000)

libcurl.so.2 => /usr/lib/libcurl.so.2 (0x400fd000)

libc.so.6 => /lib/libc.so.6 (0x40127000)

/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x40248000)

libssl.so.0.9.7 => /usr/lib/libssl.so.0.9.7 (0x40325000)

libcrypto.so.0.9.7 => /usr/lib/libcrypto.so.0.9.7 (0x40356000)

libdl.so.2 => /lib/libdl.so.2 (0x40454000)
```

Zwar wäre es möglich das Binary statisch zu kompilieren, aber ich hatte während meiner Versuche mehrere nicht reproduzierbare Fehler. Deswegen kopieren wir nun alle erforderlichen Bibliotheken auf den Stick:

```
mkdir -p /mnt/stick/{lib,usr/lib}

cp /lib/libm.so.6 /mnt/stick/lib/

cp /usr/lib/libjpeg.so.62 /mnt/stick/usr/lib/

cp /usr/lib/libungif.so.4 /mnt/stick/usr/lib/

cp /usr/lib/libpng.so.3 /mnt/stick/usr/lib/

cp /usr/lib/libz.so.1 /mnt/stick/usr/lib/

cp /usr/lib/libtiff.so.3 /mnt/stick/usr/lib/

cp /usr/lib/libexif.so.9 /mnt/stick/usr/lib/

cp /usr/lib/libcurl.so.2 /mnt/stick/usr/lib/

cp /lib/libc.so.6 /mnt/stick/lib/

cp /lib/ld-linux.so.2 /mnt/stick/lib/

cp /usr/X11R6/lib/libX11.so.6 /mnt/stick/usr/lib/

cp /usr/lib/libssl.so.0.9.7 /mnt/stick/usr/lib/

cp /usr/lib/libcrypto.so.0.9.7 /mnt/stick/usr/lib/

cp /lib/libdl.so.2 /mnt/stick/lib/
```

fbi benötigt die Standard-Konsolenschriftart. Diese kopieren wir als Letztes:

```
mkdir -p /mnt/stick/usr/share/consolefonts

cp /usr/share/consolefonts/lat1-16.psfu.gz /mnt/stick/usr/share/consolefonts/

umount /mnt/stick
```

Bisherige Probleme/Fehler und deren Behebung

Problem: Der USB-Treiber wird geladen, aber kein Gerät sda angelegt. (Hinweis: Vom rootfs /dev/hdaX ist das Booten möglich.)

```
Initializing USB Mass Storage driver...

usbcore: registered new driver usb-storage

USB Mass Storage support registered.
```

Deswegen kommt es zu folgender Kernel Panic

```
VFS: Cannot open root device "sda1" or unknown-block(0,0)

Please append a correct "root=" boot option

Kernel panic: VFS: Unable to mount root fs on unknown-block(0,0)
```

Lösung: Nach dem Laden des USB-Treibers (EHCI, OHCI oder UHCI) dauert es einen Moment, bis der USB-Stick als Gerät initialisiert wird. Leider versucht der Kernel schon vorher das rootfs zu mounten  :Confused:  Deswegen starten wir über eine Initial-Ramdisk (initrd) - die wir für den Bootsplash sowieso benötigen - und warten mit der Hilfe von usleep so lange (bei mir reichen 2 Sekunden), bis /dev/scsi/host1/bus0/target0/lun0/part1 angelegt wird.

Problem: Nach dem Ausführen der /etc/init.d/rcS wird die Konsole gestartet und gibt die folgende Fehlermeldung aus:

```
Please press Enter to activate this console.

BusyBox v1.00-pre10 (2004.06.01-08:33+0000) Built-in shell (ash)

Enter 'help' for a list of commands.

-sh: can't access tty; job control turned off

/ #
```

Die Konsole funktioniert, aber die Meldung stört.

Das Vergrößern der Ramdisk auf 8192k bringt auch keine Abhilfe (Tip aus: /bin/sh: can`t access tty; job control turned off und BOOT problem).

Ein manuelles Anlegen der Geräte hilft auch nicht.

```
mknod /mnt/stick/dev/tty c 5 0

mknod /mnt/stick/dev/tty0 c 4 0

mknod /mnt/stick/dev/tty1 c 4 1

...
```

Lösung: Warum auch immer werden keine tty-Geräte in /dev angelegt, auf denen init die Konsole öffnen will. Der folgende Eintrag in der /etc/inittab zwingt init die virtuelle Konsole /dev/vc/0 zu benutzen:

```
vc/1::respawn:/bin/sh
```

Bookmarks

Booting Linux off of a USB drive

bootingUSB HOWTO

Build a Gentoo install/boot/rescue LiveCD USB

Pocket Linux Guide

The Linux Bootdisk HOWTO

From Power Up To Bash Prompt

How To Build a Minimal Linux System from Source Code

Linux Magazin - Der Weg zur eigenen Minidistribution 

...

Gruß, Inte.

----------

## Sas

Hallo Inte,

hast du es statt mit '/dev/sda' bzw '/dev/sda1' mal mit '/dev/scsi/host0/bus0/target0/lun0/disc'  bzw '/dev/scsi/host0/bus0/target0/lun0/part1' versucht?

Ansonsten: Kannst du denn auf den Stick zugreifen, wenn du deinen Kernel von /dev/hdaX bootest?

Gruß und viel Erfolg noch,

S(il)as

----------

## Inte

 *Sas wrote:*   

> hast du es statt mit '/dev/sda' bzw '/dev/sda1' mal mit '/dev/scsi/host0/bus0/target0/lun0/disc'  bzw '/dev/scsi/host0/bus0/target0/lun0/part1' versucht?

 Hab ich. Leider ist der Fehler identisch.

 *Sas wrote:*   

> Ansonsten: Kannst du denn auf den Stick zugreifen, wenn du deinen Kernel von /dev/hdaX bootest?

 Das geht. Rate mal wie ich den Kernel und Grub auf den Stick bekommen habe  :Wink:  Ich kann sogar mit dem Kernel vom Stick mein System von der Platte booten. Nur das System auf dem Stick läßt sich wegen dem bekannten Kernel Panic nicht mounten/starten.

 *Sas wrote:*   

> Gruß und viel Erfolg noch,
> 
> S(il)as

 Danke  :Smile: 

Gruß, Inte.

----------

## Sas

Hmm, dann bestünde natürlich noch die Möglichkeit, dass der fstab-Eintrag fehlerhaft ist... Aber das hättest du sicher auch schon selbst bemerkt  :Wink: 

Sonst fällt mir im Moment auch nichts mehr ein, das Problem scheint also datenträgerspezifisch zu sein.

----------

## Sas

Ich habe gerade gelesen, dass man um von einer SCSI-Platte booten zu können SCSI low-level drivers im Kernel haben muss.

Normalerweise würde ich ja auch sagen, dass das für einen USB-Stick _nicht_ vonnöten ist, aber da mir sonst auch nichts mehr einfällt... einen Versuch ist es vielleicht dennoch wert.

Ansonsten würde ich mal versuchen USB Massstorage und/oder SCSI Disk Support als Module zu Kompilieren und via initrd zu laden.

Sag bitte auf jeden Fall, wenn du weißt worans lag, denn das interessiert mich auch  :Wink: 

----------

## dakjo

Ich war auch schon mal soweit. Soweit ich weiss liegt das ein einem Timing problem. Der Kernel brauch einige Zeit um USB-Devices zu regestrieren und dann eine verknüpfung auf /dev/sd* herzustellen. Er kommt aber garnicht erst bis dahin. Da er vorher schon den VFS Error bekommt.

----------

## Inte

Danke für die Tipps. Es war das Timing-Problem. Jetzt geht's mit dem RootFs weiter.  :Very Happy: 

Gruß, Inte.

----------

## Inte

[UPDATE]

Booten und hübsch Aussehen kann mein USB-Stick schon.  :Very Happy: 

Bis auf den Shell-Fehler (siehe oben) , den fehlenden Login (brauch ich sowas überhaupt?) und mein eigentliches Ziel (FramebufferImageViewer) funktioniert alles.

Gruß, Inte.

PS.: Was wäre Euch lieber: FBI oder DFBSee?  :Rolling Eyes: 

----------

## icefox13

Hi Inte,

respekt, scheint ein gutes Projekt zu werden.

Eines konnte ich beim Überfliegen des Threads noch nicht ausmachen: Welche Größe peilst du für den USB-Stick an? bzw. wie groß sollte das System auf dem Stick maximal werden?

Danke,

icefox13

----------

## Inte

 *icefox13 wrote:*   

> Eines konnte ich beim Überfliegen des Threads noch nicht ausmachen: Welche Größe peilst du für den USB-Stick an? bzw. wie groß sollte das System auf dem Stick maximal werden?

 Momentan ist das System 6MB groß. Wenn die Funktionalität hergestellt ist, werd ich noch ein paar "Vielleicht könnte ich es ja gebrauchen"-Pakete rausschmeißen.

----------

## mo-ca

mensch inte, respekt !!!!!

wenn ich nen stick hätte, würde ich sofort mitmachen, denn ich denke mal, dass es übelst praktisch ist, wenn man so nen "notnagel" noch hat (quasi die bootdisk von morgen)

die frage ist: was planst du noch alles? also 2 sachen stehen noch aus, aber könnte das vllt sogar ein installationsmedium für gentoo werden ? die minimal disk ist ja auch nicht sooo riesig und ein etwas größerer stick müsste ja reichen, oder?

btw: was hast du für nen stick genommen?

----------

## bloodcount

Hi, ist es mögliches folgendes Szenario über einen USB Stick ablaufen zu lassen und wenn ja, wie am besten?  :Wink: 

- Rechner bekommt Strom 

- Bootet (mit bootsplash)

- Kein Login notwendig

- Startet Direkt den X-Server und ein bestimmtes Programm

- Com 1 muss initalisiert werden, sodass eine Telnet Sitzung über diesen Port aufgebaut werden kann. 

Das wichtigste dabei ist der speed, also das die Boot Zeit kurz ist.

Auch sollte es dem Rechner nichts ausmachen "einfach ausgeschaltet" zu werden.

Bin für Tipps / Anregungen sehr dankbar.

Wollte am Samstag mal "Damn Small Linux" ausprobieren, aber da stellt sich noch die Frage wie ich das ohne Login schaffen kann.

Aber vielleicht ist das ganze ja auch mit gentoo möglich, was mir natürlich lieber wäre   :Surprised: 

----------

## dakjo

So mein Stick läuft jetzt auch, das einzige Problem das ich habe, ist das es kein /dev/sda1 gibt ? Dafür brauch ich hotplug oder ?

Das Problem ist das es an manchen PCs /dev/scsi/host0 an manchen host1 und an anderen host2 ist .

Nee, hotplug ? Weiss das einer ?

----------

## Inte

 *dakjo wrote:*   

> So mein Stick läuft jetzt auch, das einzige Problem das ich habe, ist das es kein /dev/sda1 gibt? Dafür brauch ich hotplug oder?

 Wahrscheinlich ist Dir aufgefallen, daß es auch kein /dev/hdx gibt. Im 2.4er Kernel wurden mit dem devfs neue Gerätenamen eingeführt (New device names). Wie die alten Gerätenamen angelegt werden (bzw. die Links gesetzt), hab ich noch nicht in Erfahrung bringen können.

 *dakjo wrote:*   

> Das Problem ist das es an manchen PCs /dev/scsi/host0 an manchen host1 und an anderen host2 ist.

  Sicher? Wenn Du den Stick an ein laufendes System anschließt, bekommt er jedesmal eine neue HostID zugewiesen. Beim Neustart sollte der Stick immer unter host0 liegen.

Gruß, Inte.

----------

## dakjo

 *Quote:*   

>  Sicher? Wenn Du den Stick an ein laufendes System anschließt, bekommt er jedesmal eine neue HostID zugewiesen. Beim Neustart sollte der Stick immer unter host0 liegen. 

 

Ja bin ich. An dem Gerät ist nichts angeschlossen an usb, ausser halt der stick.

Wenn ich dann von ihm boot fält der auf die nase, weil es /dev

/scsi/host0/* nicht gibt. Mit nem init=/initrd/bin/sh hab ich trotzdem ne shell.

Und es gibt nur /dev/scsi/host2/. Beim booten erkennt er auch nicht anderes.

LÖSUNG :

Ich schreib mir einfach nen shell script, was dann in /dev/scsi nach vorhandenen part sucht und linkt dann den ersten nach /dev/sda1  :Smile: [/code]

----------

## Massa

Ich bin gerade auf diesen Thread gestossen, weil ich auf der Suche nach einer Lösung für mein Problem war.

Mein generelles Problem: Booten von gentoo von einer externen USB2-Platte.

Das scheint sehr ähnlich zum USB-Stick zu sein, nur halt mit mehr Platz  :Wink: 

Es hat mir schon sehr geholfen zu erfahren, dass ich eine initrd bauen muss um eine Zeitverzögerung zu erhalten.

Das funktioniert soweit auch (4 Sekunden Verzögerung) und ich sehe jetzt wenigstens, dass er die Platte erkennt (das kam ohne die Verzögerung nicht)

Leider schaffe ich es immer noch nicht, den Kernel zum mounten der Root-Partition zu bringen.

Für den "root=" Parameter habe ich schon alle /dev/sdaXX durchprobiert (eigentlich sollte 7 bei mir die richtige Partition sein) sowie die Variante mit "/dev/scsi/..."

Um dort das richtige anzugeben habe ich vorher von CD gebootet und dort nach dem richtigen Device geschaut.

Kann es sein, dass sich das beim direkten Booten der Platte (aus dem Bios heraus direkt die USB-Platte angewählt; Grub sitzt auf dieser Platte im MBR)

Gibt es eine einfache Möglichkeit, wie ich von der USB-Platte booten kann und direkt aus der RAM-Disk heraus einen Boot-Prompt erhalte?

Ich habe die Vermutung, dass sich die Device-Struktur durch das direkte Auswählen der Platte im Bios gegenüber einem Booten von CD geändert hat.

Aber wie kann ich herausfinden, welches das richtige Device ist???

Achja, das ganze ist auf einem Dell Laptop Latitude D800, falls das was bringt  :Smile: 

----------

## Massa

 *Massa wrote:*   

> Gibt es eine einfache Möglichkeit, wie ich von der USB-Platte booten kann und direkt aus der RAM-Disk heraus einen Boot-Prompt erhalte?

 

Diese Frage hat sich dank dem Beitrag wohl erledigt  :Laughing:  (der kam in der Zeit, wo ich am Schreiben meines Beitrags war...)

 *dakjo wrote:*   

> Mit nem init=/initrd/bin/sh hab ich trotzdem ne shell. 

 Damit werde ich dann mal schauen, wo bei mir das Device liegt  :Smile: 

----------

## Massa

Hmm, die Frage hat sich wohl doch noch nicht erledigt.

Weil es nämlich nicht funkioniert  :Sad: 

Wenn ich es recht verstehe, wuerde der Init-Prozess (also in dem Fall die Shell) erst _nach_ dem (erfolgreichen) mounten des Root-Devices kommen.

Also bin ich immer noch ziemlich ratlos, wie bei mir das Device heisst...

Weiss keiner mehr weiter?

Oder bin ich hier im Thread soweit OT, dass keiner antwortet und ich besser einen neuen Thread aufmachen sollte?

----------

## dakjo

Wenn der kernel und initrd geladen ist , sollte es mit der shell gehen.

Der initrd wird ja erstmal entpackt. Er liegt dann unter /initrd.

Bei mir gehts jedenfalls so.

----------

## Inte

 *dakjo wrote:*   

> So mein Stick läuft jetzt auch, das einzige Problem das ich habe, ist das es kein /dev/sda1 gibt ? Dafür brauch ich hotplug oder?

 

Hab jetzt rausgefunden, wie die alten Devices angelegt werden:Linux Devfs (Device File System) FAQ - Old Compatibility NamesBusyBox - devfsd

Oder kurz zusammengefasst:

```
cat >> /mnt/stick/etc/init.d/rcS << "EOF"

/bin/echo "Starting devfsd ..."

/sbin/devfsd /dev

EOF
```

```
cat > /mnt/stick/etc/devfsd.conf << "EOF"

REGISTER     .*      MKOLDCOMPAT

UNREGISTER   .*      RMOLDCOMPAT

EOF
```

Gruß, Inte.

----------

## Sonie

Der Beitrag ist klasse...,so richtig fit mit Linux bin ich aber nicht... weshalb ich mir nicht immer zu helfen weiss..

Mein Problem ist im Augenblick hier: mit GRUB kann ich keinen Bootblock auf den USB-Stick schreiben.. er meldet nur HD0 und HD2 (Cdrom) als Laufwerke. Den USB-Stick selber kann ich aber mit /dev(SDA2 mounten...)

Gentoo 2.6.5r1 P4, 3ghz Notebook mit I865-Chipsatz

Für einen Tipp wäre ich echt dankbar..

----------

## dakjo

Dann sollte es ja hd3 sein !

----------

## Massa

 *dakjo wrote:*   

> Wenn der kernel und initrd geladen ist , sollte es mit der shell gehen.
> 
> Der initrd wird ja erstmal entpackt. Er liegt dann unter /initrd.

 

Ja, initrd wird entpackt und auch linuxrc daraus ausgeführt.

Danach will er aber dann zuerst das root-device mounten, danach käme dann das starten des init-Prozesses.

Und soweit kommt er bei mir eben schon nicht mehr  :Sad: 

 *dakjo wrote:*   

> Bei mir gehts jedenfalls so.

 Bei mir leider nicht  :Crying or Very sad:  (Kernel Sourcen sind übrigens bei mir 2.6.5-gentoo-r1)

Geht das bei Dir auch mit falschen Angaben "root=XXX" ?

----------

## Inte

 *Massa wrote:*   

> Ja, initrd wird entpackt und auch linuxrc daraus ausgeführt.
> 
> Danach will er aber dann zuerst das root-device mounten, danach käme dann das starten des init-Prozesses.
> 
> Und soweit kommt er bei mir eben schon nicht mehr 

 Klar geht's nicht weiter, weil init erst nach dem Mounten der der Root-Partition gestartet wird.

Versuch mal die initrd als root anzugeben:

```
root=/dev/ram0 init=/bin/sh
```

Dann sollte die Shell der initrd gestartet werden.

Gruß, Inte.

----------

## Massa

 *Inte wrote:*   

>  *Massa wrote:*   Ja, initrd wird entpackt und auch linuxrc daraus ausgeführt.
> 
> Danach will er aber dann zuerst das root-device mounten, danach käme dann das starten des init-Prozesses.
> 
> Und soweit kommt er bei mir eben schon nicht mehr  Klar geht's nicht weiter, weil init erst nach dem Mounten der der Root-Partition gestartet wird.
> ...

 Ist doch meine Rede  :Wink: 

Ich habe mich nur gewundert, dass es bei dakjo geht.

 *Inte wrote:*   

> Versuch mal die initrd als root anzugeben:
> 
> ```
> root=/dev/ram0 init=/bin/sh
> ```
> ...

 Der Tipp war Gold wert  :Smile: 

Jetzt habe ich eine Shell - Hurra!

Jetzt kann ich schauen, welches Device meine USB-Platte ist.

Doch halt, da stimmt doch was nicht  :Question: 

Es gibt /dev/scsi, das ist aber komplett leer!?

Ebenso mit /dev/usb, auch existent aber komplett leer!?

Aber ich habe doch SCSI-Support und USB-Support im Kernel (eingebaut, nicht als Modul)- Seltsam!

Es gibt noch ein "/dev/discs/disc0/disc" und "/dev/ide/...", das ist aber immer meine IDE-Platte...

woher weiss der devfsd eigentlich, dass er ein USB-Storage Device in ein SCSI-Device umwandeln soll?

Und durch was erkennt devfsd eigentlich neue USB-Devices?

Sagt ihm der Kernel das?

Ein "mount -t devfs -o remount none /dev" hilft leider auch nicht.

Ich bin mal wieder etwas ratlos....  :Confused: 

----------

## Inte

Freut mich, daß die Konsole funktioniert.  :Smile: 

 *Massa wrote:*   

> Es gibt /dev/scsi, das ist aber komplett leer!?
> 
> Ebenso mit /dev/usb, auch existent aber komplett leer!?
> 
> Aber ich habe doch SCSI-Support und USB-Support im Kernel (eingebaut, nicht als Modul)- Seltsam!
> ...

 

Schau Dir die Kernelkonfiguration nochmal genau an. Irgendetwas muß fehlen. In /dev/scsi und /dev/discs/disc1 erscheint bei richtiger Konfiguration der Stick.

 *Massa wrote:*   

> woher weiss der devfsd eigentlich, dass er ein USB-Storage Device in ein SCSI-Device umwandeln soll?
> 
> Und durch was erkennt devfsd eigentlich neue USB-Devices?
> 
> Sagt ihm der Kernel das?

 Meinst das automatische Verlinken von /dev/scsi/host1/bus0/target0/lun0/part1 auf /dev/sdx, oder worauf willst Du hinaus? Ein USB-Stick wird immer als SCSI-Gerät erkannt.

```
 [*]   SCSI disk support

If you want to use SCSI hard disks, Fibre Channel disks,                                                                                      

USB storage or the SCSI or parallel port version of                                                                                            

the IOMEGA ZIP drive, say Y ...
```

Die folgenden Optionen hast Du auch aktiviert?

```
USB support  --->

    [*] Support for Host-side USB

    [*]   USB device filesystem

    [*]   EHCI HCD (USB 2.0) support

    [*]   UHCI HCD (most Intel and VIA) support

    [*]   USB Mass Storage support
```

Vielleicht braucht Dein Board ja OHCI anstatt EHCI/UHCI. Boote mal mit der LiveCD und mach ein lspci.

Gruß, Inte.

----------

## Massa

 *Inte wrote:*   

> Freut mich, daß die Konsole funktioniert. 

 Ja, jetzt kann ich endlich Forschungsarbeit betreiben  :Smile: 

Inzwischen bin ich ein Stück weiter.

Du hattest natürlich Recht, der Kernel war falsch konfiguriert SCSI-Support war doch nur als Modul konfiguriert.

In meine linuxrc habe ich jetzt als letzten Befehl /bin/bash reingeschrieben; damit habe ich auch eine Shell (die ich ggf. auch wieder verlassen kann  :Wink:  )

Wenn ich jetzt boote, und mittels des Shell-Prompts nach den Devices schaue, habe ich folgendes:

  /dev/scsi/host0/bus0/target0/lun0/disc

d.h. devfs sieht jetzt (dank Deiner Hilfe) schonmal meine USB-Platte - sehr gut  :Smile: 

  aber irgendwie nur als ganzes und nicht die einzelnen Partitionen, weil "disc" ist das einzige dort, keinerlei "partXX"  :Sad: 

Fehlt mir doch noch irgendwas anderes im Kernel? Oder habe ich etwas zu viel?

 *Inte wrote:*   

>  *Massa wrote:*   woher weiss der devfsd eigentlich, dass er ein USB-Storage Device in ein SCSI-Device umwandeln soll?
> 
> Und durch was erkennt devfsd eigentlich neue USB-Devices?
> 
> Sagt ihm der Kernel das? Meinst das automatische Verlinken von /dev/scsi/host1/bus0/target0/lun0/part1 auf /dev/sdx, oder worauf willst Du hinaus? Ein USB-Stick wird immer als SCSI-Gerät erkannt.

 Ich meinte die Mitteilung des Kernel (bzw. des Hotplug-Systems), dass da ein neues Device am USB ist und dass es zum SCSI-Gerät wird.

Aber wie Du schon sagtest, die werden immer als SCSI-Device erkannt.

Für /dev/sdXX brauche ich dann ja wohl den devfsd mit "alten Devices" Support, so wie Du es beschrieben hast...

... das ist mir momentan noch nicht so wichtig  :Wink: 

 *Inte wrote:*   

> Die folgenden Optionen hast Du auch aktiviert?
> 
> ```
> USB support  --->
> 
> ...

 Nein, das mit EHCI war schon richtig, da USB2

Ich habe EHCI und MassStorage Support direkt in den Kernel kompiliert und die anderen (EHCI/OHCI) als Module...

Die Kontrolle der Kerneloptionen ist etwas schwierig, da bei mir die Optionen z.T. etwas anders aussehen, da ich noch die gentoo-2.6.5-r1 Sourcen verwende (ich habe auf dem Laptop unter Linux noch keinen Netzwerkzugang, das ist eine weitere Tätigkeit die ich noch machen muss).

Die Parameter aus der .config-Datei wären da IMHO besser (oder ändern sich die genauso oft?)

----------

## Massa

kleine Ergänzung:

  Das mit "XXX/disc" als einzigem Device ist nicht nur bei den SCSI-Devicen so, auch bei IDE (d.h. /dev/ide/...)  :Shocked: 

Woran könnte das liegen?

----------

## Ragin

Nachdem ich mir dank diesem Thread nen USB Stick gekauft habe  ( :Smile: ) funktionierte alles wunderbar bis auf grub.

```

grub> root (hd

 Possible disks are:  hd0 hd1

                                                                                

grub> root (hd1,0)

 Filesystem type unknown, partition type 0x6

                                                                                

grub>

```

Hat jemand eine Idee woran das liegen könnte?

FS ist ext2 genau wie angegeben...

----------

## Ragin

Des weiteren fehlte bei mir libFS.so und libz.so.1 für fbi:

```

cp /usr/X11R6/lib/libFS.so.6 /mnt/stick/lib/

ln -sf /usr/lib/libz.so /usr/lib/libz.so.1

```

----------

## Ragin

So, grub funktioniert.

Das Problem lag daran, dass der USB Stick noch FAT16 als Partitionseintrag hatte.

Dank fdisk und der Typenänderung wurde nun alles korrekt erkannt.

----------

## Tazok

Ich kriege beim Booten immer die Meldung: ugusb 1-6 control timeout on ep0out

ehci_hcd [...] Unlink after no-IRQ? Different ACPI or APIC settings may help.

[...] usb 1-6: device not accepting address 2, error -110 [...]

Was kann ich jetzt machen?

APIC habe ich nicht im kernel und mit acpi=off funktioniert es auch nicht.

----------

## R4zz0r

 *Ragin wrote:*   

> Nachdem ich mir dank diesem Thread nen USB Stick gekauft habe  () funktionierte alles wunderbar bis auf grub.
> 
> ```
> 
> grub> root (hd
> ...

 

Hi.Hab genau das selbe problem.Hab nur absolut keine Ahnung wie man das problem behebt.Hab leider noch nie Fdisk benutzt  :Sad: .Ich hoffe hier ist wer der mir mal nen schnellsteinstieg geben kann  :Wink: .Würd auch gern den stick mitbauen  :Smile: 

----------

## Inte

 *R4zz0r wrote:*   

> Hi.Hab genau das selbe problem.Hab nur absolut keine Ahnung wie man das problem behebt.Hab leider noch nie Fdisk benutzt .Ich hoffe hier ist wer der mir mal nen schnellsteinstieg geben kann .Würd auch gern den stick mitbauen 

 

man fdisk - Die Anleitung hat noch niemanden geschadet!

... und hier etwas ausführlicher (vorausgesetzt /dev/sda ist Dein USB-Stick):

Einfach fdisk /dev/sda aufrufen, dann die Partitionen löschen (mit d) und eine neue primäre Partition anlegen (mit n {new}, p {primary} und 1 {no. 1}). Danach noch formatieren, wie im Howto erklärt (mke2fs /dev/sda1) und schon sollte es funktionieren.

Gruß, Inte.

PS.: Sorry, wenn ich etwas knapp angebunden bin, aber etwas Eigenleistung erwarte ich schon  :Wink: 

----------

## R4zz0r

Oh.man.Ich bin ja so doof *gg*.Danke für die hilfe.Naja.Is ja schon spät  :Wink: ..... geht nu auf alle fälle  :Smile: 

----------

## Urbanus

Ich habe gerade versucht das ganze auf meinem MP3-Stick (cebop run) zum Laufen zu bringen, leider klappt es nicht so richtig, weil der Stick sich wohl weigert mit ext2 zusammenzuarbeiten ("Data error please reset"). Nichtsdestotrotz lässt sich der Stick als /dev/sda1 unter Gentoo mounten. Allerdings klappt das Booten nicht, was aber auch am Bios meines Rechners liegen kann (habe schon alle USB-Varianten ausprobiert, auch mit Feather Linux). Werde mal schauen, ob ich es mit einer Bootdisk hinbekomme, bin mir da aber nicht so sicher (meine Linux-Kenntnisse in dieser Richtung sind recht begrenzt). Dazu kommt eben, dass der Stick erst erkannt wird wenn man ihn nach dem Booten des Rechners ansteckt (wohl wegen dem Data Error).

Wäre es möglich den Stick auch mit FAT32 zu formatieren und dann das System aufzuspielen? Oder geht das nur über ein loop-Device?

----------

## Inte

 *Urbanus wrote:*   

> Ich habe gerade versucht das ganze auf meinem MP3-Stick (cebop run) zum Laufen zu bringen, leider klappt es nicht so richtig, weil der Stick sich wohl weigert mit ext2 zusammenzuarbeiten ("Data error please reset").

 Es gibt einige USB-Sticks die sich einfach weigern mit einem anderen Dateisystem als FAT zu arbeiten. Manchmal hilft ein Löschen und Neuanlegen der Partitionstabelle. Während der verschiedenen Tests, die ich durchgeführt habe gab es sogar Unterschiede in identischen Serien.  :Shocked: 

 *Urbanus wrote:*   

> Nichtsdestotrotz lässt sich der Stick als /dev/sda1 unter Gentoo mounten. Allerdings klappt das Booten nicht, was aber auch am Bios meines Rechners liegen kann (habe schon alle USB-Varianten ausprobiert, auch mit Feather Linux). Werde mal schauen, ob ich es mit einer Bootdisk hinbekomme, bin mir da aber nicht so sicher (meine Linux-Kenntnisse in dieser Richtung sind recht begrenzt).

 Der Zugriff aus dem laufenden System heraus sollte keinerlei Probleme machen (vorausgesetzt, das System ist richtig Konfiguriert). Genauso sollte das Booten von Diskette möglich sein, aber ehrlich gesagt, war ich bisher zu faul das System zu minimieren. Wenn Du "nur" eine Bootdisk brauchst, dann empfehle ich Dir die Links meines ersten Beitrages.

 *Urbanus wrote:*   

> Dazu kommt eben, dass der Stick erst erkannt wird wenn man ihn nach dem Booten des Rechners ansteckt (wohl wegen dem Data Error).

 Beim Booten von USB gibt es zwei Variablen, die Ärger bereiten können. Erstens die fehlende oder schlecht implementierte USB-Boot-Option im BIOS, und Zweitens der USB-Stick, der nicht immer bootfähig sein muß. Bei fehlender/fehlerhafter BIOS-Funktionalität bleibt nur die Hoffnung auf ein Update. Währenddessen bei der Auswahl des USB-Sticks ein Fünkchen Glück dazugehört, da es wie oben beschrieben auch in ein und derselben Serie zu Ausreißern kommen kann.  :Confused: 

 *Urbanus wrote:*   

> Wäre es möglich den Stick auch mit FAT32 zu formatieren und dann das System aufzuspielen? Oder geht das nur über ein loop-Device?

 Was für ein Dateisystem Du benutzt ist Dir freigestellt. Einige USB-Sticks funktionieren sogar nur mit diesem propietären Dateisystem. Ich habe in meinem HOWTO ext2 gewählt, da der Support unter Linux nativ ist, keine Journaling-Funktion (wie bei ext3) die Lebensdauer reduziert (obwohl der Stick momentan eh nur Readonly gemounted wird), und ich unter Windows sowieso nicht auf das gute Stück zugreifen will.  :Wink: 

Gruß, Inte.

PS.: Wenn ich Zeit habe, wird das System noch minimiert und SquashFS ins HOWTO integriert. Bin mal gespannt, wie klein ich meine gewünschte Funktionalität bekomme. Im Moment arbeite ich noch an diversen Skripten um dem Stick eine persönliche Note zu geben  :Wink: 

----------

## Sonie

hi.

Ich komm hier leider nicht weiter. Nachdem ich erstmal einen PC suchen musste, der überhaupt bereit war, von USB zu booten, bleibt der dann einfach stehen:

GRUB

und das wars...?

Ein Freund von mir meinte, ich solle den Stift mal als BIG-FloppyDisk formatieren, womit der Stift auf meine Kiste sich dann auch wieder meldet: "USB-FDD"... nur booten will er trotzdem nicht. Mir gelingt es aber auch dann nicht mehr mit grub einen Bootsector auf den Stift zu schreiben, weil er ja dann gar keine Partition hat. 

und jetzt weiß ich nicht mehr weiter.

bin um jeden tip dankbar.

----------

## Crash80

wo ihr euch doch mit nem usb stick als bootmedium für gentoo befasst wollte ich mal fragen ob ihr euch schon schlau gemacht habt wie das mit der haltbarkeit des usb-sticks aussieht?

nach meinem wissen sind die dinger doch nicht als "festplatten-ersatz" sondern eher als "ab-und-zu-mal-drauf-schreib"-geräte gedacht und dürften daher auch nicht wirklich lange als fesplatte halten oder?

----------

## Sas

Im Gegenteil. So ein Stick hat ja keine mechanischen Teile, also verschleißt auch nichts.

Nun sind die ja noch nicht so lange im Handel, dass man was über Lebensdauer sagen könnte, aber Flashspeicher allgemein halten schon lange.

----------

## Crash80

flash speicher sind aber generell nicht gedacht tausende von schreibzugriffen auszuhalten.

hab ma gegoogelt, aber logischerweise nichts passendes gefunden. ihr habt also echt vor nen usb stick quasi als festplatte zu verwenden ?

----------

## AGM

Würde mich aber auch intressieren, wieviele Schreibzugriffe so ein Stick aushalten kann! Könnte man ja prima als "Festplatte" in einem lüfterlosen Mini-ITX / Thinclientsystem verwenden.  :Smile: 

----------

## Inte

 *Crash80 wrote:*   

> ihr habt also echt vor nen usb stick quasi als festplatte zu verwenden ?

 

Ich benutze meine USB-Sticks/CF-Karten nicht als Platte

Die Hersteller garantieren 120.000 Schreib-/Lesevorgänge für jeden Sektor. Wenn die Applikation bekannt ist, werden unter Umständen sogar 250.000 Zugriffe garantiert.

Die interne Logik sorgt dafür, daß alle Sektoren gleichmäßig belastet werden.

In diesem speziellen Fall (bootfähiger Stick), wird das gute Stück nur zum booten benutzt. Quasi eine Rettungsdiskette mit speziell auf das System angepaßten Kernel. Gerade bei ungewöhnlicher Hardware ist das sehr nützlich.

Ein Festplattenersatz (im herkömmlichen Sinn) ist ein USB-Stick nicht! Die Performance ist zu schlecht und die garantierten RW-Zyklen zu gering. Jedoch sind in Embedded Systemen (Handy, mp3-Player, etc.), wo es vor allem auf Stoß- und Rüttelfestigkeit ankommt, FLASH-Speicher die erste Wahl.Sonst noch Fragen?  :Rolling Eyes: 

Gruß, Inte.

----------

## Crash80

genau das meinte ich  :Sad:  würd mir gern nen "anrufbeantworter" plus noch paar kleinigkeiten mit nem minirechner + usbstick basteln, aber habs bisher gelassen weil die sticks dafür ja net ausgelegt sind.

als bootdisk spricht ja nix gegen. wobei es interessant wäre ein system auf nem bootstick laufen zu lassen und meinet wegen alle 5 stunden den ram zu flushen. müsste ja eigtl machbar sein.

viel glück bei eurem vorhaben noch  :Smile: 

----------

## BlinkEye

@ Inte: das ist ein hervorragendes howto. ich bin seit 10 stunden damit beschäftigt, eine anleitung zu finden und anleitungen zu befolgen, wie ich ein minimal system auf meinen usb stick bringe - als notlösung, da mein laptop keine laufwerke hat und ich auch kein usb floppy zur verfügung habe. es funktioniert! - mit ausnahme des bootsplashs   :Sad: 

----------

## BlinkEye

 *Inte wrote:*   

> Schau Dir die Kernelkonfiguration nochmal genau an. Irgendetwas muß fehlen. In /dev/scsi und /dev/discs/disc1 erscheint bei richtiger Konfiguration der Stick.
> 
> Gruß, Inte.

 

zur info: 

ich musste

```
kernel=(hd0,0)/boot/bzImage root=/dev/scsi/host1/bus0/target0/lun0/part1
```

auf

```
kernel=(hd0,0)/boot/bzImage root=/dev/scsi/host0/bus0/target0/lun0/part1
```

in der grub config ändern

----------

## Crash80

bin ich per zufall drüber gestolpert:

wer sein usb stick möglichst selten beschreiben will sollte sich ma

```
emerge noflushd

```

ansehen  :Smile: 

----------

## Eric E.

Hallo,

also ich hab es mal ohne die initrd auf eine USB-Platte installiert, klappt soweit auch wunderbar, allerdings mit einem 2.4.26-gentoo-r9 Kernel und dem irgendwo ganz oben erwähnten Patch in linux/init/do_mounts.c

Sieht dann in etwa so aus:

```
...

static void __init mount_root(void)

{

// patch Anfang

static DECLARE_WAIT_QUEUE_HEAD (jordi_queue);

printk ("\n\n\nXXXXXXXXXXXXXXX\n");

printk ("WAITING FOR A WHILE (1000) \n");

printk ("TO DETECT THE USB DISK \n");

sleep_on_timeout (&jordi_queue, 2000);

printk ("XXXXXXXXXXXXXXX\n\n\n");

// patch Ende

#ifdef CONFIG_ROOT_NFS

       if (MAJOR(ROOT_DEV) == NFS_MAJOR

...

```

ich würde gerne den 2.6er Kernel verwenden, leider hat sich da mächtig viel geändert in der entsprechenden Quelldatei. Könnte vielleicht mal jemand mit mehr Ahnung da reinschauen und die passende Stelle für den Patch in den 2.6er Quellen rausfrickeln ?

Ansonsten, super Projekt und vielen Dank  :Smile: 

----------

## Inte

Hab ich mal vor einiger Zeit via PN bekommen. Vielleicht kannst Du es gebrauchen:  :Wink:   *oddvay wrote:*   

> moin,
> 
> falls du noch am basteln bist : )
> 
> als alternative zur initrd, laesst sich das timing problem auch 
> ...

 Gruß, Inte.

----------

## BlaZoR

Hört sich interessant an  :Very Happy: 

Was meint ihr? Was für'n USB Stick bräuchte man für Gentoo+Fluxbox+xmms+xine/mplayer+firefox? 

 :Wink: 

----------

## Crash80

bin mir jetzt nicht sicher, aber überleg ma wieviel fluxbox allein schon hat ( 30 mb), firefox hat auch nochmal mind 10, ich glaub das kannste vergessen auf nem usb stick unterzubringen.

btw als festplatte solltest das ding ja eh net dauerhaft verwenden und performance technisch wollte ich das auch nicht machen

----------

## BlaZoR

Hm? Ich glaub' aber schon, dass das geht, man schaue sich DamnSmallLinux an  :Wink: 

----------

## Crash80

wenn du dir die liste anschaust welche anwendungen das ding mitbringt, sind das aber alles keine "klötze"...

ich kann dir leider auch nicht mehr sagen wieviel mein gentoo direkt nachmemergen vom X hatte. bin mir aber ziemlich sicher, daß das mehr als 150 MB waren.

das größere problem ist in meinen augen aber die verwendung des usb sticks als festplatte, was ich ja schon ein paar posts vorher angesprochen hatten

----------

## doom4

wie bekomme ich denn den grub aus dem mbr vom stick? 

ich hatte das hier ausprobiert alles lief auch toll habe mit fdisk nun wieder auf fat16 gestellt und vfat formatiert aber der grub ist immernoch da  :Smile: 

weiss jmd rat?

danke

----------

## fejf

darf ich dir evtl. ein wenig arbeit abnehmen und dir empfehlen mal einen blick auf http://spblinux.sourceforge.net zu werfen? das ist zwar ein etwas anderer ansatz aber vielleicht für einige die über diesen thread stolpern sicher interessant. zumindest benutz ich das.

----------

## fejf

 *doom4 wrote:*   

> wie bekomme ich denn den grub aus dem mbr vom stick? 
> 
> ich hatte das hier ausprobiert alles lief auch toll habe mit fdisk nun wieder auf fat16 gestellt und vfat formatiert aber der grub ist immernoch da 
> 
> weiss jmd rat?
> ...

 

wenn du noch daten brauchst auf festplatte sichern und dann

dd if=/dev/zero of=/dev/(usb-device hier)

zb. 

dd if=/dev/zero of=/dev/sda

fejf

----------

## doom4

ich hatte garnicht mehr an diesen post gedacht ist schon so lange her. also ich habe nun dsl linux weil irgendwie selber bauen komm ich nicht so recht mit dem compressions verfahren zurecht. aber naja kommt zeit kommt rat. das mit dem grub habe ich geloest in dem ich von syslinux den mbr.bin in den usb mbr geschrieben habe.  deine variante hatte ich versucht aber grub war weiterhin im mbr  :Smile: 

----------

## stefanschramm

Hi,

hatte das gleiche problem, dass das USB-Dings sich zu spät meldet, und dann das Mounten der Root-Partition nicht geklappt hat, weil /dev/sda1 noch nicht existierte. Das mit der Initrd war mir zu aufwändig. - Deshalb ein wahrscheinlich furchtbar dreckiger Hack in der /usr/src/linux/drivers/usb/storage/usb.c:

In Zeile 1068 kommt die "USB Mass Storage support registered"-Meldung. Da hab ich einfach noch ein msleep(10000); drunter gehängt (meine USB-Platte braucht leider echt ziemlich lange).

Der Teil sieht jetzt so aus:

```
if (retval == 0)

{

    printk(KERN_INFO "USB Mass Storage support registered, sleeping some seconds...\n");

    msleep(10000);

}
```

Achso, ich benutze Kernel 2.6.10-gentoo-r6.

----------

## benjamin200

 *Quote:*   

> 
> 
> Momentan wird in eine Shell (ash) gebootet, mit der eine rudimentäre Manipulation der Festplatten möglich ist. Dank Bootsplash sieht diese auch recht nett aus. 
> 
> 

 

Um von USB booten zu können muss hier doch das BIOS mitspielen. Sehe ich das richtig oder kann das umgangen werden?

EDIT:

Hab das ganze jetzt mal mit meinem 256 MB USB-Stick ausprobiert. Sobald der Steckt und ich mich im BIOS befinde kann ich USB als Boot-Device setzen. Im Handbuch (ASUS A8V Deluxe)  finde ich dieses Funktion nicht beschrieben. Gibt es vielleicht wo eine Übersicht über bootfähige USB-Mainboards oder muss das vorort inkl. USB Stick an jedem PC getestet werden - kann ja eigentlich nicht sein, oder?

Gruß,

Benjamin

----------

## benjamin200

 *Quote:*   

> 
> 
> Quote:
> 
> Momentan wird in eine Shell (ash) gebootet, mit der eine rudimentäre Manipulation der Festplatten möglich ist. Dank Bootsplash sieht diese auch recht nett aus.
> ...

 

BUMP

----------

## Inte

Hi Benjamin,

um von USB zu booten, muss das BIOS mitspielen. Früher gab es ja auch noch nicht die Unterstützung um von CD zu booten.  :Wink: 

Von den paar Rechnern die ich habe weiss ich auswendig, ob im BIOS ein USB-Gerät zum booten ausgewählt werden kann. Eine Liste von Mainboards mit dieser Option ist mit leider nicht bekannt. Vielleicht mal googlen?

----------

## Bjay

Hallo, also ich hab es ähnlich gemacht wie hier beschrieben wurdem hoffe das ich hier ein paar tipps bekommen könnte 

https://forums.gentoo.org/viewtopic.php?p=2788255#2788255

hab auch die kerneloptionen von dem tut bekommen dabei also er bleibt derzeit immer bei

"freeing unused kernel memory ... xxx freed" 

stehen weil ich habe als parameter bei grub nen rootdelay=25 angegeben somit wartet er mit dem root mount 

Weis einer wie man mir helfen kann ? 

also es kommt auch keine fehlermeldung oder dergelichen  :Sad: .

----------

## aZZe

Hallo zusammen!

Habe nun auch mal versucht meinen 512MB USB-Stick zum laufen zu bekommen. Bei mir scheiterts aber schon bei grub.

Wenn ich ein "root (hd1,0)" mache sagt er mir unknown filesystem. Ist natürlich ein schlankes ext2 so wie es Inte auch vorgegeben hat (alles andere ist auch Quatsch).

Hat einer eine Idee?

----------

## aZZe

Ups. Kommando zurück...hatte ja schon einer hier geschrieben. Nachdem man den Stick formatiert ist und die ganzen Dateien kopiert sind ---> fdisk ausführen!

@Inte

könntest du vielleicht noch hinzufügen.

----------

## manuels

Moin zusammen,

inte meinte, dass es kein kernel patch für den 2.6er gibt, um dem Kernel zu sagen, dass er auf die USB-Erkennung warten soll, um das RootFS zu mounten, also hab ich das Patch von Eric angepasst.

Ist allerdings für die gentoo-sources:

```
--- linux-2.6.15-gentoo-r1/init/do_mounts.c.orig   2006-03-20 02:31:15.000000000 +0000

+++ linux-2.6.15-gentoo-r1/init/do_mounts.c   2006-03-20 02:36:50.000000000 +0000

@@ -298,7 +298,12 @@

             flags |= MS_RDONLY;

             goto retry;

          case -EINVAL:

-            continue;

+            __bdevname(ROOT_DEV, b);

+            printk("VFS: Cannot open root device \"%s\" or %s, retrying in 1s.\n",

+               root_device_name, b);

+            current->state = TASK_INTERRUPTIBLE;

+            schedule_timeout(1*HZ);

+            goto retry;

       }

            /*

        * Allow the user to distinguish between failed sys_open

```

Vielleicht folgt bald eine vanilla-Version.

Tschö mit ö

Manuel

----------

## ---GS---

Hi,

ein wirklich schönes Tutorial. Leider hab ich Probleme die Anweisungen entsprechend auf mein Anwendungsfall abzuwandeln.

Vielleicht kann mir hier ja jemand helfen.

Als Datenträger benutze ich keinen USB-Stick, sondern einen CompactFlash, welcher mit einem entsprechenden IDE Adapter an hda1 hängt.

Der zweite Knackpunkt ist, daß ich das komplette System auf einem anderen Rechner vorbereiten muss, da auf dem Zielsystem wirklich noch garnix läuft. D.h. ich muss Kernel & BusyBox cross-compilieren. (Hostsystem ist ein P4, Zielsystem ein VIA C3)

Leider mangelt es mir an Praxis und Fachkenntnissen, um die entsprechenden Änderungen alleine hinzubekommen.   :Sad: 

Ich bastel hier wirklich schon ein Weilchen rum, aber ich bekomme es einfach nicht zum Laufen. Ich hoffe mir kann hier jemand weiterhelfen.

mfg

Gordon

----------

## Wolle

 *---GS--- wrote:*   

> Als Datenträger benutze ich keinen USB-Stick, sondern einen CompactFlash, welcher mit einem entsprechenden IDE Adapter an hda1 hängt.
> 
> 

 

Ähm, hda1 ist die erste Partition auf der ersten Festplatte. Hängt die CF eventuell an hda? Dann kann sie natürlich eine Partition hda1 haben. Oder hängt die CF an hdb (hdc, hdd)?

 *---GS--- wrote:*   

> D.h. ich muss Kernel & BusyBox cross-compilieren. (Hostsystem ist ein P4, Zielsystem ein VIA C3)

 

Da muss nix crosskompiliert werden. Du kannst dich auf den kleinsten gemeinsamen Nenner der beiden Prozessoren begeben. Wenn ich mich nicht täusche, ist das Pentium 1 (586). Das quetscht dann zwar nicht das letzte Quentchen an Performanze aus dem C3, aber du ersparst dir den Stress der Cross-Umgebung.

Wolle

----------

## ---GS---

 *Wolle wrote:*   

> Ähm, hda1 ist die erste Partition auf der ersten Festplatte. Hängt die CF eventuell an hda? Dann kann sie natürlich eine Partition hda1 haben. Oder hängt die CF an hdb (hdc, hdd)?

 

Ja, ich meinte hda.

 *Wolle wrote:*   

> 
> 
> Da muss nix crosskompiliert werden. Du kannst dich auf den kleinsten gemeinsamen Nenner der beiden Prozessoren begeben. Wenn ich mich nicht täusche, ist das Pentium 1 (586). Das quetscht dann zwar nicht das letzte Quentchen an Performanze aus dem C3, aber du ersparst dir den Stress der Cross-Umgebung.
> 
> Wolle

 

Ich weis nicht, was ich an Parametern übergeben muss, damit das für einen 586 kompiliert. Wie bereits erwähnt, habe ich noch nicht wirklich so viel Ahnung davon, selbst ein System zu kompilieren.  Ich hatte mich deswegen fürs cross-kompilieren entschieden, da ich da teilweise die Anleitungen von linux from scratch benutzen kann.

Aber wie auch immer - irgendwie finde ich es ziemlich verwirrend, sich aus mehreren halbwegs passenden Tutorials die richtigen Befehle in der richtigen Reihenfolge herauszufiltern, um das ganze zum Laufen zu bekommen.

Noch eine weitere Frage: Da ich ja keinen USB Stick sondern einen CompactFlash am IDE benutze, brauche ich da überhaupt eine Ramdisk? Eigentlich sollte das Ganze doch auch mit dem normalen IDE Treiber starten, oder?

Ich hab das mal ohne initrd versucht und dabei fängt der Kernel wenigstens erstmal an zu booten, aber es kommt dann die Fehlermeldung: "Warning: unable to open initial console"

----------

## Wolle

 *---GS--- wrote:*   

> Ich weis nicht, was ich an Parametern übergeben muss, damit das für einen 586 kompiliert

 

Die CFLAGS in der /etc/make.conf müssen für beide Systeme funktionieren, z.B.:

```
CFLAGS="-O2 -march=i586 -pipe"

CHOST="i586-pc-linux-gnu"

CXXFLAGS="${CFLAGS}"

MAKEOPTS="-j2"
```

 *---GS--- wrote:*   

> Noch eine weitere Frage: Da ich ja keinen USB Stick sondern einen CompactFlash am IDE benutze, brauche ich da überhaupt eine Ramdisk? Eigentlich sollte das Ganze doch auch mit dem normalen IDE Treiber starten, oder?

 

Beim USB-Stick wird die Ramdisk gebraucht damit der Kernel das Root-Dateisystem auf dem Stick mounten kann. Dafür braucht er Zeit (so zwei bis zehn Sekunden). Da es bei IDE kein Hot-Plugging gibt denke ich, dass du auf die Warterei und damit auf die Ramdisk verzichten kannst.

----------

## slick

 *Wolle wrote:*   

>  *---GS--- wrote:*   Noch eine weitere Frage: Da ich ja keinen USB Stick sondern einen CompactFlash am IDE benutze, brauche ich da überhaupt eine Ramdisk? Eigentlich sollte das Ganze doch auch mit dem normalen IDE Treiber starten, oder? 
> 
> Beim USB-Stick wird die Ramdisk gebraucht damit der Kernel das Root-Dateisystem auf dem Stick mounten kann. Dafür braucht er Zeit (so zwei bis zehn Sekunden). Da es bei IDE kein Hot-Plugging gibt denke ich, dass du auf die Warterei und damit auf die Ramdisk verzichten kannst.

 

Außerdem wird die Ram-Disk für sich ständig ändernde Daten z.B. in /var/log benötigt, denn Flashmedien sollten nur wirklich notwendigen Schreibzugriffen ausgesetzt sein.

----------

## Wolle

 *slick wrote:*   

> Außerdem wird die Ram-Disk für sich ständig ändernde Daten z.B. in /var/log benötigt, denn Flashmedien sollten nur wirklich notwendigen Schreibzugriffen ausgesetzt sein.

 

Vielleicht so?

 *Quote:*   

> cat >> /mnt/stick/etc/fstab << "EOF" 
> 
>  none    /var        tmpfs   defaults        0 0 
> 
>  EOF

 

Damit sind wir dann auch wieder On-Topic.

----------

## ---GS---

nun mal ganz abgesehen davon, ob nun ramdisk oder nicht

ich bekomme mit beiden Varianten immernoch einen Fehler beim Booten:

"unable to open initial console"

Hat jemand ne Ahnung, wie ich diesen Fehler behebe? Werden die Devices nicht ordentlich angelegt? Muss ich die noch manuell anlegen?

Für hilfreiche Hinweise wäre ich sehr dankbar

mfG

Gordon

----------

## Erdie

Da ich eine faule S** bin frage ich jetzt mal ob man davon nicht einfach ein image verteilen kann, so daß sich nicht jeder das Ganze selber bauen muß. Ist das realistisch?

----------

## tazinblack

Hallo zusammen,

ist zwar schon ein paar Tage her, dass dieser thread gestartet worden ist, aber vieleicht kann mir trotzdem jemand ne Tip geben.

Ich versuche entsprechend dem Vorbild ein System auf nen USB-Stick zu bekommen. 

Bisher liefts ganz gut. Ich verwende einen 2.6.15 Kernel. Grub findet sogar meinen Stick :

```
VFS: Mounted root (ext2 filesystem)

VFS: Mounted root (ext2 filesystem) readonly.

Trying to move old root to /initrd ... okay

Freeing unused kernel memory: 224k freed

Warning: unable to open initial console.

```

Und mit diesen Worten hängt er sich dann auf.

Habe inzwischen unter /mnt/stick/dev diverse Devices angelegt : console null zero ttyS0.

Hab auch einiges im Kernel ausprobiert, aber komm nicht weiter.

Woran hängts denn nu noch ? Hat da jemand nen Tip ?

----------

## Max Steel

Könnte man in den Grub nich noch einbauen das er das installierte (falls vorhanden) startet?

Also zum Beispiel mit:

grub.conf

```
title=Installiertes System starten

chainloader=(hd0,0)+1
```

Oder so?

Edith sagt:

Mir is noch was eingefallen,

kann man das ganze auch aus einem SuSE machen,

oder muss ich da die Daten aus einem anderen Rechner holen (per NFS) und dann chrooten dann alles nach Anleitungen machen.

Also im einzelnen:

```
mount /dev/sda1 /stick/

mount -t nfs gentoo:/ /gentoo //etc.

mount -t proc proc /gentoo/proc

mount --bind /dev/ /gentoo/dev/

mkdir /gentoo/stick/

mount --bind /stick/ /gentoo/stick/

chroot /gentoo/
```

und dann die Anleitung befolgen, oder so.

Edith sagt noch:

Ich hätte wenn möglich eine Antwort bevor ich was kaputt mache.

Denn ich möchte es ausprobieren, da ich es gut finde.

Nochmal ich:

Also ich hab das Problem jetzt so gelöst,

Ich mache die Programme per chroot Umgebung und kopiere das per normaler Umgebung auf den Stick.

Habe

```
mount /dev/sda1 /stick/

...

mkdir /gentoo/stick/

mount --bind /stick/ /gentoo/stick/
```

hinzugefügt.

----------

## AROK

Hallo,

versuche mich auch gerade an dem USB-Stick-Linux.

Ich habe aber das Problem:

```
VFS: Cannot open root device "sda1" or unknown-block(0,0) 

Please append a correct "root=" boot option 

Kernel panic: VFS: Unable to mount root fs on unknown-block(0,0)
```

 *Quote:*   

> 
> 
> Lösung: Nach dem Laden des USB-Treibers (EHCI, OHCI oder UHCI) dauert es einen Moment, bis der USB-Stick als Gerät initialisiert wird. Leider versucht der Kernel schon vorher das rootfs zu mounten  Deswegen starten wir über eine Initial-Ramdisk (initrd) - die wir für den Bootsplash sowieso benötigen - und warten mit der Hilfe von usleep so lange (bei mir reichen 2 Sekunden), bis /dev/scsi/host1/bus0/target0/lun0/part1 angelegt wird.

 

Das mit der Ramdisk funktioniert bei mir irgendwie nicht (sehe die Ausgaben aus dem Skript auch nicht).  Wenn ich es ohne Angabe einer Ramdisk mache fragt mich der Kernel nach einer Diskette. Wenn ich warte bis der USB-Stick erkannt wurde un Enter drücke kommt trozdem obiger Fehler, obwohl er mir in der Liste der möglichen Partitionen die Partitionen des Sticks (sda1 und sda2) anzeigt. 

als Bootoption habe ich sowohl  /dev/scsi/host1/bus0/target0/lun0/part als auch  /dev/sda1 probiert.

Als Kernel verwende ich Vanilla 2.6.26.

Habt ihr eine Idee? Grüße

AROK

----------

## AROK

Die Ramdisk funktioniert doch. Gibt nur den Text nicht aus. 

Mit einer Knoppix Initrd bootet mein Kernel vom Stick.  Scheint wohl, dass ich meine Ramsdik noch irgendwie erweitern muss.

----------

