Add a bootconfig -> kernel cmdline rendering capability shared between the kernel parser library and the userspace tools/bootconfig binary.
The new userspace mode "tools/bootconfig -C <file>" walks a bootconfig file's "kernel" subtree and prints it as a flat, space-separated cmdline string suitable for direct use as (or appending to) a kernel command line. This series prepares tools/bootconfig and lib/bootconfig.c for an upcoming feature that lets the kernel build render an embedded bootconfig file's "kernel" subtree to a flat cmdline string and embed it in the kernel image. The follow-up series (sent separately) wires this into setup_arch() so early_param() handlers see values supplied via CONFIG_BOOT_CONFIG_EMBED_FILE, following Masami suggestion in [1] These two patches are pure groundwork. They add no kernel feature, change no runtime behavior, and are useful on their own (the new "tools/bootconfig -C" mode lets anyone render a .bootconfig file to a cmdline string from the shell). Landing them independently lets the follow-up series focus on the kernel-side plumbing without dragging the refactor and tool addition through the same review cycle. Patch 1 lifts xbc_snprint_cmdline() from init/main.c into lib/bootconfig.c so both the kernel runtime path (xbc_make_cmdline -> extra_command_line) and the userspace tool can share a single renderer. - tools/bootconfig already compiles lib/bootconfig.c directly, so no new shared-code mechanism is introduced. Patch 2 adds a -C option to tools/bootconfig that walks the "kernel" subtree of a bootconfig file and prints it as a flat, space-separated cmdline string. Missing or empty kernel.* produces empty output and exits 0. - This is the renderer the kernel build will invoke. Once this lands, the follow up patches will use it in the following way: 1) Render at build time. The kernel build invokes the userspace bootconfig tool — using the -C mode prep added — to convert the embedded bootconfig file into a flat kernel cmdline string. 2) Bake the string into the kernel image. A small assembly stub embeds the rendered file into the kernel's discardable read-only init data, bracketed by two markers so the runtime can locate it. 3) Add a runtime helper to consume it. A new helper in the shared bootconfig source — sitting next to the renderer prep moved there — prepends the embedded blob to a cmdline buffer, panicking rather than truncating if it overflows. The public header declares it with a no-op stub when the feature is off. 4) Plumb it at architecture early setup. The arch's early setup calls the helper after the existing builtin-cmdline merge but before early-param parsing, so values from the embedded bootconfig influence early-param handlers (console, log level, memory overrides) right when architecture setup runs — not later in Background: the v1 attempt at this feature moved bootconfig parsing before setup_arch() with ~96KB of static __initdata buffers [1]. Masami suggested doing the conversion at build time instead [2], which avoids the early-boot allocator dance and the start_kernel() reordering. This series, plus the follow-up, aims to implement that approach. [1] https://lore.kernel.org/all/[email protected]/ [2] https://lore.kernel.org/all/[email protected]/ Signed-off-by: Breno Leitao <[email protected]> --- Breno Leitao (2): bootconfig: move xbc_snprint_cmdline() to lib/bootconfig.c tools/bootconfig: render kernel.* subtree as cmdline string with -C include/linux/bootconfig.h | 3 +++ init/main.c | 45 ---------------------------------- lib/bootconfig.c | 56 +++++++++++++++++++++++++++++++++++++++++++ tools/bootconfig/main.c | 60 +++++++++++++++++++++++++++++++++++++++------- 4 files changed, 111 insertions(+), 53 deletions(-) --- base-commit: 17c7841d09ee7d33557fd075562d9289b6018c90 change-id: 20260508-bootconfig_using_tools-cfa7aa9d6a5a Best regards, -- Breno Leitao <[email protected]>
