initrd problems

Sébastien Côté scote1 at
Fri Jan 19 02:53:53 EST 2001


I'm trying to boot Sandpoint linux on my board but I can't get initrd
to load.  I'm not using any special bootloader.

I compiled the kernel using make zImage.initrd (my initrd ramdisk is
smaller than 4 MB) and I added root=/dev/ram to the cmd_line in the
function sandpoint_setup_arch() from sandpoint_setup.c.  I know I
shouldn't have to do this (acording to the HOWTO), but I am so
clueless about the cause of the problem that I'm ready to try anything.

The kernel loads until the function mount_root() (in fs/super.c).
This is where it stops:

        retval = blkdev_get(bdev, mode, 0, BDEV_FS);
        if (retval == -EROFS) {
                root_mountflags |= MS_RDONLY;
                retval = blkdev_get(bdev, FMODE_READ, 0, BDEV_FS);
        if (retval) {
                 * Allow the user to distinguish between failed open
                 * and bad superblock on root device.
                printk ("VFS: Cannot open root device \"%s\" or %s\n",
                        root_device_name, kdevname (ROOT_DEV));
                printk ("Please append a correct \"root=\" boot
                panic("VFS: Unable to mount root fs on %s",

With the help of a debugger, I found out that:
root_device_name = ram
ROOT_DEV = 0x0100  /* which is ram according to init/main.c */

So if the root_device points to ram like it should, does anybody know
why it can't open the root device?

The kernel has been copied at address 0 of the RAM on the board along
with initrd (there's no hard-drive or flash, just ram).  Do I need to
set something before I launch the kernel?  I tought everything was setup
up correctly when I did make zImage.initrd ! (INITRD_OFFSET and
INITRD_SIZE should be set by make zImage.initrd, right?)

Any help would be appreciated !

Sébastien Côté

(Sorry if you received this e-mail twice but it didn't seem to go
through the first time)

** Sent via the linuxppc-embedded mail list. See

More information about the Linuxppc-embedded mailing list