Help with booting with very large initrd

Howard, Marc Marc.Howard at
Fri Aug 25 11:38:35 EST 2006


I'm developing a PPC440GX based board that uses U-Boot to boot a
multi-file boot image composed of the kernel and a very large (> 96MB
uncompressed) initrd file.  The board has 512MB of RAM of which the
upper 16MB is reserved for dedicated hardware.  The 16MB block is
reserved via "mem=496M" and U-Boot is told to stay out of that area by
setting "initrd_high=1f000000".

Before anyone asks there are several reasons for doing things this way.
NFS is not an option in the target environment.

I can tftp the combined boot image to my board.  I checked the crc with
the crc32 command and it agrees exactly with the result obtained on the
host machine using the boot file.  Therefore there is not a "TFTP >32MB"
problem here.

If I boot I get the following:

=> boot
Waiting for PHY auto negotiation to complete... done
ENET Speed is 1000 Mbps - FULL duplex connection
Using ppc_4xx_eth2 device
TFTP from server; our IP address is
Filename 'pMulti-ramdisk'.
Load address: 0x400000
Loading: *
Bytes transferred = 38825407 (2506dbf hex)
Automatic boot of image at addr 0x00400000 ...
## Booting image at 00400000 ...
   Image Name:   Linux-2.6.10_mvl401-440gx_eval-I
   Created:      2006-08-25   1:01:29 UTC
   Image Type:   PowerPC Linux Multi-File Image (gzip compressed)
   Data Size:    38825343 Bytes = 37 MB
   Load Address: 00000000
   Entry Point:  00000000
   Image 0:  1137986 Bytes =  1.1 MB
   Image 1: 37687343 Bytes = 35.9 MB
   Verifying Checksum ... OK
   Uncompressing Multi-File Image ... OK
   Loading Ramdisk to 1cc0e000, end 1efff02f ... OK
Linux version 2.6.10_mvl401-440gx_eval (cram at
(gcc version 3.4.3 (MontaVista 3.4.3- 2006-07-21)) #46
Thu Aug 24 17:28:09 PDT 2006
IBM Ocotea port (MontaVista Software, Inc. <source at>)
Built 1 zonelists
Kernel command line: ramdisk_size=262144 root=/dev/ram rw
ip= off
PID hash table entries: 2048 (order: 11, 32768 bytes)

......stuff deleted......

RAMDISK driver initialized: 8 RAM disks of 262144K size 1024 blocksize
loop: loaded (max 8 devices)

......more stuff deleted......

eth0: link is down
eth0: link is up, 1000 FDX, pause enabled
IP-Config: Complete:
      device=eth0, addr=, mask=,
gw=,     host=scpu2, domain=, nis-domain=(none),
     bootserver=, rootserver=, rootpath=
RAMDISK: Compressed image found at block 0
crc error (orig 0x9a278d64, CRC_VALUE 0xa7bcd2e3 -- ignoring!
length error (orig = 0x0c000000, bytes_out = 0x0c000015 -- ignored
VFS: Mounted root (ext2 filesystem).
Freeing unused kernel memory: 120k init
Warning: unable to open an initial console.
Kernel panic - not syncing: No init found.  Try passing init= option to
 <0>Rebooting in 180 seconds..

(I modified lib/inflate.c so that the crc and length checks would
provide more info).

Since the overall file CRC is good and U-Boot checksums are also okay
this looks like some sort of size limitation with the inflate routine.
BTW, The kerenel was made assuming a 256MB ramdisk; likewise the command
line specs one as well.  The initrd image would fit easily in that

Have any of you worked on this problem before and come up with a


Marc Howard

More information about the Linuxppc-embedded mailing list