Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Bootfähiger USB-Stick mit Minimalsystem
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

Goto page 1, 2, 3, 4  Next  
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Deutsche Dokumentation
View previous topic :: View next topic  
Author Message
Inte
Veteran
Veteran


Joined: 15 Jul 2003
Posts: 1387
Location: Mannheim, GER

PostPosted: Fri May 28, 2004 1:50 pm    Post subject: Bootfähiger USB-Stick mit Minimalsystem Reply with quote

  • 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

  1. 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.
    Code:
    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
    Code:
    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:
    Code:
    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:
    Code:
    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

  2. 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:
    Code:
    make mrproper
    patch -p1 < bootsplash-3.1.4-2.6.6.diff
    make menuconfig

    Code:
    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:
    Code:
    make
    mount -t ext2 /dev/sda1 /mnt/stick
    cp arch/i386/boot/bzImage /mnt/stick/boot/
    umount /mnt/stick

  3. 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):
    Code:
    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:
    Code:
    make menuconfig

    Code:
    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)

    Code:
    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.
    Code:
    cat > /mnt/loop/linuxrc << "EOF"
    #!/bin/sh
    /bin/echo "Executing Busybox 'usleep 5000000'"
    /bin/usleep 5000000
    /bin/echo "Proceeding ..."
    EOF

    Code:
    chmod +x /mnt/loop/linuxrc
    umount /mnt/loop
    gzip initrd
    mount /mnt/stick
    cp initrd.gz /mnt/stick/boot
    umount /mnt/stick

  4. 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:
    Code:
    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.
    Code:
    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.

  5. RootFs + Busybox
    Nun werden die benötigten Systemordner und ein paar grundlegende Dateien angelegt:
    Code:
    mount /mnt/stick
    mkdir -p /mnt/stick/{bin,dev,etc/init.d,initrd,mnt,proc,root,sbin,sys,tmp,usr/{bin,sbin}}

    /etc/inittab
    Code:
    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
    Code:
    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ß :)
    Code:
    chmod +x /mnt/stick/etc/init.d/rcS

    /etc/fstab
    Code:
    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
    Code:
    cat > /mnt/stick/etc/passwd << "EOF"
    root:x:0:0:root:/root:/bin/sh
    EOF

    /etc/group
    Code:
    cat > /mnt/stick/etc/group << "EOF"
    root:x:0:
    bin:x:1:
    EOF

    /etc/devfsd.conf
    Code:
    cat > /mnt/stick/etc/devfsd.conf << "EOF"
    REGISTER     .*      MKOLDCOMPAT
    UNREGISTER   .*      RMOLDCOMPAT
    EOF

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

    Code:
    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

    Code:
    make dep
    make
    make PREFIX=/mnt/stick install
    umount /mnt/stick/

  6. fbi
    Code:
    emerge fbi

    Code:
    mount /mnt/stick
    cp /usr/bin/fbi /mnt/stick/usr/bin/

    Ein ldd /usr/bin/fbi gibt uns folgende Shared Libraries aus:
    Code:
    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:
    Code:
    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:
    Code:
    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.)
    Code:
    Initializing USB Mass Storage driver...
    usbcore: registered new driver usb-storage
    USB Mass Storage support registered.

    Deswegen kommt es zu folgender Kernel Panic
    Code:
    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 :? 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:
    Code:
    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.
    Code:
    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:
    Code:
    vc/1::respawn:/bin/sh



Gruß, Inte.
_________________
Gentoo Linux - Die Metadistribution


Last edited by Inte on Fri Jul 16, 2004 12:14 pm; edited 32 times in total
Back to top
View user's profile Send private message
Sas
Veteran
Veteran


Joined: 05 Jul 2003
Posts: 1229
Location: Germany

PostPosted: Fri May 28, 2004 2:50 pm    Post subject: Reply with quote

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
_________________
42
Back to top
View user's profile Send private message
Inte
Veteran
Veteran


Joined: 15 Jul 2003
Posts: 1387
Location: Mannheim, GER

PostPosted: Fri May 28, 2004 3:09 pm    Post subject: Reply with quote

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 :)

Gruß, Inte.
_________________
Gentoo Linux - Die Metadistribution
Back to top
View user's profile Send private message
Sas
Veteran
Veteran


Joined: 05 Jul 2003
Posts: 1229
Location: Germany

PostPosted: Fri May 28, 2004 3:14 pm    Post subject: Reply with quote

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 ;)

Sonst fällt mir im Moment auch nichts mehr ein, das Problem scheint also datenträgerspezifisch zu sein.
_________________
42
Back to top
View user's profile Send private message
Sas
Veteran
Veteran


Joined: 05 Jul 2003
Posts: 1229
Location: Germany

PostPosted: Fri May 28, 2004 7:02 pm    Post subject: Reply with quote

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 ;)
_________________
42
Back to top
View user's profile Send private message
dakjo
Veteran
Veteran


Joined: 31 Jan 2004
Posts: 1544

PostPosted: Fri May 28, 2004 8:43 pm    Post subject: Reply with quote

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.
Back to top
View user's profile Send private message
Inte
Veteran
Veteran


Joined: 15 Jul 2003
Posts: 1387
Location: Mannheim, GER

PostPosted: Tue Jun 01, 2004 3:17 pm    Post subject: Reply with quote

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

Gruß, Inte.
_________________
Gentoo Linux - Die Metadistribution
Back to top
View user's profile Send private message
Inte
Veteran
Veteran


Joined: 15 Jul 2003
Posts: 1387
Location: Mannheim, GER

PostPosted: Wed Jun 02, 2004 3:18 pm    Post subject: Reply with quote

[UPDATE]

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

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? :roll:
_________________
Gentoo Linux - Die Metadistribution
Back to top
View user's profile Send private message
icefox13
Tux's lil' helper
Tux's lil' helper


Joined: 19 Apr 2004
Posts: 78
Location: Munich, Germany

PostPosted: Wed Jun 02, 2004 8:33 pm    Post subject: Reply with quote

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
Back to top
View user's profile Send private message
Inte
Veteran
Veteran


Joined: 15 Jul 2003
Posts: 1387
Location: Mannheim, GER

PostPosted: Thu Jun 03, 2004 8:00 am    Post subject: Reply with quote

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.
_________________
Gentoo Linux - Die Metadistribution
Back to top
View user's profile Send private message
mo-ca
Guru
Guru


Joined: 17 Feb 2003
Posts: 313
Location: Near Dresden, Germany

PostPosted: Fri Jun 04, 2004 6:46 am    Post subject: Reply with quote

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?
_________________
Registred Linux User #239348
Back to top
View user's profile Send private message
bloodcount
n00b
n00b


Joined: 10 Nov 2002
Posts: 16

PostPosted: Fri Jun 04, 2004 7:17 am    Post subject: Reply with quote

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

- 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 :o
Back to top
View user's profile Send private message
dakjo
Veteran
Veteran


Joined: 31 Jan 2004
Posts: 1544

PostPosted: Fri Jun 04, 2004 8:56 am    Post subject: Reply with quote

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 ?
Back to top
View user's profile Send private message
Inte
Veteran
Veteran


Joined: 15 Jul 2003
Posts: 1387
Location: Mannheim, GER

PostPosted: Fri Jun 04, 2004 9:10 am    Post subject: Reply with quote

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.
_________________
Gentoo Linux - Die Metadistribution
Back to top
View user's profile Send private message
dakjo
Veteran
Veteran


Joined: 31 Jan 2004
Posts: 1544

PostPosted: Fri Jun 04, 2004 9:15 am    Post subject: Reply with quote

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 :)[/code]
Back to top
View user's profile Send private message
Massa
n00b
n00b


Joined: 04 Jun 2004
Posts: 8
Location: Friedrichshafen - Lake Constance, Germany

PostPosted: Fri Jun 04, 2004 9:22 am    Post subject: Reply with quote

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 :-)
Back to top
View user's profile Send private message
Massa
n00b
n00b


Joined: 04 Jun 2004
Posts: 8
Location: Friedrichshafen - Lake Constance, Germany

PostPosted: Fri Jun 04, 2004 9:35 am    Post subject: Reply with quote

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 :lol: (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 :)
Back to top
View user's profile Send private message
Massa
n00b
n00b


Joined: 04 Jun 2004
Posts: 8
Location: Friedrichshafen - Lake Constance, Germany

PostPosted: Sun Jun 06, 2004 9:25 pm    Post subject: Reply with quote

Hmm, die Frage hat sich wohl doch noch nicht erledigt.
Weil es nämlich nicht funkioniert :-(

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?
Back to top
View user's profile Send private message
dakjo
Veteran
Veteran


Joined: 31 Jan 2004
Posts: 1544

PostPosted: Mon Jun 07, 2004 5:53 am    Post subject: Reply with quote

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.
Back to top
View user's profile Send private message
Inte
Veteran
Veteran


Joined: 15 Jul 2003
Posts: 1387
Location: Mannheim, GER

PostPosted: Mon Jun 07, 2004 9:53 am    Post subject: Reply with quote

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:
  1. Linux Devfs (Device File System) FAQ - Old Compatibility Names
  2. BusyBox - devfsd

Oder kurz zusammengefasst:
Code:
cat >> /mnt/stick/etc/init.d/rcS << "EOF"
/bin/echo "Starting devfsd ..."
/sbin/devfsd /dev
EOF

Code:
cat > /mnt/stick/etc/devfsd.conf << "EOF"
REGISTER     .*      MKOLDCOMPAT
UNREGISTER   .*      RMOLDCOMPAT
EOF

Gruß, Inte.
_________________
Gentoo Linux - Die Metadistribution
Back to top
View user's profile Send private message
Sonie
n00b
n00b


Joined: 07 Jun 2004
Posts: 13
Location: Rastatt

PostPosted: Mon Jun 07, 2004 8:50 pm    Post subject: Grub will aber kein (HD2) finden... Reply with quote

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..
_________________
havn't more to say.
Back to top
View user's profile Send private message
dakjo
Veteran
Veteran


Joined: 31 Jan 2004
Posts: 1544

PostPosted: Mon Jun 07, 2004 10:31 pm    Post subject: Reply with quote

Dann sollte es ja hd3 sein !
Back to top
View user's profile Send private message
Massa
n00b
n00b


Joined: 04 Jun 2004
Posts: 8
Location: Friedrichshafen - Lake Constance, Germany

PostPosted: Tue Jun 08, 2004 7:52 am    Post subject: Reply with quote

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 :(

dakjo wrote:
Bei mir gehts jedenfalls so.
Bei mir leider nicht :cry: (Kernel Sourcen sind übrigens bei mir 2.6.5-gentoo-r1)
Geht das bei Dir auch mit falschen Angaben "root=XXX" ?
Back to top
View user's profile Send private message
Inte
Veteran
Veteran


Joined: 15 Jul 2003
Posts: 1387
Location: Mannheim, GER

PostPosted: Tue Jun 08, 2004 8:21 am    Post subject: Reply with quote

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:
Code:
root=/dev/ram0 init=/bin/sh
Dann sollte die Shell der initrd gestartet werden.

Gruß, Inte.
_________________
Gentoo Linux - Die Metadistribution
Back to top
View user's profile Send private message
Massa
n00b
n00b


Joined: 04 Jun 2004
Posts: 8
Location: Friedrichshafen - Lake Constance, Germany

PostPosted: Tue Jun 08, 2004 2:51 pm    Post subject: Reply with quote

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:
Code:
root=/dev/ram0 init=/bin/sh
Dann sollte die Shell der initrd gestartet werden.
Der Tipp war Gold wert :)
Jetzt habe ich eine Shell - Hurra!

Jetzt kann ich schauen, welches Device meine USB-Platte ist.
Doch halt, da stimmt doch was nicht :?:
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.... :?
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Deutsche Dokumentation All times are GMT
Goto page 1, 2, 3, 4  Next
Page 1 of 4

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum