please help, "Ram disk image is corrupt or invalid" (qemu virt machine, arm64)

Jaehoon Chung jh80.chung at samsung.com
Wed Oct 20 00:40:40 CEST 2021


Hi,

On 10/19/21 9:31 PM, Chan Kim wrote:
> Hi, Jaehoon,
> 
> Thanks for the help.
> 
>> You can check the debug message in common/image-board.c.
>> Did you create ramdisk image the correct format?
> 
> To make ramdisk image (I made initramfs which I know is not a real disk image format (https://stackoverflow.com/questions/10603104/the-difference-between-initrd-and-initramfs, 
> but with -kernel=Image -initrd=initramfs.cpio.gz, qemu ran ok to the shell prompt), 
> I followed this procedure under busybox-1.32.1 directory.
> 
> o build busybox
> 
>     make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
>     make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
>    ==> set CONFIG_CROSS_COMPILE_PREFIX=aarch64-linux-gnu- and set CONFIG_STATIC=y (position independent executable automatically not set)
>     make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
>     make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- install
> 
> o after make install, under _install,
>     mkdir -p dev
>     sudo mknod dev/console c 5 1
>     sudo mknod dev/ram b 1 0
> 
> o make init script which contains (under _install)
> 
>     #!/bin/sh
>     echo "### INIT SCRIPT ###"
>     mkdir /proc /sys /tmp
>     mount -t proc none /proc
>     mount -t sysfs none /sys
>     mount -t tmpfs none /tmp
>     echo -e "\nThis boot took $(cut -d' ' -f1 /proc/uptime) seconds\n"
>     ifconfig eth0 10.0.2.15 netmask 255.255.255.0 up
>     route add default gw 10.0.2.2
>     exec /bin/sh
> 
> o make ramdisk image (under _install directory)
>     find -print0 | cpio -0oH newc | gzip -9 > ../initramfs.cpio.gz

AFAIK, you need to create the ramdisk image for U-boot with mkimage tool.
or you can include initramfs.cpio.gz in kernel at build time.

Best Regards,
Jaehoon Chung

> 
> 
> I tried to set breakpoint in boot_get_ramdisk function in common/image.c (where "Wrong Ramdisk Image Format" is printed) but somehow the break point doesn't work. (But I could stop at board_init_f function).
> I'll try to figure out why the break point isn't working there.
> 
> Can you find anything suspicious or give me a suggestion?
> 
> Thank you!
> Best regards,
> 
> Chan Kim
> 
>> -----Original Message-----
>> From: Jaehoon Chung <jh80.chung at samsung.com>
>> Sent: Tuesday, October 19, 2021 7:43 PM
>> To: Chan Kim <ckim at etri.re.kr>; 'François Ozog' <francois.ozog at linaro.org>
>> Cc: u-boot at lists.denx.de
>> Subject: Re: please help, "Ram disk image is corrupt or invalid" (qemu
>> virt machine, arm64)
>>
>> Hi,
>>
>> On 10/19/21 6:59 PM, Chan Kim wrote:
>>> Hi, François
>>>
>>>
>>>
>>> Thank you for the response.
>>>
>>> I’m now studying u-boot so it’ll take some time to learn about
>> SystemReady boot.
>>>
>>> BTW, inspired by your email, I tried this one. (after tftp of all
>>> three files)
>>>
>>>
>>>
>>> => fdt addr 0x40000000
>>>
>>> => fdt chosen 0x42000000 0x4211e2a1       // the length of
>> initramfs.cpio.gz is 1172129 = 0x11e2a1)
>>>
>>> => fdt print /chosen
>>>
>>> chosen {
>>>
>>>            linux,initrd-end = <0x00000000 0x4211e2a1>;
>>>
>>>            linux,initrd-start = <0x00000000 0x42000000>;
>>>
>>>            stdout-path = "/pl011 at 9000000";
>>>
>>> };
>>>
>>> =>  booti 0x40200000 0x42000000 0x40000000
>>>
>>> Moving Image from 0x40200000 to 0x40280000, end=41c44000
>>>
>>> Wrong Ramdisk Image Format
>>>
>>> Ramdisk image is corrupt or invalid
>>
>> You can check the debug message in common/image-board.c.
>> Did you create ramdisk image the correct format?
>>
>> Best Regards,
>> Jaehoon Chung
>>
>>>
>>>
>>>
>>> I hoped now I set the device tree to have the initrd location, the
>> kernel could find it, but not.
>>>
>>> Isn’t there a correct method using this approach?
>>>
>>> Thank you! Best regards,
>>>
>>>
>>>
>>> Chan Kim
>>>
>>>
>>>
>>> From: François Ozog <francois.ozog at linaro.org>
>>> Sent: Tuesday, October 19, 2021 4:32 PM
>>> To: Chan Kim <ckim at etri.re.kr>
>>> Cc: u-boot at lists.denx.de
>>> Subject: Re: please help, "Ram disk image is corrupt or invalid" (qemu
>>> virt machine, arm64)
>>>
>>>
>>>
>>> Hi
>>>
>>>
>>>
>>> If you use the second argument to indicate the location of the initrd
>> then Linux will use device tree information to get the size of the initrd.
>> That information is probably absent or incorrect.
>>>
>>>
>>>
>>> The initrd= in your command line is thus useless as you task U-boot to
>> load it.
>>>
>>>
>>>
>>> You may want to consider the Arm defined SystemReady boot flow to avoid
>> issues and  benefit from secure boot flow and future extensions. In the
>> SystemReady boot flow , the Linux efi stub asks uboot to load the initrd
>> and do not need devicectree metadata to get any location or size (this is
>> to reinforce the use of device tree for hardware description as opposed to
>> hacking all information sharing between boot stages).
>>>
>>>
>>>
>>> Cheers
>>>
>>>
>>>
>>> FF
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> Le mer. 13 oct. 2021 à 07:44, Chan Kim <ckim at etri.re.kr
>> <mailto:ckim at etri.re.kr> > a écrit :
>>>
>>>
>>>
>>> Hello all,
>>>
>>>
>>>
>>> I can boot linux kernel using this command line.
>>>
>>> ${QEMU_DIR}/qemu-system-aarch64 -M ${QMACHINE} -cpu cortex-a72 -kernel
>>> ${LINUX_DIR}/arch/arm64/boot/Image -initrd
>>> ${BUSYBOX_DIR}/initramfs.cpio.gz --append "root=/dev/ram init=/init
>>> nokaslr earlycon ip=dhcp" -m 2048M -nographic -netdev user,id=n1
>>> -device e1000,netdev=n1
>>>
>>>
>>>
>>> After reading some docs and getting helps, I tried u-boot.
>>>
>>> After loading Image (for arm64) and dtb.dtb, I could see the kernel
>>> booting to the final stage of deploying initramfs but it failed
>>> because I didn't give the initramfs.cpio.gz address. (I used "booti
>>> 0x40200000 - 0x40000000)
>>>
>>>
>>>
>>> So I added initramfs.cpio.gz under /opt/tftp, and loaded kernel,
>>> initramfs, and dbt on memory and gave "booti 0x40200000 0x42000000
>>> 0x40000000", addresses are kernel, initramfs and dtb).
>>>
>>> Below is the log. (please see the final error message below)
>>>
>>>
>>>
>>> ++ /home/ckim/QEMU/qemu/build/aarch64-softmmu/qemu-system-aarch64 -M
>>> ++ virt
>>> -bios u-boot.bin -cpu cortex-a57 -bios u-boot.bin -nographic -drive
>>> if=pflash,format=raw,index=1,file=envstore.img -netdev
>>> user,id=net0,tftp=/opt/tftp -device e1000,netdev=net0
>>>
>>>
>>>
>>>
>>>
>>> U-Boot 2021.10-00455-g50c84208ad (Oct 13 2021 - 12:58:40 +0900)
>>>
>>>
>>>
>>> DRAM:  128 MiB
>>>
>>> Flash: 64 MiB
>>>
>>> MMC:
>>>
>>> Loading Environment from Flash... *** Warning - bad CRC, using default
>>> environment
>>>
>>>
>>>
>>> In:    pl011 at 9000000
>>>
>>> Out:   pl011 at 9000000
>>>
>>> Err:   pl011 at 9000000
>>>
>>> Net:   e1000: 52:54:00:12:34:56
>>>
>>>        eth0: e1000#0
>>>
>>> Hit any key to stop autoboot:  0
>>>
>>> starting USB...
>>>
>>> No working controllers found
>>>
>>> USB is stopped. Please issue 'usb start' first.
>>>
>>> scanning bus for devices...
>>>
>>>
>>>
>>> Device 0: unknown device
>>>
>>>
>>>
>>> Device 0: unknown device
>>>
>>> starting USB...
>>>
>>> No working controllers found
>>>
>>> BOOTP broadcast 1
>>>
>>> BOOTP broadcast 2
>>>
>>> BOOTP broadcast 3
>>>
>>> DHCP client bound to address 10.0.2.15 (1004 ms)
>>>
>>> Using e1000#0 device
>>>
>>> TFTP from server 10.0.2.2; our IP address is 10.0.2.15
>>>
>>> Filename 'boot.scr.uimg'.
>>>
>>> Load address: 0x40200000
>>>
>>> Loading: *
>>>
>>> TFTP error: 'File not found' (1)
>>>
>>> Not retrying...
>>>
>>> BOOTP broadcast 1
>>>
>>> BOOTP broadcast 2
>>>
>>> BOOTP broadcast 3
>>>
>>> DHCP client bound to address 10.0.2.15 (1001 ms)
>>>
>>> Using e1000#0 device
>>>
>>> TFTP from server 10.0.2.2; our IP address is 10.0.2.15
>>>
>>> Filename 'boot.scr.uimg'.
>>>
>>> Load address: 0x40400000
>>>
>>> Loading: *
>>>
>>> TFTP error: 'File not found' (1)
>>>
>>> Not retrying...
>>>
>>> => tftp 0x40000000 dtb.dtb
>>>
>>> Using e1000#0 device
>>>
>>> TFTP from server 10.0.2.2; our IP address is 10.0.2.15
>>>
>>> Filename 'dtb.dtb'.
>>>
>>> Load address: 0x40000000
>>>
>>> Loading:
>>> #################################################################
>>>
>>> #########
>>>
>>> 963.9 KiB/s
>>>
>>> done
>>>
>>> Bytes transferred = 1048576 (100000 hex)
>>>
>>> => tftp 0x40200000 Image
>>>
>>> Using e1000#0 device
>>>
>>> TFTP from server 10.0.2.2; our IP address is 10.0.2.15
>>>
>>> Filename 'Image'.
>>>
>>> Load address: 0x40200000
>>>
>>> Loading:
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> #################################################################
>>>
>>> ###################################
>>>
>>> 10 MiB/s
>>>
>>> done
>>>
>>> Bytes transferred = 26489344 (1943200 hex)
>>>
>>> => tftp 0x42000000 initramfs.cpio.gz
>>>
>>> Using e1000#0 device
>>>
>>> TFTP from server 10.0.2.2; our IP address is 10.0.2.15
>>>
>>> Filename 'initramfs.cpio.gz'.
>>>
>>> Load address: 0x42000000
>>>
>>> Loading:
>>> #################################################################
>>>
>>> #################
>>>
>>> 1 MiB/s
>>>
>>> done
>>>
>>> Bytes transferred = 1169894 (11d9e6 hex)
>>>
>>> => booti 0x40200000 0x42000000 0x40000000
>>>
>>> Moving Image from 0x40200000 to 0x40280000, end=41c44000
>>>
>>> Wrong Ramdisk Image Format
>>>
>>> Ramdisk image is corrupt or invalid
>>>
>>>
>>>
>>> At the end, it says "Ram disk image is corrupt or invalid". What am I
>>> doing wrong?
>>>
>>> I tried with un-gzipped file of initramfs, the same. Should I use real
>>> initrd format(dd image)?
>>>
>>> Any help will be very much appreciated.
>>>
>>>
>>>
>>> Thank you!
>>>
>>> Chan Kim
>>>
>>>
>>>
>>>
>>
> 
> 
> 
> 
> 



More information about the U-Boot mailing list