initramfs padding for constant redboot exec -r/-s args

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


        Hi

 I have an issue with passing the exact size of the initrd to RedBoot on
 FreeScale Babbage/iMX51.

 RedBoot allows passing an initrd to a linux kernel with the exec
 command; you just load the initrd and kernel in RAM and then pass the
 proper args to exec; for instance this works on my iMX51 dev system:
    fis load initrd
    fis load kernel
    exec -s 0x2a8ee7 -r 0x1000000 -c "console=ttymxc0,115200 root=/dev/mmcblk0p2 rootdelay=2"
 (the FIS directory has the addresses where initrd and kernel need to be
 loaded)

 However I need to pass the exact initrd size in "-s" above.  I suspect
 there's a way to pass a constant size or no size at all to the exec
 command, but it probably requires kernel args; I didn't manange to find
 the proper args though.

 I tried to pad the initrd with zeroes (as done on my Thecus N2100) or
 with 0xff's (as 0xf seems to be the EOB in the gzip compression), I
 tried passing initrd=0x91000000,6M mem=200M@0x90000000 on the kernel
 cmdline (with CONFIG_BLK_DEV_RAM_SIZE=8192) with -s 0x00600000, in all
 cases I overflow the ramdisk fd:
[42949379.640000] RAMDISK: Compressed image found at block 0
[42949380.210000] RAMDISK: incomplete write (-28 != 32768) 8388608

 My understanding is that RedBoot is responsible for creating the ATAG
 headers and will only do so if both -r and -s are used, and that can be
 overriden with the initrd arg; I tried with and without -r / -s and
 with/without the kernel args; in all cases the result was the overflow
 at CONFIG_BLK_DEV_RAM_SIZE.

 The only thing I can think of is patching RedBoot to set ramdisk_size
 (-s) from the length of the image loaded from fis, but it's a bit ugly
 as it needs matching of the -r address with any previously loaded data
 or careful ordering, and users will have older RedBoots for a while
 still, so it's fragile.

 Any idea on how I can handle that properly on the kernel args side?  Or
 perhaps I'm doing something wrong?  Perhaps I need a particular byte
 sequence at the end of initrd data?


 I'd hate to have to update the -s arg in RedBoot's config
 (bootscript_data fconfig) each time the initramfs is updated.   :-/
 Also Thecus N2100 seems to handle that just fine (it doesn't use -r or
 -s but just exec -c "console=ttyS0,115200 root=/dev/ram0
 initrd=0xa0800000,42M mem=128M@0xa0000000").


     Thanks!
-- 
Loïc Minier

-------------------------------------------------------------------
List admin: http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm
FAQ:        http://www.arm.linux.org.uk/mailinglists/faq.php
Etiquette:  http://www.arm.linux.org.uk/mailinglists/etiquette.php


[Linux ARM]     [Linux ARM MSM]     [Linux ARM Kernel]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

Add to Google Follow linuxarm on Twitter