
Hello,
PXE/Extlinux boot fails on old Kernel which requires initrd but doesn't have FDT!
sysboot loads initrd loaded into RAM, but system boots without initrd and hangs.
Kernel: Linux odroid 3.8.13.30 #1 SMP PREEMPT Wed Feb 1 20:17:12 CET 2017 armv7l armv7l armv7l GNU/Linux
Looking into [master]u-boot/cmd/pxe.c, function label_boot(cmd_tbl_t *cmdtp, struct pxe_label *label)
Number of boot parameter initializing with 2 622: int bootm_argc = 2;
Before calling boot_m / boot_z, number of boot parameters updated only if FTD is used!
783 if (!bootm_argv[3]) 784 bootm_argv[3] = getenv("fdt_addr"); 785 786 if (bootm_argv[3]) { 787 if (!bootm_argv[2]) 788 bootm_argv[2] = "-"; 789 bootm_argc = 4;
Applying this patch, Number of boot parameters set to 3 if initrd loaded before.
----------------------------------- --- a/u-boot/cmd/pxe.c.orig 2017-10-30 11:53:20.470526920 +0100 +++ b/u-boot/cmd/pxe.c 2017-10-30 11:56:43.526036397 +0100 @@ -780,6 +780,9 @@ static int label_boot(cmd_tbl_t *cmdtp, } }
+ if (bootm_argv[2]) + bootm_argc = 3; + if (!bootm_argv[3]) bootm_argv[3] = env_get("fdt_addr");
--------------------------------
After that, board boots even without FTD.
checked on device with patched U-Boot 2016.11-rc3-g8a65327.
for u-boot branch [master] calling do_bootm / do_bootz not changed so maybe bug still exists.
For u-boot branch [next] this is fixed. bootm_argc initilized with 3 and boot commands called with "-" on systems without initrd
Best regards
Sven Glodowski
------------- Boot log after applying patch
U-Boot 2016.11-rc3-g8a65327-dirty (Oct 30 2017 - 10:28:32 +0100)
CPU: Exynos4412 @ 1 GHz Model: Odroid based on Exynos4412 Board: Odroid based on Exynos4412 Type: u3 DRAM: 2 GiB LDO20@VDDQ_EMMC_1.8V: set 1800000 uV; enabling LDO22@VDDQ_EMMC_2.8V: set 2800000 uV; enabling LDO21@TFLASH_2.8V: set 2800000 uV; enabling MMC: EXYNOS DWMMC: 0, SAMSUNG SDHCI: 1 Net: No ethernet found. Autobooting in 1 seconds, press <ESC> twice to stop. Retrieving file: extlinux.conf reading extlinux.conf 572 bytes read in 2 ms (279.3 KiB/s) Odroid boot options 1: Odroid-3.8.13 (1080p-edid) 2: Odroid-3.8.13 (1080p-noedid) Enter choice: 2: Odroid-3.8.13 (1080p-noedid) Retrieving file: uInitrd reading uInitrd 9325833 bytes read in 330 ms (27 MiB/s) Retrieving file: zImage reading zImage 2344680 bytes read in 86 ms (26 MiB/s) append: console=tty1 console=ttySAC1,115200n8 root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait ro mem=2047M drm_kms_helper.edid_firmware=edid/1920x1080.bin Kernel image @ 0x42000000 [ 0x000000 - 0x23c6e8 ] ## Loading init Ramdisk from Legacy Image at 45000000 ... Image Name: initrd.img-3.8.13.30 Image Type: ARM Linux RAMDisk Image (gzip compressed) Data Size: 9325769 Bytes = 8.9 MiB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK
Starting kernel ...
Uncompressing Linux... done, booting the kernel. [ 0.000000] Booting Linux on physical CPU 0xa00 ...