linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/3] bootconfig: Support embedding a bootconfig in kernel for non initrd boot
@ 2022-03-14  1:53 Masami Hiramatsu
  2022-03-14  1:54 ` [PATCH v2 1/3] bootconfig: Check the checksum before removing the bootconfig from initrd Masami Hiramatsu
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Masami Hiramatsu @ 2022-03-14  1:53 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Masami Hiramatsu, Padmanabha Srinivasaiah, LKML, Jonathan Corbet,
	linux-doc, Randy Dunlap

Hi,

Here are the 2nd version of the patchset to enable kernel embedded bootconfig
for non-initrd kernel boot environment. You can embed a bootconfig file into
the kernel as a default bootconfig, which will be used if there is no initrd or no
bootconfig is attached to initrd.

This needs 2 options: CONFIG_EMBED_BOOT_CONFIG=y and set the file
path to CONFIG_EMBED_BOOT_CONFIG_FILE. Even if you embed the bootconfig file
to the kernel, it will not be enabled unless you pass "bootconfig" kernel
command line option at boot. Moreover, since this is just a "default"
bootconfig, you can override it with a new bootconfig if you attach another
bootconfig to the initrd (if possible).
CONFIG_EMBED_BOOT_CONFIG_FILE can take both absolute and relative path, but
to simplify and make it independent from the build environment, I recommend
you to use an absolute path for that.

This is requested by Padmanabha at the below thread;

 https://lore.kernel.org/all/20220307184011.GA2570@pswork/T/#u

Thank you,

---

Masami Hiramatsu (3):
      bootconfig: Check the checksum before removing the bootconfig from initrd
      bootconfig: Support embedding a bootconfig file in kernel
      docs: bootconfig: Add how to embed the bootconfig into kernel


 Documentation/admin-guide/bootconfig.rst |   30 ++++++++++++++++++++++++++---
 include/linux/bootconfig.h               |   10 ++++++++++
 init/Kconfig                             |   21 ++++++++++++++++++++
 init/main.c                              |   31 +++++++++++++++---------------
 lib/.gitignore                           |    1 +
 lib/Makefile                             |   12 ++++++++++++
 lib/bootconfig.c                         |   23 ++++++++++++++++++++++
 7 files changed, 110 insertions(+), 18 deletions(-)

--
Masami Hiramatsu (Linaro) <mhiramat@kernel.org>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v2 1/3] bootconfig: Check the checksum before removing the bootconfig from initrd
  2022-03-14  1:53 [PATCH v2 0/3] bootconfig: Support embedding a bootconfig in kernel for non initrd boot Masami Hiramatsu
@ 2022-03-14  1:54 ` Masami Hiramatsu
  2022-03-14  1:54 ` [PATCH v2 2/3] bootconfig: Support embedding a bootconfig file in kernel Masami Hiramatsu
  2022-03-14  1:54 ` [PATCH v2 3/3] docs: bootconfig: Add how to embed the bootconfig into kernel Masami Hiramatsu
  2 siblings, 0 replies; 7+ messages in thread
From: Masami Hiramatsu @ 2022-03-14  1:54 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Masami Hiramatsu, Padmanabha Srinivasaiah, LKML, Jonathan Corbet,
	linux-doc, Randy Dunlap

Check the bootconfig's checksum before removing the bootcinfig data
from initrd to avoid modifying initrd by mistake.
This will also simplifies the get_boot_config_from_initrd() interface.

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
---
 init/main.c |   22 ++++++++++------------
 1 file changed, 10 insertions(+), 12 deletions(-)

diff --git a/init/main.c b/init/main.c
index 65fa2e41a9c0..421050be5039 100644
--- a/init/main.c
+++ b/init/main.c
@@ -265,7 +265,7 @@ static int __init loglevel(char *str)
 early_param("loglevel", loglevel);
 
 #ifdef CONFIG_BLK_DEV_INITRD
-static void * __init get_boot_config_from_initrd(u32 *_size, u32 *_csum)
+static void * __init get_boot_config_from_initrd(u32 *_size)
 {
 	u32 size, csum;
 	char *data;
@@ -299,17 +299,20 @@ static void * __init get_boot_config_from_initrd(u32 *_size, u32 *_csum)
 		return NULL;
 	}
 
+	if (xbc_calc_checksum(data, size) != csum) {
+		pr_err("bootconfig checksum failed\n");
+		return NULL;
+	}
+
 	/* Remove bootconfig from initramfs/initrd */
 	initrd_end = (unsigned long)data;
 	if (_size)
 		*_size = size;
-	if (_csum)
-		*_csum = csum;
 
 	return data;
 }
 #else
-static void * __init get_boot_config_from_initrd(u32 *_size, u32 *_csum)
+static void * __init get_boot_config_from_initrd(u32 *_size)
 {
 	return NULL;
 }
@@ -408,12 +411,12 @@ static void __init setup_boot_config(void)
 	static char tmp_cmdline[COMMAND_LINE_SIZE] __initdata;
 	const char *msg;
 	int pos;
-	u32 size, csum;
+	u32 size;
 	char *data, *err;
 	int ret;
 
 	/* Cut out the bootconfig data even if we have no bootconfig option */
-	data = get_boot_config_from_initrd(&size, &csum);
+	data = get_boot_config_from_initrd(&size);
 
 	strlcpy(tmp_cmdline, boot_command_line, COMMAND_LINE_SIZE);
 	err = parse_args("bootconfig", tmp_cmdline, NULL, 0, 0, 0, NULL,
@@ -437,11 +440,6 @@ static void __init setup_boot_config(void)
 		return;
 	}
 
-	if (xbc_calc_checksum(data, size) != csum) {
-		pr_err("bootconfig checksum failed\n");
-		return;
-	}
-
 	ret = xbc_init(data, size, &msg, &pos);
 	if (ret < 0) {
 		if (pos < 0)
@@ -470,7 +468,7 @@ static void __init exit_boot_config(void)
 static void __init setup_boot_config(void)
 {
 	/* Remove bootconfig data from initrd */
-	get_boot_config_from_initrd(NULL, NULL);
+	get_boot_config_from_initrd(NULL);
 }
 
 static int __init warn_bootconfig(char *str)


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v2 2/3] bootconfig: Support embedding a bootconfig file in kernel
  2022-03-14  1:53 [PATCH v2 0/3] bootconfig: Support embedding a bootconfig in kernel for non initrd boot Masami Hiramatsu
  2022-03-14  1:54 ` [PATCH v2 1/3] bootconfig: Check the checksum before removing the bootconfig from initrd Masami Hiramatsu
@ 2022-03-14  1:54 ` Masami Hiramatsu
  2022-03-14  1:54 ` [PATCH v2 3/3] docs: bootconfig: Add how to embed the bootconfig into kernel Masami Hiramatsu
  2 siblings, 0 replies; 7+ messages in thread
From: Masami Hiramatsu @ 2022-03-14  1:54 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Masami Hiramatsu, Padmanabha Srinivasaiah, LKML, Jonathan Corbet,
	linux-doc, Randy Dunlap

This allows kernel developer to embed a default bootconfig file in
the kernel instead of embedding it in the initrd. This will be good
for who are using the kernel without initrd, or who needs a default
bootconfigs.
This needs to set two kconfigs: CONFIG_EMBED_BOOT_CONFIG=y and set
the file path to CONFIG_EMBED_BOOT_CONFIG_FILE.

Note that you still need 'bootconfig' command line option to load the
embedded bootconfig. Also if you boot using an initrd with a different
bootconfig, the kernel will use the bootconfig in the initrd, instead
of the default bootconfig.

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
---
 include/linux/bootconfig.h |   10 ++++++++++
 init/Kconfig               |   21 +++++++++++++++++++++
 init/main.c                |   13 ++++++++-----
 lib/.gitignore             |    1 +
 lib/Makefile               |   12 ++++++++++++
 lib/bootconfig.c           |   23 +++++++++++++++++++++++
 6 files changed, 75 insertions(+), 5 deletions(-)

diff --git a/include/linux/bootconfig.h b/include/linux/bootconfig.h
index a4665c7ab07c..5dbda5e3e9bb 100644
--- a/include/linux/bootconfig.h
+++ b/include/linux/bootconfig.h
@@ -289,4 +289,14 @@ int __init xbc_get_info(int *node_size, size_t *data_size);
 /* XBC cleanup data structures */
 void __init xbc_exit(void);
 
+/* XBC embedded bootconfig data in kernel */
+#ifdef CONFIG_EMBED_BOOT_CONFIG
+char * __init xbc_get_embedded_bootconfig(size_t *size);
+#else
+static inline char *xbc_get_embedded_bootconfig(size_t *size)
+{
+	return NULL;
+}
+#endif
+
 #endif
diff --git a/init/Kconfig b/init/Kconfig
index e9119bf54b1f..70440804874d 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -1357,6 +1357,27 @@ config BOOT_CONFIG
 
 	  If unsure, say Y.
 
+config EMBED_BOOT_CONFIG
+	bool "Embed bootconfig file in the kernel"
+	depends on BOOT_CONFIG
+	default n
+	help
+	  Embed a bootconfig file given by EMBED_BOOT_CONFIG_FILE in the
+	  kernel. Usually, the bootconfig file is loaded with the initrd
+	  image. But if the system doesn't support initrd, this option will
+	  help you by embedding a bootconfig file while building the kernel.
+
+	  If unsure, say N.
+
+config EMBED_BOOT_CONFIG_FILE
+	string "Embedded bootconfig file path"
+	default ""
+	depends on EMBED_BOOT_CONFIG
+	help
+	  Specify a bootconfig file which will be embedded to the kernel.
+	  This bootconfig will be used if there is no initrd or no other
+	  bootconfig in the initrd.
+
 choice
 	prompt "Compiler optimization level"
 	default CC_OPTIMIZE_FOR_PERFORMANCE
diff --git a/init/main.c b/init/main.c
index 421050be5039..3803bf2e22ea 100644
--- a/init/main.c
+++ b/init/main.c
@@ -265,7 +265,7 @@ static int __init loglevel(char *str)
 early_param("loglevel", loglevel);
 
 #ifdef CONFIG_BLK_DEV_INITRD
-static void * __init get_boot_config_from_initrd(u32 *_size)
+static void * __init get_boot_config_from_initrd(size_t *_size)
 {
 	u32 size, csum;
 	char *data;
@@ -411,12 +411,15 @@ static void __init setup_boot_config(void)
 	static char tmp_cmdline[COMMAND_LINE_SIZE] __initdata;
 	const char *msg;
 	int pos;
-	u32 size;
+	size_t size;
 	char *data, *err;
 	int ret;
 
 	/* Cut out the bootconfig data even if we have no bootconfig option */
 	data = get_boot_config_from_initrd(&size);
+	/* If there is no bootconfig in initrd, try embedded one. */
+	if (!data)
+		data = xbc_get_embedded_bootconfig(&size);
 
 	strlcpy(tmp_cmdline, boot_command_line, COMMAND_LINE_SIZE);
 	err = parse_args("bootconfig", tmp_cmdline, NULL, 0, 0, 0, NULL,
@@ -435,8 +438,8 @@ static void __init setup_boot_config(void)
 	}
 
 	if (size >= XBC_DATA_MAX) {
-		pr_err("bootconfig size %d greater than max size %d\n",
-			size, XBC_DATA_MAX);
+		pr_err("bootconfig size %ld greater than max size %d\n",
+			(long)size, XBC_DATA_MAX);
 		return;
 	}
 
@@ -449,7 +452,7 @@ static void __init setup_boot_config(void)
 				msg, pos);
 	} else {
 		xbc_get_info(&ret, NULL);
-		pr_info("Load bootconfig: %d bytes %d nodes\n", size, ret);
+		pr_info("Load bootconfig: %ld bytes %d nodes\n", (long)size, ret);
 		/* keys starting with "kernel." are passed via cmdline */
 		extra_command_line = xbc_make_cmdline("kernel");
 		/* Also, "init." keys are init arguments */
diff --git a/lib/.gitignore b/lib/.gitignore
index e5e217b8307b..30a2a5db7033 100644
--- a/lib/.gitignore
+++ b/lib/.gitignore
@@ -6,3 +6,4 @@
 /oid_registry_data.c
 /test_fortify.log
 /test_fortify/*.log
+/default.bconf
diff --git a/lib/Makefile b/lib/Makefile
index 300f569c626b..8183785ee99d 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -279,6 +279,18 @@ $(foreach file, $(libfdt_files), \
 	$(eval CFLAGS_$(file) = -I $(srctree)/scripts/dtc/libfdt))
 lib-$(CONFIG_LIBFDT) += $(libfdt_files)
 
+ifeq ($(CONFIG_EMBED_BOOT_CONFIG),y)
+# Since the specified bootconfig file can be switched, we forcibly update the
+# default.bconf file always.
+$(obj)/default.bconf: FORCE
+	$(call cmd,defbconf)
+
+quiet_cmd_defbconf = GEN     $@
+      cmd_defbconf = cat < /dev/null $(CONFIG_EMBED_BOOT_CONFIG_FILE) > $@
+clean-files	+= default.bconf
+$(obj)/bootconfig.o: $(obj)/default.bconf
+endif
+
 lib-$(CONFIG_BOOT_CONFIG) += bootconfig.o
 
 obj-$(CONFIG_RBTREE_TEST) += rbtree_test.o
diff --git a/lib/bootconfig.c b/lib/bootconfig.c
index 74f3201ab8e5..3a3bf3a208e3 100644
--- a/lib/bootconfig.c
+++ b/lib/bootconfig.c
@@ -12,6 +12,29 @@
 #include <linux/kernel.h>
 #include <linux/memblock.h>
 #include <linux/string.h>
+
+#ifdef CONFIG_EMBED_BOOT_CONFIG
+asm (
+"	.pushsection .init.data, \"aw\"			\n"
+"	.global embedded_bootconfig_data		\n"
+"embedded_bootconfig_data:				\n"
+"	.incbin \"lib/default.bconf\"			\n"
+"	.global embedded_bootconfig_data_end		\n"
+"embedded_bootconfig_data_end:				\n"
+"	.popsection					\n"
+);
+
+extern __visible char embedded_bootconfig_data[];
+extern __visible char embedded_bootconfig_data_end[];
+
+char * __init xbc_get_embedded_bootconfig(size_t *size)
+{
+	*size = embedded_bootconfig_data_end - embedded_bootconfig_data;
+	return (*size) ? embedded_bootconfig_data : NULL;
+}
+
+#endif
+
 #else /* !__KERNEL__ */
 /*
  * NOTE: This is only for tools/bootconfig, because tools/bootconfig will


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v2 3/3] docs: bootconfig: Add how to embed the bootconfig into kernel
  2022-03-14  1:53 [PATCH v2 0/3] bootconfig: Support embedding a bootconfig in kernel for non initrd boot Masami Hiramatsu
  2022-03-14  1:54 ` [PATCH v2 1/3] bootconfig: Check the checksum before removing the bootconfig from initrd Masami Hiramatsu
  2022-03-14  1:54 ` [PATCH v2 2/3] bootconfig: Support embedding a bootconfig file in kernel Masami Hiramatsu
@ 2022-03-14  1:54 ` Masami Hiramatsu
  2022-03-14  2:03   ` Randy Dunlap
  2 siblings, 1 reply; 7+ messages in thread
From: Masami Hiramatsu @ 2022-03-14  1:54 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Masami Hiramatsu, Padmanabha Srinivasaiah, LKML, Jonathan Corbet,
	linux-doc, Randy Dunlap

Add a description how to embed the bootconfig file into kernel.

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
---
 Changes in v2:
  - Corrected the text accoding to Randy's suggestion.
  - Do not reccomend to use relative path for CONFIG_EMBED_BOOT_CONFIG_FILE.
---
 Documentation/admin-guide/bootconfig.rst |   30 +++++++++++++++++++++++++++---
 1 file changed, 27 insertions(+), 3 deletions(-)

diff --git a/Documentation/admin-guide/bootconfig.rst b/Documentation/admin-guide/bootconfig.rst
index a1860fc0ca88..1af1a172fdd4 100644
--- a/Documentation/admin-guide/bootconfig.rst
+++ b/Documentation/admin-guide/bootconfig.rst
@@ -158,9 +158,15 @@ Each key-value pair is shown in each line with following style::
 Boot Kernel With a Boot Config
 ==============================
 
-Since the boot configuration file is loaded with initrd, it will be added
-to the end of the initrd (initramfs) image file with padding, size,
-checksum and 12-byte magic word as below.
+There are two options to boot the kernel with bootconfig: attaching the
+bootconfig to the initrd image or embedding it in the kernel itself.
+
+Attaching a Boot Config to Initrd
+---------------------------------
+
+Since the boot configuration file is loaded with initrd by default,
+it will be added to the end of the initrd (initramfs) image file with
+padding, size, checksum and 12-byte magic word as below.
 
 [initrd][bootconfig][padding][size(le32)][checksum(le32)][#BOOTCONFIG\n]
 
@@ -196,6 +202,24 @@ To remove the config from the image, you can use -d option as below::
 Then add "bootconfig" on the normal kernel command line to tell the
 kernel to look for the bootconfig at the end of the initrd file.
 
+Embedding a Boot Config into Kernel
+-----------------------------------
+
+If you can not use initrd, you can also embed the bootconfig file in the
+kernel by Kconfig options. In this case, you need to recompile the kernel
+with the following configs::
+
+ COFNIG_EMBED_BOOT_CONFIG=y
+ CONFIG_EMBED_BOOT_CONFIG_FILE="/PATH/TO/BOOTCONFIG/FILE"
+
+``CONFIG_EMBED_BOOT_CONFIG_FILE`` requires a correct absolute path to
+the bootconfig file. The kernel will embed it as the default bootconfig.
+
+Just as when attaching the bootconfig to the initrd, you need ``bootconfig``
+option to the kernel command line to enable the embedded bootconfig.
+
+Note that even if you set this option, you can override the embedded
+bootconfig by another bootconfig which attached to the initrd.
 
 Kernel parameters via Boot Config
 =================================


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v2 3/3] docs: bootconfig: Add how to embed the bootconfig into kernel
  2022-03-14  1:54 ` [PATCH v2 3/3] docs: bootconfig: Add how to embed the bootconfig into kernel Masami Hiramatsu
@ 2022-03-14  2:03   ` Randy Dunlap
  2022-03-14  8:03     ` Masami Hiramatsu
  0 siblings, 1 reply; 7+ messages in thread
From: Randy Dunlap @ 2022-03-14  2:03 UTC (permalink / raw)
  To: Masami Hiramatsu, Steven Rostedt
  Cc: Padmanabha Srinivasaiah, LKML, Jonathan Corbet, linux-doc



On 3/13/22 18:54, Masami Hiramatsu wrote:
> Add a description how to embed the bootconfig file into kernel.
> 
> Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
> ---
>  Changes in v2:
>   - Corrected the text accoding to Randy's suggestion.
>   - Do not reccomend to use relative path for CONFIG_EMBED_BOOT_CONFIG_FILE.
> ---
>  Documentation/admin-guide/bootconfig.rst |   30 +++++++++++++++++++++++++++---
>  1 file changed, 27 insertions(+), 3 deletions(-)
> 
> diff --git a/Documentation/admin-guide/bootconfig.rst b/Documentation/admin-guide/bootconfig.rst
> index a1860fc0ca88..1af1a172fdd4 100644
> --- a/Documentation/admin-guide/bootconfig.rst
> +++ b/Documentation/admin-guide/bootconfig.rst
> @@ -158,9 +158,15 @@ Each key-value pair is shown in each line with following style::
>  Boot Kernel With a Boot Config
>  ==============================
>  
> -Since the boot configuration file is loaded with initrd, it will be added
> -to the end of the initrd (initramfs) image file with padding, size,
> -checksum and 12-byte magic word as below.
> +There are two options to boot the kernel with bootconfig: attaching the
> +bootconfig to the initrd image or embedding it in the kernel itself.
> +
> +Attaching a Boot Config to Initrd
> +---------------------------------
> +
> +Since the boot configuration file is loaded with initrd by default,
> +it will be added to the end of the initrd (initramfs) image file with
> +padding, size, checksum and 12-byte magic word as below.
>  
>  [initrd][bootconfig][padding][size(le32)][checksum(le32)][#BOOTCONFIG\n]
>  
> @@ -196,6 +202,24 @@ To remove the config from the image, you can use -d option as below::
>  Then add "bootconfig" on the normal kernel command line to tell the
>  kernel to look for the bootconfig at the end of the initrd file.
>  
> +Embedding a Boot Config into Kernel
> +-----------------------------------
> +
> +If you can not use initrd, you can also embed the bootconfig file in the
> +kernel by Kconfig options. In this case, you need to recompile the kernel
> +with the following configs::
> +
> + COFNIG_EMBED_BOOT_CONFIG=y

    CONFIG_

> + CONFIG_EMBED_BOOT_CONFIG_FILE="/PATH/TO/BOOTCONFIG/FILE"
> +
> +``CONFIG_EMBED_BOOT_CONFIG_FILE`` requires a correct absolute path to
> +the bootconfig file. The kernel will embed it as the default bootconfig.
> +
> +Just as when attaching the bootconfig to the initrd, you need ``bootconfig``
> +option to the kernel command line to enable the embedded bootconfig.

          on the

preferably.

> +
> +Note that even if you set this option, you can override the embedded
> +bootconfig by another bootconfig which attached to the initrd.
>  
>  Kernel parameters via Boot Config
>  =================================
> 

thanks.
-- 
~Randy

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2 3/3] docs: bootconfig: Add how to embed the bootconfig into kernel
  2022-03-14  2:03   ` Randy Dunlap
@ 2022-03-14  8:03     ` Masami Hiramatsu
  0 siblings, 0 replies; 7+ messages in thread
From: Masami Hiramatsu @ 2022-03-14  8:03 UTC (permalink / raw)
  To: Randy Dunlap
  Cc: Steven Rostedt, Padmanabha Srinivasaiah, LKML, Jonathan Corbet,
	linux-doc

On Sun, 13 Mar 2022 19:03:20 -0700
Randy Dunlap <rdunlap@infradead.org> wrote:

> 
> 
> On 3/13/22 18:54, Masami Hiramatsu wrote:
> > Add a description how to embed the bootconfig file into kernel.
> > 
> > Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
> > ---
> >  Changes in v2:
> >   - Corrected the text accoding to Randy's suggestion.
> >   - Do not reccomend to use relative path for CONFIG_EMBED_BOOT_CONFIG_FILE.
> > ---
> >  Documentation/admin-guide/bootconfig.rst |   30 +++++++++++++++++++++++++++---
> >  1 file changed, 27 insertions(+), 3 deletions(-)
> > 
> > diff --git a/Documentation/admin-guide/bootconfig.rst b/Documentation/admin-guide/bootconfig.rst
> > index a1860fc0ca88..1af1a172fdd4 100644
> > --- a/Documentation/admin-guide/bootconfig.rst
> > +++ b/Documentation/admin-guide/bootconfig.rst
> > @@ -158,9 +158,15 @@ Each key-value pair is shown in each line with following style::
> >  Boot Kernel With a Boot Config
> >  ==============================
> >  
> > -Since the boot configuration file is loaded with initrd, it will be added
> > -to the end of the initrd (initramfs) image file with padding, size,
> > -checksum and 12-byte magic word as below.
> > +There are two options to boot the kernel with bootconfig: attaching the
> > +bootconfig to the initrd image or embedding it in the kernel itself.
> > +
> > +Attaching a Boot Config to Initrd
> > +---------------------------------
> > +
> > +Since the boot configuration file is loaded with initrd by default,
> > +it will be added to the end of the initrd (initramfs) image file with
> > +padding, size, checksum and 12-byte magic word as below.
> >  
> >  [initrd][bootconfig][padding][size(le32)][checksum(le32)][#BOOTCONFIG\n]
> >  
> > @@ -196,6 +202,24 @@ To remove the config from the image, you can use -d option as below::
> >  Then add "bootconfig" on the normal kernel command line to tell the
> >  kernel to look for the bootconfig at the end of the initrd file.
> >  
> > +Embedding a Boot Config into Kernel
> > +-----------------------------------
> > +
> > +If you can not use initrd, you can also embed the bootconfig file in the
> > +kernel by Kconfig options. In this case, you need to recompile the kernel
> > +with the following configs::
> > +
> > + COFNIG_EMBED_BOOT_CONFIG=y
> 
>     CONFIG_

Oops, it's a typo...

> 
> > + CONFIG_EMBED_BOOT_CONFIG_FILE="/PATH/TO/BOOTCONFIG/FILE"
> > +
> > +``CONFIG_EMBED_BOOT_CONFIG_FILE`` requires a correct absolute path to
> > +the bootconfig file. The kernel will embed it as the default bootconfig.
> > +
> > +Just as when attaching the bootconfig to the initrd, you need ``bootconfig``
> > +option to the kernel command line to enable the embedded bootconfig.
> 
>           on the

OK.

Thank you!

> 
> preferably.
> 
> > +
> > +Note that even if you set this option, you can override the embedded
> > +bootconfig by another bootconfig which attached to the initrd.
> >  
> >  Kernel parameters via Boot Config
> >  =================================
> > 
> 
> thanks.
> -- 
> ~Randy


-- 
Masami Hiramatsu <mhiramat@kernel.org>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v2 0/3] bootconfig: Support embedding a bootconfig in kernel for non initrd boot
@ 2022-03-14  9:08 Masami Hiramatsu
  0 siblings, 0 replies; 7+ messages in thread
From: Masami Hiramatsu @ 2022-03-14  9:08 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Masami Hiramatsu, Padmanabha Srinivasaiah, LKML, Jonathan Corbet,
	linux-doc, Randy Dunlap

Hi,

Here are the 3rd version of the patchset to enable kernel embedded bootconfig
for non-initrd kernel boot environment. In this version, I fixed some typo in
the document patch [3/3].

You can embed a bootconfig file into the kernel as a default bootconfig,
which will be used if there is no initrd or no bootconfig is attached to initrd. 

This needs 2 options: CONFIG_EMBED_BOOT_CONFIG=y and set the file
path to CONFIG_EMBED_BOOT_CONFIG_FILE. Even if you embed the bootconfig file
to the kernel, it will not be enabled unless you pass "bootconfig" kernel
command line option at boot. Moreover, since this is just a "default"
bootconfig, you can override it with a new bootconfig if you attach another
bootconfig to the initrd (if possible).
CONFIG_EMBED_BOOT_CONFIG_FILE can take both absolute and relative path, but
to simplify and make it independent from the build environment, I recommend
you to use an absolute path for that.

This is requested by Padmanabha at the below thread;

 https://lore.kernel.org/all/20220307184011.GA2570@pswork/T/#u

Thank you,

---

Masami Hiramatsu (3):
      bootconfig: Check the checksum before removing the bootconfig from initrd
      bootconfig: Support embedding a bootconfig file in kernel
      docs: bootconfig: Add how to embed the bootconfig into kernel


 Documentation/admin-guide/bootconfig.rst |   30 ++++++++++++++++++++++++++---
 include/linux/bootconfig.h               |   10 ++++++++++
 init/Kconfig                             |   21 ++++++++++++++++++++
 init/main.c                              |   31 +++++++++++++++---------------
 lib/.gitignore                           |    1 +
 lib/Makefile                             |   12 ++++++++++++
 lib/bootconfig.c                         |   23 ++++++++++++++++++++++
 7 files changed, 110 insertions(+), 18 deletions(-)

--
Masami Hiramatsu (Linaro) <mhiramat@kernel.org>

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2022-03-14  9:08 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-14  1:53 [PATCH v2 0/3] bootconfig: Support embedding a bootconfig in kernel for non initrd boot Masami Hiramatsu
2022-03-14  1:54 ` [PATCH v2 1/3] bootconfig: Check the checksum before removing the bootconfig from initrd Masami Hiramatsu
2022-03-14  1:54 ` [PATCH v2 2/3] bootconfig: Support embedding a bootconfig file in kernel Masami Hiramatsu
2022-03-14  1:54 ` [PATCH v2 3/3] docs: bootconfig: Add how to embed the bootconfig into kernel Masami Hiramatsu
2022-03-14  2:03   ` Randy Dunlap
2022-03-14  8:03     ` Masami Hiramatsu
2022-03-14  9:08 [PATCH v2 0/3] bootconfig: Support embedding a bootconfig in kernel for non initrd boot Masami Hiramatsu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).