[PATCH] bootstd: Allow PXE boot to be disabled

Tony Dinh mibodhi at gmail.com
Tue Oct 14 05:18:53 CEST 2025


On Mon, Oct 13, 2025 at 4:24 PM Tony Dinh <mibodhi at gmail.com> wrote:
>
> Hi all,
>
> On Mon, Oct 13, 2025 at 2:17 PM Tony Dinh <mibodhi at gmail.com> wrote:
> >
> > Hi Tom,
> >
> > On Mon, Oct 13, 2025 at 7:40 AM Tom Rini <trini at konsulko.com> wrote:
> > >
> > > On Sun, Oct 12, 2025 at 08:12:59PM -0700, Tony Dinh wrote:
> > > > Hi Simon,
> > > >
> > > > On Sat, Oct 11, 2025 at 11:52 PM Simon Glass <sjg at chromium.org> wrote:
> > > > >
> > > > > Hi Tony,
> > > > >
> > > > > On Sat, 11 Oct 2025 at 20:41, Tony Dinh <mibodhi at gmail.com> wrote:
> > > > > >
> > > > > > On Sat, Oct 11, 2025 at 7:37 AM Tom Rini <trini at konsulko.com> wrote:
> > > > > > >
> > > > > > > On Sat, Oct 11, 2025 at 01:03:39PM +0100, Peter Robinson wrote:
> > > > > > > > On Fri, 10 Oct 2025 at 15:28, Tom Rini <trini at konsulko.com> wrote:
> > > > > > > > >
> > > > > > > > > On Thu, Oct 09, 2025 at 10:29:17PM -0700, Tony Dinh wrote:
> > > > > > > > >
> > > > > > > > > > Make it possible to disable CMD_PXE.
> > > > > > > > > > Remove unnecessary PXE_UTILS selection in BOOTMETH_EXTLINUX config.
> > > > > > > > > > In extlinux_boot(), invoke pxe utils only when
> > > > > > > > > > CONFIG_BOOTMETH_EXTLINUX_PXE is enabled.
> > > > > > > > > >
> > > > > > > > > > This patch results in about 9K reduction in image size when
> > > > > > > > > > PXE boot is disabled.
> > > > > > > > > >
> > > > > > > > > > Signed-off-by: Tony Dinh <mibodhi at gmail.com>
> > > > > > > > > > ---
> > > > > > > > > >
> > > > > > > > > >  boot/Kconfig             |  3 +--
> > > > > > > > > >  boot/bootmeth_extlinux.c | 18 ++++++++++--------
> > > > > > > > > >  2 files changed, 11 insertions(+), 10 deletions(-)
> > > > > > > > >
> > > > > > > > > Is some part of the symbol logic here wrong? A challenge is that "PXE"
> > > > > > > > > is also where the logic to parse extlinux.conf style files came from,
> > > > > > > > > and I thought we had split those two out. And then there's this:
> > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > diff --git a/boot/Kconfig b/boot/Kconfig
> > > > > > > > > > index 2993cd7f9ba..403ce4c3d46 100644
> > > > > > > > > > --- a/boot/Kconfig
> > > > > > > > > > +++ b/boot/Kconfig
> > > > > > > > > > @@ -421,10 +421,10 @@ config BOOT_DEFAULTS_CMDS
> > > > > > > > > >       select CMD_PART if PARTITIONS
> > > > > > > > > >       select CMD_DHCP if CMD_NET
> > > > > > > > > >       select CMD_PING if CMD_NET
> > > > > > > > > > -     select CMD_PXE if CMD_NET
> > > > > > > > > >       select CMD_BOOTI if ARM64
> > > > > > > > > >       select CMD_BOOTZ if ARM && !ARM64
> > > > > > > > > >       imply CMD_MII if NET
> > > > > > > > > > +     imply CMD_PXE if CMD_NET
> > > > >
> > > > > If you only want scripts, then perhaps you can enable just what you
> > > > > need, e.g. BOOTMETH_SCRIPT? You may need to disable BOOT_DEFAULTS and
> > > > > choose your own options.
> > > >
> > > > Indeed, that was a missing config when I tried with BOOTSTD_FULL
> > > > disabled. But there is more, please see below.
> > > >
> > > > >
> > > > > > > > >
> > > > > > > > > This is one of the things where defaults isn't supposed to be so easy to
> > > > > > > > > get out of. How many platforms are you wanting to then disable CMD_PXE
> > > > > > > > > on to save space?
> > > > > > > >
> > > > > > > > PXE is generally being removed in a lot of cases as it's not
> > > > > > > > considered secure and now we have HTTP Boot there are other means of
> > > > > > > > doing network booting so I think we'll see more and more situations
> > > > > > > > where we want to disable PXE.
> > > > > > > >
> > > > > > > > This is actually something I've been meaning to look at so it's
> > > > > > > > something I would love to see :)
> > > > > >
> > > > > > Glad to hear :)
> > > > > >
> > > > > > >
> > > > > > > And in the world where we also can't just remove ATAGS support because
> > > > > > > distros (Debian at least) still boots some modern platforms via ATAGS +
> > > > > > > appended device tree, the high level options for "boot this anywhere"
> > > > > > > need to perhaps be different from "very modern requirements only
> > > > > > > distro". I'm not objecting to be clear.
> > > > > >
> > > > > > As Tom suggested previously, perhaps looking from a different angle.
> > > > > > We can disable BOOTSTD_FULL and then try adding only options that are
> > > > > > needed for a board. Unfortunately this approach did not work when I
> > > > > > tried it in the past. It seems for bootstd to work well, we need to
> > > > > > take the whole thing by enabling BOOTSTD_FULL.
> > > > >
> > > > > If you end up trying it again, please give a few details here as we
> > > > > might be able to improve this. When bootstd was first introduced we
> > > > > had very tight code-size constraints, so quite a few features are only
> > > > > provided if BOOTSTD_FULL is enabled. Tom has suggested enabling more
> > > > > features in the base implementation but we haven't really figured out
> > > > > which.
> > > >
> > > > The problem is when a board already has enabled BOOTSTD_FULL or has
> > > > been updated with Distro Boot (CONFIG_DISTRO_DEFAULTS), all the
> > > > necessary configurations such as ext2, ext4, efi partition,... are
> > > > implied, therefore were removed from board defconfig. They must be
> > > > added back.
> > > >
> > > > I actually tried this just now and it does work booting a script from
> > > > USB drive with this combination:
> > > >
> > > > CONFIG_BOOTMETH_SCRIPT=y
> > > > CONFIG_DISTRO_DEFAULTS=y    (this also selects CMD_PXE, but it's OK
> > > > for this test)
> > > > # CONFIG_BOOTSTD_FULL is not set
> > > >
> > > > I think it's quite cumbersome to add each of the necessary configs
> > > > back to the board defconfig. Not as easy as removing CMD_PXE, or other
> > > > CMD_x to remove a capability.
> > >
> > > There's two parts to this. In turns of changing the defconfig to start
> > > with, you shouldn't need to "add back", if you do:
> > > $ make foo_defconfig
> > > $ make menuconfig # Disable full, etc
> > > $ make savedefconfig
> > > $ cp defconfig configs/foo_defconfig
> >
> > Of course you're right! "make menuconfig" works as described above.
> >
> > Thanks,
> > Tony
> >
> > >
> > > But the second part is that yes, it's at least currently intentional to
> > > be cumbersome to break the "all stock distributions work in all expected
> > > use cases" option. If you have networking, networking works in U-Boot,
> > > but you're not allowing users to install distros over the network like
> > > they should be able to expect to, it shouldn't be easy.
> > >
> > > I am open to splitting the current option up in to multiple parts, along
> > > the lines of legacy options, modern options, disk options, network
> > > options since as Peter noted earlier in this thread, PXE is going away
> > > in favour of HTTP(s) boot. But we still have lots of legacy boards and
> > > distros to support.
> > >
>
> I'm withdrawing this patch.

Sorry for forgetting to mention, I will send in a new patch to deal
with pxe_utils.

All the best,
Tony

> Using the Kconfig approach Tom and Simon have suggested, I was able to
> remove PXE and include only the BOOTMETH_SCRIPT for block devices in
> bootstd. My test case using the pogo_v4 board showed a saving of 17K
> (before: 508K, after 491K).
>
> IMHO, we should still pursue the worthy goal of "splitting the current
> options up into multiple parts". That will make u-boot configuration
> much more robust.
>
> For posterity, here is the Kconfig test using board/cloudengines/pogo_v4.
>
> diff --git a/configs/pogo_v4_defconfig b/configs/pogo_v4_defconfig
> index 1c0e0de8d4f..aaaa3fd51f2 100644
> --- a/configs/pogo_v4_defconfig
> +++ b/configs/pogo_v4_defconfig
> @@ -17,15 +17,23 @@ CONFIG_SYS_LOAD_ADDR=0x800000
>  CONFIG_IDENT_STRING="\nPogoplug V4"
>  CONFIG_PCI=y
>  CONFIG_LTO=y
> -CONFIG_BOOTSTD_FULL=y
> +CONFIG_ENV_VARS_UBOOT_CONFIG=y
> +CONFIG_BOOTMETH_SCRIPT=y
> +CONFIG_SUPPORT_RAW_INITRD=y
>  CONFIG_BOOTSTAGE=y
>  CONFIG_SHOW_BOOT_PROGRESS=y
>  CONFIG_BOOTDELAY=10
> +CONFIG_USE_BOOTCOMMAND=y
> +CONFIG_BOOTCOMMAND="bootflow scan"
>  CONFIG_USE_PREBOOT=y
>  CONFIG_SYS_PBSIZE=1050
>  CONFIG_BOARD_LATE_INIT=y
>  CONFIG_SYS_PROMPT="Pogo_V4> "
>  CONFIG_SYS_MAXARGS=32
> +CONFIG_CMD_BOOTDEV=y
> +CONFIG_CMD_BOOTMETH=y
> +CONFIG_CMD_BOOTSTD=y
> +CONFIG_CMD_BOOTZ=y
>  # CONFIG_BOOTM_PLAN9 is not set
>  # CONFIG_BOOTM_RTEMS is not set
>  # CONFIG_BOOTM_VXWORKS is not set
> @@ -35,16 +43,26 @@ CONFIG_SYS_MAXARGS=32
>  CONFIG_CMD_MMC=y
>  CONFIG_CMD_MTD=y
>  CONFIG_CMD_NAND=y
> +CONFIG_CMD_PART=y
>  CONFIG_CMD_PCI=y
>  CONFIG_CMD_SATA=y
>  CONFIG_CMD_USB=y
> +CONFIG_CMD_DHCP=y
>  CONFIG_CMD_DNS=y
> +CONFIG_CMD_MII=y
> +CONFIG_CMD_PING=y
>  CONFIG_CMD_SNTP=y
>  # CONFIG_CMD_BLOCK_CACHE is not set
> +CONFIG_CMD_EXT2=y
> +CONFIG_CMD_EXT4=y
> +CONFIG_CMD_FAT=y
> +CONFIG_CMD_FS_GENERIC=y
>  CONFIG_CMD_MTDPARTS=y
>  CONFIG_MTDIDS_DEFAULT="nand0=orion_nand"
>  CONFIG_MTDPARTS_DEFAULT="mtdparts=orion_nand:2M(u-boot),3M(uImage),3M(uImage2),8M(failsafe),112M(root)"
>  CONFIG_CMD_UBI=y
> +CONFIG_ISO_PARTITION=y
> +CONFIG_EFI_PARTITION=y
>  CONFIG_PARTITION_TYPE_GUID=y
>  CONFIG_OF_CONTROL=y
>  CONFIG_ENV_OVERWRITE=y
> @@ -72,4 +90,5 @@ CONFIG_USB=y
>  CONFIG_USB_XHCI_HCD=y
>  CONFIG_USB_XHCI_PCI=y
>  CONFIG_USB_EHCI_HCD=y
> +CONFIG_USB_STORAGE=y
>  CONFIG_UBIFS_SILENCE_MSG=y
>
> All the best,
> Tony


More information about the U-Boot mailing list