Nokia RX-51: Add support for booting kernel in zImage format
Enable U-Boot bootz command and update env scripts to try loading also zImage file and to try booting via bootz command. Update also lowlevel_init.S code for checking validity of zImage magic to correctly relocate kernel in zImage format. This change allows U-Boot to directly boot Linux kernel without need for converting kernel image into U-Boot uImage format. Signed-off-by: Pali Rohár <pali@kernel.org> Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com> Link: https://lore.kernel.org/r/20210618132704.32066-1-pali@kernel.org
This commit is contained in:
		
							parent
							
								
									149389424f
								
							
						
					
					
						commit
						cc434fccba
					
				| 
						 | 
					@ -27,6 +27,9 @@ imagesize:		/* maximal size of image */
 | 
				
			||||||
ih_magic:		/* IH_MAGIC in big endian from include/image.h */
 | 
					ih_magic:		/* IH_MAGIC in big endian from include/image.h */
 | 
				
			||||||
	.word 0x56190527
 | 
						.word 0x56190527
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					z_magic:		/* LINUX_ARM_ZIMAGE_MAGIC */
 | 
				
			||||||
 | 
						.word 0x016f2818
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Routine: save_boot_params (called after reset from start.S)
 | 
					 * Routine: save_boot_params (called after reset from start.S)
 | 
				
			||||||
 * Description: Copy attached kernel to address KERNEL_ADDRESS
 | 
					 * Description: Copy attached kernel to address KERNEL_ADDRESS
 | 
				
			||||||
| 
						 | 
					@ -75,6 +78,12 @@ copy_kernel_start:
 | 
				
			||||||
	ldr	r4, [r0]	/* r4 - 4 bytes header of kernel */
 | 
						ldr	r4, [r0]	/* r4 - 4 bytes header of kernel */
 | 
				
			||||||
	ldr	r5, ih_magic	/* r5 - IH_MAGIC */
 | 
						ldr	r5, ih_magic	/* r5 - IH_MAGIC */
 | 
				
			||||||
	cmp	r4, r5
 | 
						cmp	r4, r5
 | 
				
			||||||
 | 
						beq	copy_kernel_loop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* check for valid kernel zImage */
 | 
				
			||||||
 | 
						ldr	r4, [r0, #36]	/* r4 - 4 bytes header of kernel at offset 36 */
 | 
				
			||||||
 | 
						ldr	r5, z_magic	/* r5 - LINUX_ARM_ZIMAGE_MAGIC */
 | 
				
			||||||
 | 
						cmp	r4, r5
 | 
				
			||||||
	bne	copy_kernel_end	/* skip if invalid image */
 | 
						bne	copy_kernel_end	/* skip if invalid image */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
copy_kernel_loop:
 | 
					copy_kernel_loop:
 | 
				
			||||||
| 
						 | 
					@ -85,7 +94,8 @@ copy_kernel_loop:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
copy_kernel_end:
 | 
					copy_kernel_end:
 | 
				
			||||||
	mov	r5, #0
 | 
						mov	r5, #0
 | 
				
			||||||
	str	r5, [r0]	/* remove 4 bytes header of kernel */
 | 
						str	r5, [r0]	/* remove 4 bytes header of kernel uImage */
 | 
				
			||||||
 | 
						str	r5, [r0, #36]	/* remove 4 bytes header of kernel zImage */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Fix u-boot code */
 | 
					/* Fix u-boot code */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,6 +18,7 @@ CONFIG_CONSOLE_MUX=y
 | 
				
			||||||
CONFIG_HUSH_PARSER=y
 | 
					CONFIG_HUSH_PARSER=y
 | 
				
			||||||
CONFIG_SYS_PROMPT="Nokia RX-51 # "
 | 
					CONFIG_SYS_PROMPT="Nokia RX-51 # "
 | 
				
			||||||
# CONFIG_CMD_BDI is not set
 | 
					# CONFIG_CMD_BDI is not set
 | 
				
			||||||
 | 
					CONFIG_CMD_BOOTZ=y
 | 
				
			||||||
# CONFIG_BOOTM_NETBSD is not set
 | 
					# CONFIG_BOOTM_NETBSD is not set
 | 
				
			||||||
# CONFIG_BOOTM_PLAN9 is not set
 | 
					# CONFIG_BOOTM_PLAN9 is not set
 | 
				
			||||||
# CONFIG_BOOTM_RTEMS is not set
 | 
					# CONFIG_BOOTM_RTEMS is not set
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,13 +11,14 @@ a kernel. In order to transparently boot the original kernel, it will be
 | 
				
			||||||
appended to u-boot.bin at 0x40000. NOLO will load the entire image into
 | 
					appended to u-boot.bin at 0x40000. NOLO will load the entire image into
 | 
				
			||||||
(random) memory and execute u-boot, which saves hw revision, boot reason
 | 
					(random) memory and execute u-boot, which saves hw revision, boot reason
 | 
				
			||||||
and boot mode ATAGs set by NOLO. Then the bootscripts will attempt to load
 | 
					and boot mode ATAGs set by NOLO. Then the bootscripts will attempt to load
 | 
				
			||||||
uImage or boot.scr from a fat, ext2/ext3 or ext4 filesystem in external
 | 
					uImage, zImage or boot.scr from a fat or ext2/3/4 filesystem on external
 | 
				
			||||||
SD card or internal eMMC memory. If this fails or keyboard is closed then
 | 
					SD card or internal eMMC memory. If this fails or keyboard is closed then
 | 
				
			||||||
the appended kernel image will be booted using some generated and some
 | 
					the appended kernel image will be booted using some generated and some
 | 
				
			||||||
stored ATAGs (see boot order).
 | 
					stored ATAGs (see boot order).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
For generating combined image of u-boot and kernel there is a simple script
 | 
					For generating combined image of u-boot and kernel (either in uImage or zImage
 | 
				
			||||||
called u-boot-gen-combined. It is available in following repository:
 | 
					format) there is a simple script called u-boot-gen-combined. It is available in
 | 
				
			||||||
 | 
					following repository:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  https://github.com/pali/u-boot-maemo
 | 
					  https://github.com/pali/u-boot-maemo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,7 +42,8 @@ Boot from SD or eMMC in this order:
 | 
				
			||||||
 * 1.
 | 
					 * 1.
 | 
				
			||||||
   * 1.1 find boot.scr on first fat partition
 | 
					   * 1.1 find boot.scr on first fat partition
 | 
				
			||||||
   * 1.2 find uImage on first fat partition
 | 
					   * 1.2 find uImage on first fat partition
 | 
				
			||||||
   * 1.3 same order for 2. - 4. fat partition
 | 
					   * 1.3 find zImage on first fat partition
 | 
				
			||||||
 | 
					   * 1.4 same order for 2. - 4. fat partition
 | 
				
			||||||
 * 2. same as 1. but for ext2/3 partition
 | 
					 * 2. same as 1. but for ext2/3 partition
 | 
				
			||||||
 * 3. same as 1. but for ext4 partition
 | 
					 * 3. same as 1. but for ext4 partition
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -129,12 +129,14 @@ int rx51_kp_getc(struct stdio_dev *sdev);
 | 
				
			||||||
	"scriptboot=echo Running ${mmcscriptfile} from mmc " \
 | 
						"scriptboot=echo Running ${mmcscriptfile} from mmc " \
 | 
				
			||||||
		"${mmcnum}:${mmcpart} ...; source ${scriptaddr}\0" \
 | 
							"${mmcnum}:${mmcpart} ...; source ${scriptaddr}\0" \
 | 
				
			||||||
	"kernboot=echo Booting ${mmckernfile} from mmc " \
 | 
						"kernboot=echo Booting ${mmckernfile} from mmc " \
 | 
				
			||||||
		"${mmcnum}:${mmcpart} ...; bootm ${kernaddr}\0" \
 | 
							"${mmcnum}:${mmcpart} ...; bootm ${kernaddr} || " \
 | 
				
			||||||
 | 
								"bootz ${kernaddr}\0" \
 | 
				
			||||||
	"kerninitrdboot=echo Booting ${mmckernfile} ${mmcinitrdfile} from mmc "\
 | 
						"kerninitrdboot=echo Booting ${mmckernfile} ${mmcinitrdfile} from mmc "\
 | 
				
			||||||
		"${mmcnum}:${mmcpart} ...; bootm ${kernaddr} ${initrdaddr}\0" \
 | 
							"${mmcnum}:${mmcpart} ...; bootm ${kernaddr} ${initrdaddr} || " \
 | 
				
			||||||
 | 
								"bootz ${kernaddr} ${initrdaddr}\0" \
 | 
				
			||||||
	"attachboot=echo Booting attached kernel image ...;" \
 | 
						"attachboot=echo Booting attached kernel image ...;" \
 | 
				
			||||||
		"setenv setup_omap_atag 1;" \
 | 
							"setenv setup_omap_atag 1;" \
 | 
				
			||||||
		"bootm ${attkernaddr};" \
 | 
							"bootm ${attkernaddr} || bootz ${attkernaddr};" \
 | 
				
			||||||
		"setenv setup_omap_atag\0" \
 | 
							"setenv setup_omap_atag\0" \
 | 
				
			||||||
	"trymmcscriptboot=if run switchmmc; then " \
 | 
						"trymmcscriptboot=if run switchmmc; then " \
 | 
				
			||||||
			"if run scriptload; then " \
 | 
								"if run scriptload; then " \
 | 
				
			||||||
| 
						 | 
					@ -154,7 +156,8 @@ int rx51_kp_getc(struct stdio_dev *sdev);
 | 
				
			||||||
			"fi; " \
 | 
								"fi; " \
 | 
				
			||||||
		"fi\0" \
 | 
							"fi\0" \
 | 
				
			||||||
	"trymmcpartboot=setenv mmcscriptfile boot.scr; run trymmcscriptboot;" \
 | 
						"trymmcpartboot=setenv mmcscriptfile boot.scr; run trymmcscriptboot;" \
 | 
				
			||||||
		"setenv mmckernfile uImage; run trymmckernboot\0" \
 | 
							"setenv mmckernfile uImage; run trymmckernboot;" \
 | 
				
			||||||
 | 
							"setenv mmckernfile zImage; run trymmckernboot\0" \
 | 
				
			||||||
	"trymmcallpartboot=setenv mmcpart 1; run trymmcpartboot;" \
 | 
						"trymmcallpartboot=setenv mmcpart 1; run trymmcpartboot;" \
 | 
				
			||||||
		"setenv mmcpart 2; run trymmcpartboot;" \
 | 
							"setenv mmcpart 2; run trymmcpartboot;" \
 | 
				
			||||||
		"setenv mmcpart 3; run trymmcpartboot;" \
 | 
							"setenv mmcpart 3; run trymmcpartboot;" \
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -159,7 +159,7 @@ setenv bootdelay 1;
 | 
				
			||||||
EOF
 | 
					EOF
 | 
				
			||||||
./mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n bootmenu_uboot -d bootmenu_uboot bootmenu_uboot.scr
 | 
					./mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n bootmenu_uboot -d bootmenu_uboot bootmenu_uboot.scr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Generate bootmenu for eMMC booting
 | 
					# Generate bootmenu for eMMC booting (uImage)
 | 
				
			||||||
cat > bootmenu_emmc << EOF
 | 
					cat > bootmenu_emmc << EOF
 | 
				
			||||||
setenv bootmenu_0 'uImage-2.6.28-omap1 from eMMC=setenv mmcnum 1; setenv mmcpart 1; setenv mmctype fat; setenv bootargs; setenv setup_omap_atag 1; setenv mmckernfile uImage-2.6.28-omap1; run trymmckernboot';
 | 
					setenv bootmenu_0 'uImage-2.6.28-omap1 from eMMC=setenv mmcnum 1; setenv mmcpart 1; setenv mmctype fat; setenv bootargs; setenv setup_omap_atag 1; setenv mmckernfile uImage-2.6.28-omap1; run trymmckernboot';
 | 
				
			||||||
setenv bootmenu_1;
 | 
					setenv bootmenu_1;
 | 
				
			||||||
| 
						 | 
					@ -168,6 +168,15 @@ setenv bootdelay 1;
 | 
				
			||||||
EOF
 | 
					EOF
 | 
				
			||||||
./mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n bootmenu_emmc -d bootmenu_emmc bootmenu_emmc.scr
 | 
					./mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n bootmenu_emmc -d bootmenu_emmc bootmenu_emmc.scr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Generate bootmenu for eMMC booting (zImage)
 | 
				
			||||||
 | 
					cat > bootmenu_emmc2 << EOF
 | 
				
			||||||
 | 
					setenv bootmenu_0 'zImage-2.6.28-omap1 from eMMC=setenv mmcnum 1; setenv mmcpart 1; setenv mmctype fat; setenv bootargs; setenv setup_omap_atag 1; setenv mmckernfile zImage-2.6.28-omap1; run trymmckernboot';
 | 
				
			||||||
 | 
					setenv bootmenu_1;
 | 
				
			||||||
 | 
					setenv bootmenu_delay 1;
 | 
				
			||||||
 | 
					setenv bootdelay 1;
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					./mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n bootmenu_emmc2 -d bootmenu_emmc2 bootmenu_emmc2.scr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Generate bootmenu for OneNAND booting
 | 
					# Generate bootmenu for OneNAND booting
 | 
				
			||||||
cat > bootmenu_nand << EOF
 | 
					cat > bootmenu_nand << EOF
 | 
				
			||||||
setenv bootmenu_0 'uImage-2.6.28-omap1 from OneNAND=mtd read initfs \${kernaddr}; setenv bootargs; setenv setup_omap_atag 1; bootm \${kernaddr}';
 | 
					setenv bootmenu_0 'uImage-2.6.28-omap1 from OneNAND=mtd read initfs \${kernaddr}; setenv bootargs; setenv setup_omap_atag 1; bootm \${kernaddr}';
 | 
				
			||||||
| 
						 | 
					@ -177,10 +186,18 @@ setenv bootdelay 1;
 | 
				
			||||||
EOF
 | 
					EOF
 | 
				
			||||||
./mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n bootmenu_nand -d bootmenu_nand bootmenu_nand.scr
 | 
					./mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n bootmenu_nand -d bootmenu_nand bootmenu_nand.scr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Generate bootmenu for default booting
 | 
				
			||||||
 | 
					cat > bootmenu_default << EOF
 | 
				
			||||||
 | 
					setenv bootmenu_delay 1;
 | 
				
			||||||
 | 
					setenv bootdelay 1;
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					./mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n bootmenu_default -d bootmenu_default bootmenu_default.scr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Generate combined image from u-boot and Maemo fiasco kernel
 | 
					# Generate combined image from u-boot and Maemo fiasco kernel
 | 
				
			||||||
dd if=kernel_2.6.28/boot/zImage-2.6.28-20103103+0m5.fiasco of=zImage-2.6.28-omap1 skip=95 bs=1
 | 
					dd if=kernel_2.6.28/boot/zImage-2.6.28-20103103+0m5.fiasco of=zImage-2.6.28-omap1 skip=95 bs=1
 | 
				
			||||||
 | 
					./u-boot-gen-combined u-boot.bin zImage-2.6.28-omap1 combined_zimage.bin
 | 
				
			||||||
./mkimage -A arm -O linux -T kernel -C none -a 80008000 -e 80008000 -n zImage-2.6.28-omap1 -d zImage-2.6.28-omap1 uImage-2.6.28-omap1
 | 
					./mkimage -A arm -O linux -T kernel -C none -a 80008000 -e 80008000 -n zImage-2.6.28-omap1 -d zImage-2.6.28-omap1 uImage-2.6.28-omap1
 | 
				
			||||||
./u-boot-gen-combined u-boot.bin uImage-2.6.28-omap1 combined.bin
 | 
					./u-boot-gen-combined u-boot.bin uImage-2.6.28-omap1 combined_uimage.bin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Generate combined hack image from u-boot and Maemo fiasco kernel (kernel starts at 2MB offset and qflasher puts 2kB header before supplied image)
 | 
					# Generate combined hack image from u-boot and Maemo fiasco kernel (kernel starts at 2MB offset and qflasher puts 2kB header before supplied image)
 | 
				
			||||||
cp u-boot.bin combined_hack.bin
 | 
					cp u-boot.bin combined_hack.bin
 | 
				
			||||||
| 
						 | 
					@ -191,24 +208,37 @@ truncate -s 50MiB emmc_uboot.img
 | 
				
			||||||
mformat -m 0xf8 -F -h 4 -s 16 -c 1 -t $((50*1024*1024/(4*16*512))) :: -i emmc_uboot.img
 | 
					mformat -m 0xf8 -F -h 4 -s 16 -c 1 -t $((50*1024*1024/(4*16*512))) :: -i emmc_uboot.img
 | 
				
			||||||
mcopy bootmenu_uboot.scr ::/bootmenu.scr -i emmc_uboot.img
 | 
					mcopy bootmenu_uboot.scr ::/bootmenu.scr -i emmc_uboot.img
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Generate FAT32 eMMC image for eMMC booting
 | 
					# Generate FAT32 eMMC image for eMMC booting (uImage)
 | 
				
			||||||
truncate -s 50MiB emmc_emmc.img
 | 
					truncate -s 50MiB emmc_emmc.img
 | 
				
			||||||
mformat -m 0xf8 -F -h 4 -s 16 -c 1 -t $((50*1024*1024/(4*16*512))) :: -i emmc_emmc.img
 | 
					mformat -m 0xf8 -F -h 4 -s 16 -c 1 -t $((50*1024*1024/(4*16*512))) :: -i emmc_emmc.img
 | 
				
			||||||
mcopy uImage-2.6.28-omap1 ::/uImage-2.6.28-omap1 -i emmc_emmc.img
 | 
					mcopy uImage-2.6.28-omap1 ::/uImage-2.6.28-omap1 -i emmc_emmc.img
 | 
				
			||||||
mcopy bootmenu_emmc.scr ::/bootmenu.scr -i emmc_emmc.img
 | 
					mcopy bootmenu_emmc.scr ::/bootmenu.scr -i emmc_emmc.img
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Generate FAT32 eMMC image for eMMC booting (zImage)
 | 
				
			||||||
 | 
					truncate -s 50MiB emmc_emmc2.img
 | 
				
			||||||
 | 
					mformat -m 0xf8 -F -h 4 -s 16 -c 1 -t $((50*1024*1024/(4*16*512))) :: -i emmc_emmc2.img
 | 
				
			||||||
 | 
					mcopy zImage-2.6.28-omap1 ::/zImage-2.6.28-omap1 -i emmc_emmc2.img
 | 
				
			||||||
 | 
					mcopy bootmenu_emmc2.scr ::/bootmenu.scr -i emmc_emmc2.img
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Generate FAT32 eMMC image for OneNAND booting
 | 
					# Generate FAT32 eMMC image for OneNAND booting
 | 
				
			||||||
truncate -s 50MiB emmc_nand.img
 | 
					truncate -s 50MiB emmc_nand.img
 | 
				
			||||||
mformat -m 0xf8 -F -h 4 -s 16 -c 1 -t $((50*1024*1024/(4*16*512))) :: -i emmc_nand.img
 | 
					mformat -m 0xf8 -F -h 4 -s 16 -c 1 -t $((50*1024*1024/(4*16*512))) :: -i emmc_nand.img
 | 
				
			||||||
mcopy bootmenu_nand.scr ::/bootmenu.scr -i emmc_nand.img
 | 
					mcopy bootmenu_nand.scr ::/bootmenu.scr -i emmc_nand.img
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Generate FAT32 eMMC image for default booting
 | 
				
			||||||
 | 
					truncate -s 50MiB emmc_default.img
 | 
				
			||||||
 | 
					mformat -m 0xf8 -F -h 4 -s 16 -c 1 -t $((50*1024*1024/(4*16*512))) :: -i emmc_default.img
 | 
				
			||||||
 | 
					mcopy bootmenu_default.scr ::/bootmenu.scr -i emmc_default.img
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Generate MTD image for U-Boot serial console testing
 | 
					# Generate MTD image for U-Boot serial console testing
 | 
				
			||||||
rm -f mtd_uboot.img
 | 
					rm -f mtd_uboot.img
 | 
				
			||||||
./qflasher -v -x xloader-qemu.bin -s secondary-qemu.bin -k u-boot.bin -m rx51 -o mtd_uboot.img
 | 
					./qflasher -v -x xloader-qemu.bin -s secondary-qemu.bin -k u-boot.bin -m rx51 -o mtd_uboot.img
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Generate MTD image for RAM booting from bootloader nolo images, compiled image and rootfs image
 | 
					# Generate MTD image for RAM booting from bootloader nolo images, compiled image and rootfs image
 | 
				
			||||||
rm -f mtd_ram.img
 | 
					rm -f mtd_ram.img
 | 
				
			||||||
./qflasher -v -x xloader-qemu.bin -s secondary-qemu.bin -k combined.bin -r ubi.img -m rx51 -o mtd_ram.img
 | 
					./qflasher -v -x xloader-qemu.bin -s secondary-qemu.bin -k combined_uimage.bin -r ubi.img -m rx51 -o mtd_ram.img
 | 
				
			||||||
 | 
					rm -f mtd_ram2.img
 | 
				
			||||||
 | 
					./qflasher -v -x xloader-qemu.bin -s secondary-qemu.bin -k combined_zimage.bin -r ubi.img -m rx51 -o mtd_ram2.img
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Generate MTD image for eMMC booting from bootloader nolo images, u-boot image and rootfs image
 | 
					# Generate MTD image for eMMC booting from bootloader nolo images, u-boot image and rootfs image
 | 
				
			||||||
rm -f mtd_emmc.img
 | 
					rm -f mtd_emmc.img
 | 
				
			||||||
| 
						 | 
					@ -238,7 +268,7 @@ wait -n $sleep_pid $qemu_pid || true
 | 
				
			||||||
kill -9 $tail_pid $sleep_pid $qemu_pid 2>/dev/null || true
 | 
					kill -9 $tail_pid $sleep_pid $qemu_pid 2>/dev/null || true
 | 
				
			||||||
wait || true
 | 
					wait || true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Run MTD image in qemu and wait for 300s if kernel from RAM is correctly booted
 | 
					# Run MTD image in qemu and wait for 300s if uImage kernel from RAM is correctly booted
 | 
				
			||||||
rm -f qemu_ram.log
 | 
					rm -f qemu_ram.log
 | 
				
			||||||
./qemu-system-arm -M n900 -mtdblock mtd_ram.img -serial /dev/stdout -display none > qemu_ram.log &
 | 
					./qemu-system-arm -M n900 -mtdblock mtd_ram.img -serial /dev/stdout -display none > qemu_ram.log &
 | 
				
			||||||
qemu_pid=$!
 | 
					qemu_pid=$!
 | 
				
			||||||
| 
						 | 
					@ -250,7 +280,19 @@ wait -n $sleep_pid $qemu_pid || true
 | 
				
			||||||
kill -9 $tail_pid $sleep_pid $qemu_pid 2>/dev/null || true
 | 
					kill -9 $tail_pid $sleep_pid $qemu_pid 2>/dev/null || true
 | 
				
			||||||
wait || true
 | 
					wait || true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Run MTD image in qemu and wait for 300s if kernel from eMMC is correctly booted
 | 
					# Run MTD image in qemu and wait for 300s if zImage kernel from RAM is correctly booted
 | 
				
			||||||
 | 
					rm -f qemu_ram2.log
 | 
				
			||||||
 | 
					./qemu-system-arm -M n900 -mtdblock mtd_ram2.img -sd emmc_default.img -serial /dev/stdout -display none > qemu_ram2.log &
 | 
				
			||||||
 | 
					qemu_pid=$!
 | 
				
			||||||
 | 
					tail -F qemu_ram2.log &
 | 
				
			||||||
 | 
					tail_pid=$!
 | 
				
			||||||
 | 
					sleep 300 &
 | 
				
			||||||
 | 
					sleep_pid=$!
 | 
				
			||||||
 | 
					wait -n $sleep_pid $qemu_pid || true
 | 
				
			||||||
 | 
					kill -9 $tail_pid $sleep_pid $qemu_pid 2>/dev/null || true
 | 
				
			||||||
 | 
					wait || true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Run MTD image in qemu and wait for 300s if uImage kernel from eMMC is correctly booted
 | 
				
			||||||
rm -f qemu_emmc.log
 | 
					rm -f qemu_emmc.log
 | 
				
			||||||
./qemu-system-arm -M n900 -mtdblock mtd_emmc.img -sd emmc_emmc.img -serial /dev/stdout -display none > qemu_emmc.log &
 | 
					./qemu-system-arm -M n900 -mtdblock mtd_emmc.img -sd emmc_emmc.img -serial /dev/stdout -display none > qemu_emmc.log &
 | 
				
			||||||
qemu_pid=$!
 | 
					qemu_pid=$!
 | 
				
			||||||
| 
						 | 
					@ -262,6 +304,18 @@ wait -n $sleep_pid $qemu_pid || true
 | 
				
			||||||
kill -9 $tail_pid $sleep_pid $qemu_pid 2>/dev/null || true
 | 
					kill -9 $tail_pid $sleep_pid $qemu_pid 2>/dev/null || true
 | 
				
			||||||
wait || true
 | 
					wait || true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Run MTD image in qemu and wait for 300s if zImage kernel from eMMC is correctly booted
 | 
				
			||||||
 | 
					rm -f qemu_emmc2.log
 | 
				
			||||||
 | 
					./qemu-system-arm -M n900 -mtdblock mtd_emmc.img -sd emmc_emmc2.img -serial /dev/stdout -display none > qemu_emmc2.log &
 | 
				
			||||||
 | 
					qemu_pid=$!
 | 
				
			||||||
 | 
					tail -F qemu_emmc2.log &
 | 
				
			||||||
 | 
					tail_pid=$!
 | 
				
			||||||
 | 
					sleep 300 &
 | 
				
			||||||
 | 
					sleep_pid=$!
 | 
				
			||||||
 | 
					wait -n $sleep_pid $qemu_pid || true
 | 
				
			||||||
 | 
					kill -9 $tail_pid $sleep_pid $qemu_pid 2>/dev/null || true
 | 
				
			||||||
 | 
					wait || true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Run MTD image in qemu and wait for 300s if kernel from OneNAND is correctly booted
 | 
					# Run MTD image in qemu and wait for 300s if kernel from OneNAND is correctly booted
 | 
				
			||||||
rm -f qemu_nand.log
 | 
					rm -f qemu_nand.log
 | 
				
			||||||
./qemu-system-arm -M n900 -mtdblock mtd_nand.img -sd emmc_nand.img -serial /dev/stdout -display none > qemu_nand.log &
 | 
					./qemu-system-arm -M n900 -mtdblock mtd_nand.img -sd emmc_nand.img -serial /dev/stdout -display none > qemu_nand.log &
 | 
				
			||||||
| 
						 | 
					@ -281,13 +335,15 @@ echo "============================="
 | 
				
			||||||
echo
 | 
					echo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if grep -q 'Successfully booted' qemu_uboot.log; then echo "U-Boot serial console is working"; else echo "U-Boot serial console test failed"; fi
 | 
					if grep -q 'Successfully booted' qemu_uboot.log; then echo "U-Boot serial console is working"; else echo "U-Boot serial console test failed"; fi
 | 
				
			||||||
if grep -q 'Successfully booted' qemu_ram.log; then echo "Kernel was successfully booted from RAM"; else echo "Failed to boot kernel from RAM"; fi
 | 
					if grep -q 'Successfully booted' qemu_ram.log; then echo "Kernel (uImage) was successfully booted from RAM"; else echo "Failed to boot kernel (uImage) from RAM"; fi
 | 
				
			||||||
if grep -q 'Successfully booted' qemu_emmc.log; then echo "Kernel was successfully booted from eMMC"; else echo "Failed to boot kernel from eMMC"; fi
 | 
					if grep -q 'Successfully booted' qemu_ram2.log; then echo "Kernel (zImage) was successfully booted from RAM"; else echo "Failed to boot kernel (zImage) from RAM"; fi
 | 
				
			||||||
if grep -q 'Successfully booted' qemu_nand.log; then echo "Kernel was successfully booted from OneNAND"; else echo "Failed to boot kernel from OneNAND"; fi
 | 
					if grep -q 'Successfully booted' qemu_emmc.log; then echo "Kernel (uImage) was successfully booted from eMMC"; else echo "Failed to boot kernel (uImage) from eMMC"; fi
 | 
				
			||||||
 | 
					if grep -q 'Successfully booted' qemu_emmc2.log; then echo "Kernel (zImage) was successfully booted from eMMC"; else echo "Failed to boot kernel (zImage) from eMMC"; fi
 | 
				
			||||||
 | 
					if grep -q 'Successfully booted' qemu_nand.log; then echo "Kernel (uImage) was successfully booted from OneNAND"; else echo "Failed to boot kernel (uImage) from OneNAND"; fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo
 | 
					echo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if grep -q 'Successfully booted' qemu_uboot.log && grep -q 'Successfully booted' qemu_ram.log && grep -q 'Successfully booted' qemu_emmc.log && grep -q 'Successfully booted' qemu_nand.log; then
 | 
					if grep -q 'Successfully booted' qemu_uboot.log && grep -q 'Successfully booted' qemu_ram.log && grep -q 'Successfully booted' qemu_ram2.log && grep -q 'Successfully booted' qemu_emmc.log && grep -q 'Successfully booted' qemu_emmc2.log && grep -q 'Successfully booted' qemu_nand.log; then
 | 
				
			||||||
	echo "All tests passed"
 | 
						echo "All tests passed"
 | 
				
			||||||
	exit 0
 | 
						exit 0
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue