Quote Originally Posted by garyng
I came across this problem once but unfortunately forgot how I fixed it(tried the same init=linuxrc to temperarily work around it, also root=/dev/ram0). I remember somehow I have to re-create the initrd tree(or fs) again from scratch and the problem disappeared.

May be I am asking for stupid question, have you checked the attribute of linuxrc, I remembered I need to change it to 0755.
Of course permission of linuxrc is ok - otherwise it wouldn't have worked as init=/linuxrc.

However, I found the problem and I'm curious why it doesn't ALWAYS happen. The workaround is trivial. I'll explain it here although I'm answering my own question

After digging in the kernel's initrd code for a while, I realized that it checks whether root=/dev/ram0. If it is, ram0 is processed as a real rootfs rather than initrd, which would be ok if the linuxrc script was called init and written differently.

When the kernel gets Knoppix's initrd, it checks for the default rootdev (unless specified in cmdline). If it happens to be /dev/ram0, knoppix won't work and you get a panic due to "No init found". I saw questions about such message in the list before, so this should answer them as well.

The workaround: just specify root=/dev/hda1 or some other non-ram0 device in cmdline. Doesn't matter which, since linuxrc will set it to /dev/ram0 later anyway.

I think knoppix's default cmdline should include root=something, just in case.

Maintainers, care to comment ?