Greetings.

First, I am posting the message to both the 'linux-arm-kernel' and
'linux-arm' mailing lists because I know a few people who are not reading
the 'linux-arm-kernel' list that do a lot of kernel development. Anyway...

I was getting the following errors:

Freeing unused kernel memory: 4k init
kmod: failed to exec /sbin/modprobe -s -k char-major-4, errno = 2
Warning: unable to open an initial console.
kmod: failed to exec /sbin/modprobe -s -k binfmt-464c, errno = 2
kmod: failed to exec /sbin/modprobe -s -k binfmt-464c, errno = 2
Kernel panic: No init found.  Try passing init= option to kernel.

I recompiled the kernel and removed support for 'kmod' and made compiled in
only ELF binary support and no modules whatsoever. I downloaded a ramdisk
image from ftp://ftp.netwinder.org/users/n/nico and proceeded to load it
with my kernel into my board. I now get the following errors:

RAMDISK driver initialized: 16 RAM disks of 8192K size 1024 blocksize
RAMDISK: Compressed image found at block 0
Freeing initrd memory: 1537k freed
NetWinder Floating Point Emulator V0.95 (c) 1998-1999 Rebel.com
VFS: Mounted root (ext2 filesystem).
Freeing unused kernel memory: 4k init
Warning: unable to open an initial console.
Kernel panic: No init found.  Try passing init= option to kernel.

Well, that's some progress. I did get rid of the kmod errors and binfmt
stuff. I also tried creating my own ramdisk with similar results. I also
tried opening some files inside of the function 'init' in 'init/main.c'
specifically '/sbin/init'. The 'open' function succeeds, but for some
reason when it goes to do the 'execve' command on '/sbin/init' it does
not work as shown above.

I also want to better understand the ROOT_DEV variable as related to
INITRD. If you notice in 'init/main.c', the following line is executed of
INITRD is being used:

     real_root_dev = ROOT_DEV;

and then just a few lines down the big long if statement:

    if (mount_initrd && ROOT_DEV != real_root_dev
        && MAJOR(ROOT_DEV) == RAMDISK_MAJOR && MINOR(ROOT_DEV) == 0)

which can never executed if you choose the INITRD and you want your root
filesystem to indeed be the RAMDISK. Therefore, 'linuxrc' will never be
executed! I also went back through the code in 'setup.c' and 'arch.c' and
some code in 'super.c'. I find it difficult to see how the if statement
above ever gets executed. In 'setup.c' and 'arch.c' the ROOT_DEV variable
is set before we get into 'init/main.c' which means that the assignement
above will always make the 'if' statement fail?  I probably missed something
in the call to 'mount_root' or 'mount_devfs_fs'. And finally, could someone
explain how the value ROOT_DEV = CURRENT in the top level Makefile comes into
play? If anyone has a INITRD image that works for them, please contact me. I
would greatly appreciate. Thanks in advance everyone. Cheers.

-Steve

-- 
 Steven J. Hill - Embedded SW Engineer
 Public Key: 'finger [EMAIL PROTECTED]'
 FPR1: E124 6E1C AF8E 7802 A815
 FPR2: 7D72 829C 3386 4C4A E17D

unsubscribe: body of `unsubscribe linux-arm' to [EMAIL PROTECTED]
++        Please use [EMAIL PROTECTED] for           ++
++                        kernel-related discussions.                      ++

Reply via email to