-Bin Hi Tom,
On Mon, 20 Jan 2025 at 16:45, Tom Rini <[email protected]> wrote: > > On Mon, Jan 20, 2025 at 12:20:06PM -0700, Simon Glass wrote: > > Hi Tom, > > > > On Thu, 16 Jan 2025 at 16:28, Tom Rini <[email protected]> wrote: > > > > > > On Thu, Dec 05, 2024 at 07:35:39PM -0700, Simon Glass wrote: > > > > > > > This series implements read_all() so that it is possible to read all the > > > > files relating to a bootflow, make adjustments and then boot. > > > > > > > > Unfortunately quite a few things stand in the way, so this series > > > > finishes off several pending items: zboot without CONFIG_CMDLINE, > > > > required support in pxe_utils and the differing code in the extlinux and > > > > PXE bootmeths. There is very little new code, but quite a lot of > > > > refactoring. > > > > > > > > The bootm, booti and bootz commands have all been refactored previously, > > > > so that they can operate without needing CONFIG_CMDLINE to be enabled. > > > > At the, time, zboot was left alone, since it is x86-specific and a bit > > > > more trouble. > > > > > > > > However it turns out that the booti support doesn't work with compressed > > > > booti images, so this series resolved that problem too. > > > > > > > > This series adds a programatic API for zboot and uses the forthcoming > > > > bootstd 'image list' to collect information from an extlinux file. It is > > > > therefore possible to parse the file, load the resulting images and then > > > > examine/adjust the resulting bootflow, before booting. > > > > > > > > The addition of options to extlinux resulted in the PXE and extlinux > > > > bootmeth having slightly different features. This is tidied up in this > > > > series, with common functions for both. This allows the same features > > > > (loading images as a separate step) to be provided for PXE. > > > > > > To sync up with what I said on IRC, this breaks > > > test/py/tests/test_net_boot.py likely due to changes in the output. > > > > I am taking a look at this, but I'm really not sure how to set up > > test_net_pxe_boot_config test > > > > I have this in my py/ellesmere/u_boot_boardenv_rpi_3_32b.py file: > > > > env__pxe_boot_test_skip = False > > env__net_pxe_bootable_file = { > > 'fn': 'default.boot', > > 'addr': 0x10000000, > > # 'size': 74, > > 'timeout': 50000, > > 'pattern': 'Linux', > > 'valid_label': '1', > > 'invalid_label': '2', > > 'exp_str_invalid': 'Skipping install for failure retrieving', > > 'local_label': '3', > > 'exp_str_local': 'missing environment variable: localcmd', > > 'empty_label': '4', > > 'exp_str_empty': 'No kernel given, skipping boot', > > 'check_type': 'boot_error', > > 'check_pattern': 'ERROR', > > } > > > > This is what I see when running test_net_pxe_boot_config : > > > > test/py/tests/test_net_boot.py +u-boot-test-reset rpi_3_32b rpi3 > > {lab mode} > > Building U-Boot in pytest-source dir for rpi_3_32b > > Bootstrapping U-Boot from dir /tmp/b/rpi_3_32b > > Writing U-Boot using method rpi3 > > cat: /sys/class/block/sdz1/size: No such file or directory > > cat: /sys/class/block/sdz1/size: No such file or directory > > > > {lab ready in 10.4s: U-Boot 2025.01-rc6-00508-gd6da3dbaef57-dirty (Jan > > 20 2025 - 12:11:05 -0700)} > > skip False > > U-Boot> setenv autoload no > > U-Boot> U-Boot> dhcp > > Waiting for Ethernet connection... done. > > BOOTP broadcast 1 > > DHCP client bound to address 192.168.4.50 (4 ms) > > U-Boot> U-Boot> echo $bootfile > > > > U-Boot> U-Boot> setenv pxefile_addr_r 10000000 > > U-Boot> U-Boot> pxe get > > missing environment variable: pxeuuid > > Retrieving file: pxelinux.cfg/01-b8-27-eb-b4-f9-f2 > > Waiting for Ethernet connection... done. > > Using smsc95xx_eth device > > TFTP from server 192.168.4.1; our IP address is 192.168.4.50 > > Filename 'pxelinux.cfg/01-b8-27-eb-b4-f9-f2'. > > Load address: 0x10000000 > > Loading: * > > TFTP error: 'File not found' (1) > > Not retrying... > > Retrieving file: pxelinux.cfg/C0A80432 > > Waiting for Ethernet connection... done. > > Using smsc95xx_eth device > > TFTP from server 192.168.4.1; our IP address is 192.168.4.50 > > Filename 'pxelinux.cfg/C0A80432'. > > Load address: 0x10000000 > > Loading: * > > TFTP error: 'File not found' (1) > > Not retrying... > > Retrieving file: pxelinux.cfg/C0A8043 > > Waiting for Ethernet connection... done. > > Using smsc95xx_eth device > > TFTP from server 192.168.4.1; our IP address is 192.168.4.50 > > Filename 'pxelinux.cfg/C0A8043'. > > Load address: 0x10000000 > > Loading: * > > TFTP error: 'File not found' (1) > > Not retrying... > > Retrieving file: pxelinux.cfg/C0A804 > > Waiting for Ethernet connection... done. > > Using smsc95xx_eth device > > TFTP from server 192.168.4.1; our IP address is 192.168.4.50 > > Filename 'pxelinux.cfg/C0A804'. > > Load address: 0x10000000 > > Loading: * > > TFTP error: 'File not found' (1) > > Not retrying... > > Retrieving file: pxelinux.cfg/C0A80 > > Waiting for Ethernet connection... done. > > Using smsc95xx_eth device > > TFTP from server 192.168.4.1; our IP address is 192.168.4.50 > > Filename 'pxelinux.cfg/C0A80'. > > Load address: 0x10000000 > > Loading: * > > TFTP error: 'File not found' (1) > > Not retrying... > > Retrieving file: pxelinux.cfg/C0A8 > > Waiting for Ethernet connection... done. > > Using smsc95xx_eth device > > TFTP from server 192.168.4.1; our IP address is 192.168.4.50 > > Filename 'pxelinux.cfg/C0A8'. > > Load address: 0x10000000 > > Loading: * > > TFTP error: 'File not found' (1) > > Not retrying... > > Retrieving file: pxelinux.cfg/C0A > > Waiting for Ethernet connection... done. > > Using smsc95xx_eth device > > TFTP from server 192.168.4.1; our IP address is 192.168.4.50 > > Filename 'pxelinux.cfg/C0A'. > > Load address: 0x10000000 > > Loading: * > > TFTP error: 'File not found' (1) > > Not retrying... > > Retrieving file: pxelinux.cfg/C0 > > Waiting for Ethernet connection... done. > > Using smsc95xx_eth device > > TFTP from server 192.168.4.1; our IP address is 192.168.4.50 > > Filename 'pxelinux.cfg/C0'. > > Load address: 0x10000000 > > Loading: * > > TFTP error: 'File not found' (1) > > Not retrying... > > Retrieving file: pxelinux.cfg/C > > Waiting for Ethernet connection... done. > > Using smsc95xx_eth device > > TFTP from server 192.168.4.1; our IP address is 192.168.4.50 > > Filename 'pxelinux.cfg/C'. > > Load address: 0x10000000 > > Loading: * > > TFTP error: 'File not found' (1) > > Not retrying... > > Retrieving file: pxelinux.cfg/default-arm-bcm283x-rpi > > Waiting for Ethernet connection... done. > > Using smsc95xx_eth device > > TFTP from server 192.168.4.1; our IP address is 192.168.4.50 > > Filename 'pxelinux.cfg/default-arm-bcm283x-rpi'. > > Load address: 0x10000000 > > Loading: * > > TFTP error: 'File not found' (1) > > Not retrying... > > Retrieving file: pxelinux.cfg/default-arm-bcm283x > > Waiting for Ethernet connection... done. > > Using smsc95xx_eth device > > TFTP from server 192.168.4.1; our IP address is 192.168.4.50 > > Filename 'pxelinux.cfg/default-arm-bcm283x'. > > Load address: 0x10000000 > > Loading: ################################################## 64 Bytes > > 4.9 KiB/s > > done > > Bytes transferred = 64 (40 hex) > > Config file '<NULL>' found > > U-Boot> U-Boot> pxe boot 10000000 > > Retrieving file: pxelinux.cfg/default-arm > > Waiting for Ethernet connection... done. > > Using smsc95xx_eth device > > TFTP from server 192.168.4.1; our IP address is 192.168.4.50 > > Filename 'pxelinux.cfg/default-arm'. > > Load address: 0x10000044 > > Loading: ################################################## 349 Bytes > > 30.3 KiB/s > > done > > Bytes transferred = 349 (15d hex) > > Retrieving file: pxelinux.cfg/default > > Waiting for Ethernet connection... done. > > Using smsc95xx_eth device > > TFTP from server 192.168.4.1; our IP address is 192.168.4.50 > > Filename 'pxelinux.cfg/default'. > > Load address: 0x100001a4 > > Loading: ################################################## 108 Bytes > > 9.8 KiB/s > > done > > Bytes transferred = 108 (6c hex) > > Linux boot selections > > 1: Boot kernel > > 2: Invalid boot > > 3: Local boot > > 4: Empty boot > > Enter choice: 3 > > 3: Local boot > > missing environment variable: localcmd > > U-Boot> pxe boot 10000000 > > Retrieving file: pxelinux.cfg/default-arm > > Waiting for Ethernet connection... done. > > Using smsc95xx_eth device > > TFTP from server 192.168.4.1; our IP address is 192.168.4.50 > > Filename 'pxelinux.cfg/default-arm'. > > Load address: 0x10000044 > > Loading: ################################################## 349 Bytes > > 19.5 KiB/s > > done > > Bytes transferred = 349 (15d hex) > > Retrieving file: pxelinux.cfg/default > > Waiting for Ethernet connection... done. > > Using smsc95xx_eth device > > TFTP from server 192.168.4.1; our IP address is 192.168.4.50 > > Filename 'pxelinux.cfg/default'. > > Load address: 0x100001a4 > > Loading: ################################################## 108 Bytes > > 9.8 KiB/s > > done > > Bytes transferred = 108 (6c hex) > > Linux boot selections > > 1: Boot kernel > > 2: Invalid boot > > 3: Local boot > > 4: Empty boot > > Enter choice: 4 > > 4: Empty boot > > No kernel given, skipping boot > > 1: Boot kernel > > Retrieving file: Image > > Waiting for Ethernet connection... done. > > Using smsc95xx_eth device > > TFTP from server 192.168.4.1; our IP address is 192.168.4.50 > > Filename 'Image'. > > Load address: 0x80000 > > Loading: ################################################## 6 Bytes > > 0 Bytes/s > > done > > Bytes transferred = 6 (6 hex) > > Retrieving file: rootfs.cpio.gz.u-boot > > Waiting for Ethernet connection... done. > > Using smsc95xx_eth device > > TFTP from server 192.168.4.1; our IP address is 192.168.4.50 > > Filename 'rootfs.cpio.gz.u-boot'. > > Load address: 0x2700000 > > Loading: ################################################## 30.6 MiB > > 995.1 KiB/s > > done > > Bytes transferred = 32123014 (1ea2886 hex) > > Retrieving file: system.dtb > > Waiting for Ethernet connection... done. > > Using smsc95xx_eth device > > TFTP from server 192.168.4.1; our IP address is 192.168.4.50 > > Filename 'system.dtb'. > > Load address: 0x2600000 > > Loading: ################################################## 11 Bytes > > 1000 Bytes/s > > done > > Bytes transferred = 11 (b hex) > > zimage: Bad magic! > > 2: Invalid boot > > Retrieving file: kernels/install.bin > > Waiting for Ethernet connection... done. > > Using smsc95xx_eth device > > TFTP from server 192.168.4.1; our IP address is 192.168.4.50 > > Filename 'kernels/install.bin'. > > Load address: 0x80000 > > Loading: * > > TFTP error: 'File not found' (1) > > Not retrying... > > Skipping install for failure retrieving kernel > > 3: Local boot > > missing environment variable: localcmd > > U-Boot> F > > > > Do you have a passing run I could compare against, and/or a boardenv > > file that works? > > I didn't test this on 32bit ARM, only 64bit. For Pi 3: > > env__net_uses_usb = True > > env__net_dhcp_server = True > > env__tftp_boot_test_skip = False > > env__net_tftp_bootable_file = { > 'fn': 'v6.6/image.fit.nocomp', > 'addr': 0x00200000, > 'size': 85984256, > 'crc32': '754c839a', > 'pattern': 'Linux', > 'config': 'conf-852', > } > > # Details regarding a file that may be read from a TFTP server. This variable > # may be omitted or set to None if PXE testing is not possible or desired. > env__net_pxe_bootable_file = { > 'fn': 'default', > 'addr': 0x00200000, > 'size': 64, > 'timeout': 50000, > 'pattern': 'Linux', > 'valid_label': '1', > 'invalid_label': '2', > 'exp_str_invalid': 'Skipping install for failure retrieving', > 'local_label': '3', > 'exp_str_local': 'missing environment variable: localcmd', > 'empty_label': '4', > 'exp_str_empty': 'No kernel given, skipping boot', > } > > # False or omitted if a PXE boot test should be tested. > # If PXE boot testing is not possible or desired, set this variable to True. > # For example: If pxe configuration file is not proper to boot > env__pxe_boot_test_skip = False > > And: > $ cat /srv/tftp/pxelinux.cfg/default > label Linux > menu label Boot kernel > kernel Image > fdt system.dtb > initrd rootfs.cpio.gz.u-boot > $ cat /srv/tftp/pxelinux.cfg/default-arm > menu title Linux boot selections > menu include pxelinux.cfg/default > > label install > menu label Invalid boot > kernel kernels/install.bin > append console=ttyAMA0,38400 debug earlyprintk > initrd initrds/uzInitrdDebInstall > > label local > menu label Local boot > append root=/dev/sdb1 > localboot 1 > > label boot > menu label Empty boot > $ cat /srv/tftp/pxelinux.cfg/01-b8-27-eb-fc-64-a6 > menu include pxelinux.cfg/default-arm > timeout 50 > > default Linux > > And kernels/install.bin, etc, do not exist. Only v6.6/image.fit.nocomp > exists. Thanks very much for that. I have got it running and bisected the problem to the penultimate patch, so will figure it out and send v4. Regards, Simon

