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