View previous topic :: View next topic |
Author |
Message |
Inte Veteran
Joined: 15 Jul 2003 Posts: 1387 Location: Mannheim, GER
|
Posted: Fri May 28, 2004 1:50 pm Post subject: Bootfähiger USB-Stick mit Minimalsystem |
|
|
- 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.
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
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 |
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/
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
Code: | 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.
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: | 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
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 |
Bootsplash
Zm Glück benutzen wir ja alle Gentoo und können uns hier ein paar Schritte ersparen. Zunächst wird der UserSpaceStuff installiert:
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.
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 |
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:
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: | 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/ |
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 |
|
|
Sas Veteran
Joined: 05 Jul 2003 Posts: 1229 Location: Germany
|
Posted: Fri May 28, 2004 2:50 pm Post subject: |
|
|
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 |
|
|
Inte Veteran
Joined: 15 Jul 2003 Posts: 1387 Location: Mannheim, GER
|
Posted: Fri May 28, 2004 3:09 pm Post subject: |
|
|
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 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 |
|
|
Sas Veteran
Joined: 05 Jul 2003 Posts: 1229 Location: Germany
|
Posted: Fri May 28, 2004 3:14 pm Post subject: |
|
|
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 |
|
|
Sas Veteran
Joined: 05 Jul 2003 Posts: 1229 Location: Germany
|
Posted: Fri May 28, 2004 7:02 pm Post subject: |
|
|
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 |
|
|
dakjo Veteran
Joined: 31 Jan 2004 Posts: 1544
|
Posted: Fri May 28, 2004 8:43 pm Post subject: |
|
|
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 |
|
|
Inte Veteran
Joined: 15 Jul 2003 Posts: 1387 Location: Mannheim, GER
|
Posted: Tue Jun 01, 2004 3:17 pm Post subject: |
|
|
Danke für die Tipps. Es war das Timing-Problem. Jetzt geht's mit dem RootFs weiter.
Gruß, Inte. _________________ Gentoo Linux - Die Metadistribution |
|
Back to top |
|
|
Inte Veteran
Joined: 15 Jul 2003 Posts: 1387 Location: Mannheim, GER
|
Posted: Wed Jun 02, 2004 3:18 pm Post subject: |
|
|
[UPDATE]
Booten und hübsch Aussehen kann mein USB-Stick schon.
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? _________________ Gentoo Linux - Die Metadistribution |
|
Back to top |
|
|
icefox13 Tux's lil' helper
Joined: 19 Apr 2004 Posts: 78 Location: Munich, Germany
|
Posted: Wed Jun 02, 2004 8:33 pm Post subject: |
|
|
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 |
|
|
Inte Veteran
Joined: 15 Jul 2003 Posts: 1387 Location: Mannheim, GER
|
Posted: Thu Jun 03, 2004 8:00 am Post subject: |
|
|
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 |
|
|
mo-ca Guru
Joined: 17 Feb 2003 Posts: 313 Location: Near Dresden, Germany
|
Posted: Fri Jun 04, 2004 6:46 am Post subject: |
|
|
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 |
|
|
bloodcount n00b
Joined: 10 Nov 2002 Posts: 16
|
Posted: Fri Jun 04, 2004 7:17 am Post subject: |
|
|
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 |
|
Back to top |
|
|
dakjo Veteran
Joined: 31 Jan 2004 Posts: 1544
|
Posted: Fri Jun 04, 2004 8:56 am Post subject: |
|
|
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 |
|
|
Inte Veteran
Joined: 15 Jul 2003 Posts: 1387 Location: Mannheim, GER
|
Posted: Fri Jun 04, 2004 9:10 am Post subject: |
|
|
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 |
|
|
dakjo Veteran
Joined: 31 Jan 2004 Posts: 1544
|
Posted: Fri Jun 04, 2004 9:15 am Post subject: |
|
|
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 |
|
|
Massa n00b
Joined: 04 Jun 2004 Posts: 8 Location: Friedrichshafen - Lake Constance, Germany
|
Posted: Fri Jun 04, 2004 9:22 am Post subject: |
|
|
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
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 |
|
|
Massa n00b
Joined: 04 Jun 2004 Posts: 8 Location: Friedrichshafen - Lake Constance, Germany
|
Posted: Fri Jun 04, 2004 9:35 am Post subject: |
|
|
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 (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 |
|
|
Massa n00b
Joined: 04 Jun 2004 Posts: 8 Location: Friedrichshafen - Lake Constance, Germany
|
Posted: Sun Jun 06, 2004 9:25 pm Post subject: |
|
|
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 |
|
|
dakjo Veteran
Joined: 31 Jan 2004 Posts: 1544
|
Posted: Mon Jun 07, 2004 5:53 am Post subject: |
|
|
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 |
|
|
Inte Veteran
Joined: 15 Jul 2003 Posts: 1387 Location: Mannheim, GER
|
Posted: Mon Jun 07, 2004 9:53 am Post subject: |
|
|
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 Names
- 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 |
|
|
Sonie n00b
Joined: 07 Jun 2004 Posts: 13 Location: Rastatt
|
Posted: Mon Jun 07, 2004 8:50 pm Post subject: Grub will aber kein (HD2) finden... |
|
|
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 |
|
|
dakjo Veteran
Joined: 31 Jan 2004 Posts: 1544
|
Posted: Mon Jun 07, 2004 10:31 pm Post subject: |
|
|
Dann sollte es ja hd3 sein ! |
|
Back to top |
|
|
Massa n00b
Joined: 04 Jun 2004 Posts: 8 Location: Friedrichshafen - Lake Constance, Germany
|
Posted: Tue Jun 08, 2004 7:52 am Post subject: |
|
|
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 (Kernel Sourcen sind übrigens bei mir 2.6.5-gentoo-r1)
Geht das bei Dir auch mit falschen Angaben "root=XXX" ? |
|
Back to top |
|
|
Inte Veteran
Joined: 15 Jul 2003 Posts: 1387 Location: Mannheim, GER
|
Posted: Tue Jun 08, 2004 8:21 am Post subject: |
|
|
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 |
|
|
Massa n00b
Joined: 04 Jun 2004 Posts: 8 Location: Friedrichshafen - Lake Constance, Germany
|
Posted: Tue Jun 08, 2004 2:51 pm Post subject: |
|
|
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
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 |
|
|
|
|
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
|
|