Alle 00:15, sabato 18 marzo 2006, Alessandro Alocci ha scritto:
Alle 20:56, giovedì 16 marzo 2006, randhir phagura ha scritto:
I intend booting the new lfs system from the host system. The host system
has hda (the main hard drive), hdc (the dvd-rom) and the IBM Microdrive
mounted on SanDisk adapter connected to USB port of the host. This drive
is configured as usb-storage in the kernel and host system recognises it
as'sda'. There is only one partition on this drive i.e. sda1. Grub is
installed on Microdrive but not setup on the MBR because I intend to boot
it from the host.
Is there a way to boot the new lfs from my host system grub?
Well, if your BIOS is not able to recognize your usbdisk you can use an
initrd (Initial RAM disk) to load the usb modules before you mount the real
partition (sda1) and use the initrd option of grub.
I have done this to boot a Fedora Core 3 on my laptop from an external
usbdisk but I used a specific howto and mkinitrd for that distro, but I
think it's possible to find a similar solution also for LFS.
Try to document yourself about initrd
(man initrd or less /usr/src/linux-`uname -r`/Documentation/initrd.txt)
and search the net about how to boot linux from an usb storage.
I'll try myself to solve this on weekend and if I can find a working
solution I'll post here.
HTH, Alessandro Alocci
Well, this worked for me:
First of all I have recompiled my kernel with:
Device Drivers - USB Support -
Support for Host-side USB
EHCI HCD (USB 2.0) support
OHCI HCD support
UHCI HCD (most Intel and VIA) support
USB Mass Storage support
statically compiled into the kernel.
I needed also this:
Device Drivers - Block devices -
Loopback device support
RAM disk support
Initial RAM disk (initrd) support
statically compiled into the kernel.
Then I recompiled and installed the kernel
(mine is 2.6.12.5) and rebooted.
Now we have to build an initrd-tree, we can
build it from scratch (possibly, a more appropriate
solution on this site) but we can also use an already
done script.
A good candidate seems to be the mkinitrd script from
the last slackware distro, so I downloaded this:
mkinitrd-1.0.1-i486-3.tgz
from a slack mirror. Then:
cd /usr/local/src
cp /home/alex/scaricati/mkinitrd-1.0.1-i486-3.tgz .
tar xvzf mkinitrd-1.0.1-i486-3.tgz
install -v -m 755 usr/sbin/mkinitrd /usr/sbin/
install -v -d -m 755 /usr/share/mkinitrd
cp usr/share/mkinitrd/initrd-tree.tar.gz /usr/share/mkinitrd/
# you can also read and install the docs and man page
# about busybox and mkinitrd. Be sure to read
# the script itself to understand how it works.
Now the mkinitrd script is installed and we can
build the initrd-tree, so:
cd /boot
mkinitrd
# Add your disk-device in initrd-tree/rootdev
# (mine is /dev/sda6, correct this with yours)
cat initrd-tree/rootdev EOF
/dev/sda6
EOF
# Add the name of the used file-system for the
# previous partition (mine is ext3)
cat initrd-tree/rootfs EOF
ext3
EOF
Now, the problem with this solution is that we
have to give time enough to the kernel to discover
the usb-storage before that the initial ram disk
try to mount the real root partition (in my case
/dev/sda6). To solve this I added the line
sleep 12
in initrd-tree/linuxrc, just before this comment:
# Switch to real root partition:
(line 89).
(Yes, I know it's a bit naive, but I have not
a better solution ATM, perhaps someone can suggest
something more appropriate here)
One can tune the previous sleep in case is not
enough; in my case wait for 12 seconds is sufficient.
If someone needs to load also some modules from the
initrd, they have to be copied in
initrd-tree/lib/modules/`uname -r`
and edit load_kernel_modules, then
chmod 755 load_kernel_modules
Now we have to run the mkinitrd script
again from the /boot directory:
cd /boot
mkinitrd
This time the script should create the real
initrd.gz. We need also to copy the kernel
from the usb-disk partition in the hard-disk.
Now we can instruct grub to boot from sdaX.
I added this to /boot/grub/menu.lst:
(With grub installed in the MBR of /dev/hda)
title USBDISK-BOOT
kernel (hd0,10)/boot/usblfskernel-2.6.12.5 root=/dev/sda6
initrd (hd0,10)/boot/initrd.gz
Again, be sure to correct the previous line with
your correct data.
As you see, this solution requires to have both
the kernel and the initrd image in a disk where grub
can find them, but after that grub should menage to boot
the system installed in the usb-disk.
This let me to reboot from an usb-disk partition.
Well, it seems to be all (hope I haven't forgot
anything or made too much confusion)
Regards, Alessandro Alocci
--
http://linuxfromscratch.org/mailman/listinfo/blfs-support
FAQ: http://www.linuxfromscratch.org/blfs/faq.html
Unsubscribe: See the above information page