Hi, Jaehoon, I followed your suggestion and used CONFIG_INITRAMFS_SOURCE to include the initramfs.cpio.gz in the 'Image' and could see the shell coming up with booti command. Thanks! Chan Kim
> -----Original Message----- > From: Jaehoon Chung <jh80.ch...@samsung.com> > Sent: Wednesday, October 20, 2021 7:41 AM > To: Chan Kim <c...@etri.re.kr>; 'François Ozog' <francois.o...@linaro.org> > Cc: u-boot@lists.denx.de > Subject: Re: please help, "Ram disk image is corrupt or invalid" (qemu > virt machine, arm64) > > 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-i > > nitrd-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.ch...@samsung.com> > >> Sent: Tuesday, October 19, 2021 7:43 PM > >> To: Chan Kim <c...@etri.re.kr>; 'François Ozog' > >> <francois.o...@linaro.org> > >> Cc: u-boot@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@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.o...@linaro.org> > >>> Sent: Tuesday, October 19, 2021 4:32 PM > >>> To: Chan Kim <c...@etri.re.kr> > >>> Cc: u-boot@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 <c...@etri.re.kr > >> <mailto:c...@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@9000000 > >>> > >>> Out: pl011@9000000 > >>> > >>> Err: pl011@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 > >>> > >>> > >>> > >>> > >> > > > > > > > > > > >