Hi,

I am trying to boot Linux on a TI OMAP3430 based device. The device boots up to a point where it tries to find the initrd image but cannot find it.

My kernel version is 2.6.27. I am using a custom OneNAND flashing utility to flash the device with the bootloader, initrd image and kernel. My bootloader creates ATAGS, copies the kernel and initrd image to RAM and then jumps to the kernel.

The kernel boots up fine to a point where it tries to mount root. Then it gives the following error:

No filesystem could mount root, tried: ext3 ext2 msdos vfat

<0>Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)

On debugging I found that the follwing function call returns -2 (-ENOENT)
in_fd = sys_open(from, O_RDONLY, 0);

This is called in file \init\do_mounts_rd.c inside function:
int __init rd_load_image(char *from)

This in turn is called from do_mounts_initrd.c
if (rd_load_image("/initrd.image") && ROOT_DEV != Root_RAM0)
^^^^^^^^^^^^^^

I found that initrd.image is created in \init\initramfs.c
static int __init populate_rootfs(void)
{
...
if (initrd_start) {
...

fd = sys_open("/initrd.image", O_WRONLY|O_CREAT, 0700);
...

Here initrd_start is always zero so this condition never gets true. So initrd.image is never created.


In short, while booting sys_open("/initrd.image", O_RDONLY, 0); fails with -2.

I have checked the initrd image is present at the memory location specified in kernel tags when kernel starts.


Can anybody point to what could be the possible reason for this problem?


Regards,
Zamir