initrd/initramfs problem

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



What fails is when CONFIG_BLK_DEV_INITRD and CONFIG_INITRAMFS_SOURCE are both set. I realize (now) that I don't need initrd at all, and initramfs works fine by itself, as you have tested. It seems that the kernel may need some exclusion between these two mechanisms while the difference is sorted out.

I'm not totally up on Kconfig files, but maybe something like this in drivers/block/Kconfig:

config INITRAMFS_SOURCE
       string "Initramfs source file(s)"
       default ""
       depends on BLK_DEV_INITRD=n

Regarding the documenation it would have been helpful to me if Documentation/initrd.txt had a reference to Documentation/early-userspace/README. I'm not sure who maintains that directory, or I'd send a suggestion. tldp.org?

THX
Ed Martini


Original context: http://www.linux-mips.org/archives/linux-mips/2005-03/index.html



Ralf Baechle wrote:

On Tue, Mar 15, 2005 at 02:37:45PM -0800, Ed Martini wrote:



Also, unless you move the location of .init.ramfs, it gets freed twice, leading to a panic.



Interesting one. When I tested the code recently it did work for me and it shouldn't have changed since. The way this is supposed to work is by setting the page_count to 1 by using set_page_count and unmarking the page as reserved, so after that point a free_page should actually succeed - even if done twice as you've observed, first in populate_rootfs then once more in free_initmem.

It seems a frighteningly bad idea though since it relies on no memory
from the initrd range being allocated between the two calls - or it would
end being freed by force, in use or not.  On startup Linux tends to
allocate memory starting from high address towards low addresses which
must be why we usually get away with this one.



From the documentation alone it's impossible to figure out how to build your initramfs. In various places the docs refer to the initial executable as /linuxrc, /kinit, /init, and possibly others. If you read init/main.c you see that for an initramfs, your initial process will be started from /init.



I guess I read the code so I didn't notice the lacking qualities of the documentation ...

Ralf





[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux