All of lore.kernel.org
 help / color / mirror / Atom feed
* tracing : bootconfig : Early boot config for non intrd systems
@ 2022-03-07 18:40 Padmanabha Srinivasaiah
  2022-03-08  7:36 ` Masami Hiramatsu
  0 siblings, 1 reply; 11+ messages in thread
From: Padmanabha Srinivasaiah @ 2022-03-07 18:40 UTC (permalink / raw)
  To: mhiramat; +Cc: rostedt, linux-kernel

Hello Masami Hiramatsu,

Thanks for detailed explanation on boot time tracing using early boot configuration file.
https://linuxfoundation.org/wp-content/uploads/boottrace-LF-live-2021-update.pdf

Also for https://lwn.net/Articles/806002/.

Latter link also states we can embed boot config into the kernel image for non intrd based system.

I tried searching mailing lists not able to find pointer for same.

A hint/pointer on how-to will be very helpful. 

Thanks and Regards,
Padmanabha.S


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

* Re: tracing : bootconfig : Early boot config for non intrd systems
  2022-03-07 18:40 tracing : bootconfig : Early boot config for non intrd systems Padmanabha Srinivasaiah
@ 2022-03-08  7:36 ` Masami Hiramatsu
  2022-03-08 17:48   ` Padmanabha Srinivasaiah
  0 siblings, 1 reply; 11+ messages in thread
From: Masami Hiramatsu @ 2022-03-08  7:36 UTC (permalink / raw)
  To: Padmanabha Srinivasaiah; +Cc: rostedt, linux-kernel

Hello Padmanabha,

On Mon, 7 Mar 2022 19:40:11 +0100
Padmanabha Srinivasaiah <treasure4paddy@gmail.com> wrote:

> Hello Masami Hiramatsu,
> 
> Thanks for detailed explanation on boot time tracing using early boot configuration file.
> https://linuxfoundation.org/wp-content/uploads/boottrace-LF-live-2021-update.pdf
> 
> Also for https://lwn.net/Articles/806002/.
> 
> Latter link also states we can embed boot config into the kernel image for non intrd based system.

Ah, that was an original plan, but since no one interested in, I didn't implement it.
So we still need the initrd for bootconfig.

> 
> I tried searching mailing lists not able to find pointer for same.
> 
> A hint/pointer on how-to will be very helpful. 

BTW, what is your problem, could you share your use-case?

Thank you,

> 
> Thanks and Regards,
> Padmanabha.S
> 


-- 
Masami Hiramatsu <mhiramat@kernel.org>

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

* Re: tracing : bootconfig : Early boot config for non intrd systems
  2022-03-08  7:36 ` Masami Hiramatsu
@ 2022-03-08 17:48   ` Padmanabha Srinivasaiah
  2022-03-09  8:01     ` Masami Hiramatsu
  0 siblings, 1 reply; 11+ messages in thread
From: Padmanabha Srinivasaiah @ 2022-03-08 17:48 UTC (permalink / raw)
  To: Masami Hiramatsu; +Cc: rostedt, linux-kernel

Hello Masami Hiramatsu,

On Tue, Mar 08, 2022 at 04:36:00PM +0900, Masami Hiramatsu wrote:
> Hello Padmanabha,
> 
> On Mon, 7 Mar 2022 19:40:11 +0100
> Padmanabha Srinivasaiah <treasure4paddy@gmail.com> wrote:
> 
> > Hello Masami Hiramatsu,
> > 
> > Thanks for detailed explanation on boot time tracing using early boot configuration file.
> > https://linuxfoundation.org/wp-content/uploads/boottrace-LF-live-2021-update.pdf
> > 
> > Also for https://lwn.net/Articles/806002/.
> > 
> > Latter link also states we can embed boot config into the kernel image for non intrd based system.
> 
> Ah, that was an original plan, but since no one interested in, I didn't implement it.
> So we still need the initrd for bootconfig.
>
Ok.
> > 
> > I tried searching mailing lists not able to find pointer for same.
> > 
> > A hint/pointer on how-to will be very helpful. 
> 
> BTW, what is your problem, could you share your use-case?
> 

I have hetrogenous system which donot use intrd.

The use-case is to capture __system wide__ event based tracing for
boot-up sequence, which also covers early stage of default init programs
used.

As buffer size is limited, will have hand-picked events set configured.

Thanks,
Padmanabha.S

> Thank you,
> 
> > 
> > Thanks and Regards,
> > Padmanabha.S
> > 
> 
> 
> -- 
> Masami Hiramatsu <mhiramat@kernel.org>

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

* Re: tracing : bootconfig : Early boot config for non intrd systems
  2022-03-08 17:48   ` Padmanabha Srinivasaiah
@ 2022-03-09  8:01     ` Masami Hiramatsu
  2022-03-09 19:06       ` Padmanabha Srinivasaiah
  0 siblings, 1 reply; 11+ messages in thread
From: Masami Hiramatsu @ 2022-03-09  8:01 UTC (permalink / raw)
  To: Padmanabha Srinivasaiah; +Cc: rostedt, linux-kernel

On Tue, 8 Mar 2022 18:48:29 +0100
Padmanabha Srinivasaiah <treasure4paddy@gmail.com> wrote:

> Hello Masami Hiramatsu,
> 
> On Tue, Mar 08, 2022 at 04:36:00PM +0900, Masami Hiramatsu wrote:
> > Hello Padmanabha,
> > 
> > On Mon, 7 Mar 2022 19:40:11 +0100
> > Padmanabha Srinivasaiah <treasure4paddy@gmail.com> wrote:
> > 
> > > Hello Masami Hiramatsu,
> > > 
> > > Thanks for detailed explanation on boot time tracing using early boot configuration file.
> > > https://linuxfoundation.org/wp-content/uploads/boottrace-LF-live-2021-update.pdf
> > > 
> > > Also for https://lwn.net/Articles/806002/.
> > > 
> > > Latter link also states we can embed boot config into the kernel image for non intrd based system.
> > 
> > Ah, that was an original plan, but since no one interested in, I didn't implement it.
> > So we still need the initrd for bootconfig.
> >
> Ok.
> > > 
> > > I tried searching mailing lists not able to find pointer for same.
> > > 
> > > A hint/pointer on how-to will be very helpful. 
> > 
> > BTW, what is your problem, could you share your use-case?
> > 
> 
> I have hetrogenous system which donot use intrd.
> 
> The use-case is to capture __system wide__ event based tracing for
> boot-up sequence, which also covers early stage of default init programs
> used.
> 
> As buffer size is limited, will have hand-picked events set configured.

Hm, so I guess you will boot linux from your custom bootloader (or binary loader on sub processor?).

Can you even try to add a dummy initrd? or are you OK to rebuild kernel for embedding the bootconfig data?
If both don't work, the solution will be architecture or bootloader specific.

Thank you,

-- 
Masami Hiramatsu <mhiramat@kernel.org>

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

* Re: tracing : bootconfig : Early boot config for non intrd systems
  2022-03-09  8:01     ` Masami Hiramatsu
@ 2022-03-09 19:06       ` Padmanabha Srinivasaiah
  2022-03-12  6:53         ` Masami Hiramatsu
  0 siblings, 1 reply; 11+ messages in thread
From: Padmanabha Srinivasaiah @ 2022-03-09 19:06 UTC (permalink / raw)
  To: Masami Hiramatsu; +Cc: rostedt, linux-kernel

On Wed, Mar 09, 2022 at 05:01:24PM +0900, Masami Hiramatsu wrote:
> On Tue, 8 Mar 2022 18:48:29 +0100
> Padmanabha Srinivasaiah <treasure4paddy@gmail.com> wrote:
> 
> > Hello Masami Hiramatsu,
> > 
> > On Tue, Mar 08, 2022 at 04:36:00PM +0900, Masami Hiramatsu wrote:
> > > Hello Padmanabha,
> > > 
> > > On Mon, 7 Mar 2022 19:40:11 +0100
> > > Padmanabha Srinivasaiah <treasure4paddy@gmail.com> wrote:
> > > 
> > > > Hello Masami Hiramatsu,
> > > > 
> > > > Thanks for detailed explanation on boot time tracing using early boot configuration file.
> > > > https://linuxfoundation.org/wp-content/uploads/boottrace-LF-live-2021-update.pdf
> > > > 
> > > > Also for https://lwn.net/Articles/806002/.
> > > > 
> > > > Latter link also states we can embed boot config into the kernel image for non intrd based system.
> > > 
> > > Ah, that was an original plan, but since no one interested in, I didn't implement it.
> > > So we still need the initrd for bootconfig.
> > >
> > Ok.
> > > > 
> > > > I tried searching mailing lists not able to find pointer for same.
> > > > 
> > > > A hint/pointer on how-to will be very helpful. 
> > > 
> > > BTW, what is your problem, could you share your use-case?
> > > 
> > 
> > I have hetrogenous system which donot use intrd.
> > 
> > The use-case is to capture __system wide__ event based tracing for
> > boot-up sequence, which also covers early stage of default init programs
> > used.
> > 
> > As buffer size is limited, will have hand-picked events set configured.
> 
> Hm, so I guess you will boot linux from your custom bootloader (or binary loader on sub processor?).
>
Yes, customised implemation which loads linux. 

> Can you even try to add a dummy initrd? or are you OK to rebuild kernel for embedding the bootconfig data?
Yes, re-building the kernel image to appended bootconfig data is feasable option.

> If both don't work, the solution will be architecture or bootloader specific.
> 
> Thank you,
>

Thanks and Regards,
Padmanabha.S
> -- 
> Masami Hiramatsu <mhiramat@kernel.org>

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

* Re: tracing : bootconfig : Early boot config for non intrd systems
  2022-03-09 19:06       ` Padmanabha Srinivasaiah
@ 2022-03-12  6:53         ` Masami Hiramatsu
  2022-03-12 15:15           ` Steven Rostedt
  2022-03-16 14:06           ` Padmanabha Srinivasaiah
  0 siblings, 2 replies; 11+ messages in thread
From: Masami Hiramatsu @ 2022-03-12  6:53 UTC (permalink / raw)
  To: Padmanabha Srinivasaiah; +Cc: rostedt, linux-kernel

Hello Padmanabha,

On Wed, 9 Mar 2022 20:06:51 +0100
Padmanabha Srinivasaiah <treasure4paddy@gmail.com> wrote:

> On Wed, Mar 09, 2022 at 05:01:24PM +0900, Masami Hiramatsu wrote:
> > On Tue, 8 Mar 2022 18:48:29 +0100
> > Padmanabha Srinivasaiah <treasure4paddy@gmail.com> wrote:
> > 
> > > Hello Masami Hiramatsu,
> > > 
> > > On Tue, Mar 08, 2022 at 04:36:00PM +0900, Masami Hiramatsu wrote:
> > > > Hello Padmanabha,
> > > > 
> > > > On Mon, 7 Mar 2022 19:40:11 +0100
> > > > Padmanabha Srinivasaiah <treasure4paddy@gmail.com> wrote:
> > > > 
> > > > > Hello Masami Hiramatsu,
> > > > > 
> > > > > Thanks for detailed explanation on boot time tracing using early boot configuration file.
> > > > > https://linuxfoundation.org/wp-content/uploads/boottrace-LF-live-2021-update.pdf
> > > > > 
> > > > > Also for https://lwn.net/Articles/806002/.
> > > > > 
> > > > > Latter link also states we can embed boot config into the kernel image for non intrd based system.
> > > > 
> > > > Ah, that was an original plan, but since no one interested in, I didn't implement it.
> > > > So we still need the initrd for bootconfig.
> > > >
> > > Ok.
> > > > > 
> > > > > I tried searching mailing lists not able to find pointer for same.
> > > > > 
> > > > > A hint/pointer on how-to will be very helpful. 
> > > > 
> > > > BTW, what is your problem, could you share your use-case?
> > > > 
> > > 
> > > I have hetrogenous system which donot use intrd.
> > > 
> > > The use-case is to capture __system wide__ event based tracing for
> > > boot-up sequence, which also covers early stage of default init programs
> > > used.
> > > 
> > > As buffer size is limited, will have hand-picked events set configured.
> > 
> > Hm, so I guess you will boot linux from your custom bootloader (or binary loader on sub processor?).
> >
> Yes, customised implemation which loads linux. 
> 
> > Can you even try to add a dummy initrd? or are you OK to rebuild kernel for embedding the bootconfig data?
> Yes, re-building the kernel image to appended bootconfig data is feasable option.
> 

OK, please try below patch. You can embed your bootconfig in the kernel via
CONFIG_EMBED_BOOT_CONFIG_FILE.


From 7478a8fbfe4669ee61fcb12b85b36d7e36f992ba Mon Sep 17 00:00:00 2001
From: Masami Hiramatsu <mhiramat@kernel.org>
Date: Sat, 12 Mar 2022 14:59:30 +0900
Subject: [PATCH] bootconfig: Support embedding a bootconfig file in kernel

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 2 options: CONFIG_EMBED_BOOT_CONFIG=y and set the file
name to CONFIG_EMBED_BOOT_CONFIG_FILE.
Note that you still need 'bootconfig' command line option to load the
embedded bootconfig. And if you boot with the initrd which has another
bootconfig, the kernel will use the bootconfig in the initrd, instead
of embedding one.

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
---
 include/linux/bootconfig.h | 10 ++++++++++
 init/Kconfig               | 19 +++++++++++++++++++
 init/main.c                | 25 +++++++++++++------------
 lib/bootconfig.c           | 23 +++++++++++++++++++++++
 4 files changed, 65 insertions(+), 12 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..1b736ac7f90d 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -1357,6 +1357,25 @@ 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.
+
 choice
 	prompt "Compiler optimization level"
 	default CC_OPTIMIZE_FOR_PERFORMANCE
diff --git a/init/main.c b/init/main.c
index 65fa2e41a9c0..f371610bc008 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(size_t *_size)
 {
 	u32 size, csum;
 	char *data;
@@ -299,12 +299,15 @@ 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;
 }
@@ -408,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, csum;
+	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, &csum);
+	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,
@@ -432,16 +438,11 @@ static void __init setup_boot_config(void)
 	}
 
 	if (size >= XBC_DATA_MAX) {
-		pr_err("bootconfig size %d greater than max size %d\n",
+		pr_err("bootconfig size %ld greater than max size %d\n",
 			size, XBC_DATA_MAX);
 		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)
@@ -451,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", 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/bootconfig.c b/lib/bootconfig.c
index 74f3201ab8e5..bf84f5838c08 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 \"" CONFIG_EMBED_BOOT_CONFIG_FILE "\"	\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 embedded_bootconfig_data;
+}
+
+#endif
+
 #else /* !__KERNEL__ */
 /*
  * NOTE: This is only for tools/bootconfig, because tools/bootconfig will
-- 
2.25.1


-- 
Masami Hiramatsu <mhiramat@kernel.org>

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

* Re: tracing : bootconfig : Early boot config for non intrd systems
  2022-03-12  6:53         ` Masami Hiramatsu
@ 2022-03-12 15:15           ` Steven Rostedt
  2022-03-12 15:16             ` Steven Rostedt
  2022-03-16 14:06           ` Padmanabha Srinivasaiah
  1 sibling, 1 reply; 11+ messages in thread
From: Steven Rostedt @ 2022-03-12 15:15 UTC (permalink / raw)
  To: Masami Hiramatsu; +Cc: Padmanabha Srinivasaiah, linux-kernel

On Sat, 12 Mar 2022 15:53:58 +0900
Masami Hiramatsu <mhiramat@kernel.org> wrote:

> OK, please try below patch. You can embed your bootconfig in the kernel via
> CONFIG_EMBED_BOOT_CONFIG_FILE.
> 
> 
> >From 7478a8fbfe4669ee61fcb12b85b36d7e36f992ba Mon Sep 17 00:00:00 2001  
> From: Masami Hiramatsu <mhiramat@kernel.org>
> Date: Sat, 12 Mar 2022 14:59:30 +0900
> Subject: [PATCH] bootconfig: Support embedding a bootconfig file in kernel

I'm going to try this out, because there was a few times I could have
used this.

Thanks Masami!

-- Steve

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

* Re: tracing : bootconfig : Early boot config for non intrd systems
  2022-03-12 15:15           ` Steven Rostedt
@ 2022-03-12 15:16             ` Steven Rostedt
  2022-03-13  7:48               ` Masami Hiramatsu
  0 siblings, 1 reply; 11+ messages in thread
From: Steven Rostedt @ 2022-03-12 15:16 UTC (permalink / raw)
  To: Masami Hiramatsu; +Cc: Padmanabha Srinivasaiah, linux-kernel

On Sat, 12 Mar 2022 10:15:24 -0500
Steven Rostedt <rostedt@goodmis.org> wrote:

> On Sat, 12 Mar 2022 15:53:58 +0900
> Masami Hiramatsu <mhiramat@kernel.org> wrote:
> 
> > OK, please try below patch. You can embed your bootconfig in the kernel via
> > CONFIG_EMBED_BOOT_CONFIG_FILE.
> > 
> >   
> > >From 7478a8fbfe4669ee61fcb12b85b36d7e36f992ba Mon Sep 17 00:00:00 2001    
> > From: Masami Hiramatsu <mhiramat@kernel.org>
> > Date: Sat, 12 Mar 2022 14:59:30 +0900
> > Subject: [PATCH] bootconfig: Support embedding a bootconfig file in kernel  
> 
> I'm going to try this out, because there was a few times I could have
> used this.
> 

Oh, and can you send this as a separate patch so that it triggers my
scripts?

Thanks,

-- Steve

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

* Re: tracing : bootconfig : Early boot config for non intrd systems
  2022-03-12 15:16             ` Steven Rostedt
@ 2022-03-13  7:48               ` Masami Hiramatsu
  2022-03-13  9:40                 ` Masami Hiramatsu
  0 siblings, 1 reply; 11+ messages in thread
From: Masami Hiramatsu @ 2022-03-13  7:48 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: Padmanabha Srinivasaiah, linux-kernel

On Sat, 12 Mar 2022 10:16:06 -0500
Steven Rostedt <rostedt@goodmis.org> wrote:

> On Sat, 12 Mar 2022 10:15:24 -0500
> Steven Rostedt <rostedt@goodmis.org> wrote:
> 
> > On Sat, 12 Mar 2022 15:53:58 +0900
> > Masami Hiramatsu <mhiramat@kernel.org> wrote:
> > 
> > > OK, please try below patch. You can embed your bootconfig in the kernel via
> > > CONFIG_EMBED_BOOT_CONFIG_FILE.
> > > 
> > >   
> > > >From 7478a8fbfe4669ee61fcb12b85b36d7e36f992ba Mon Sep 17 00:00:00 2001    
> > > From: Masami Hiramatsu <mhiramat@kernel.org>
> > > Date: Sat, 12 Mar 2022 14:59:30 +0900
> > > Subject: [PATCH] bootconfig: Support embedding a bootconfig file in kernel  
> > 
> > I'm going to try this out, because there was a few times I could have
> > used this.
> > 
> 
> Oh, and can you send this as a separate patch so that it triggers my
> scripts?

OK, let me clean it up and add a document how to use it.

Thank you,

> 
> Thanks,
> 
> -- Steve


-- 
Masami Hiramatsu <mhiramat@kernel.org>

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

* Re: tracing : bootconfig : Early boot config for non intrd systems
  2022-03-13  7:48               ` Masami Hiramatsu
@ 2022-03-13  9:40                 ` Masami Hiramatsu
  0 siblings, 0 replies; 11+ messages in thread
From: Masami Hiramatsu @ 2022-03-13  9:40 UTC (permalink / raw)
  To: Masami Hiramatsu; +Cc: Steven Rostedt, Padmanabha Srinivasaiah, linux-kernel

On Sun, 13 Mar 2022 16:48:57 +0900
Masami Hiramatsu <mhiramat@kernel.org> wrote:

> On Sat, 12 Mar 2022 10:16:06 -0500
> Steven Rostedt <rostedt@goodmis.org> wrote:
> 
> > On Sat, 12 Mar 2022 10:15:24 -0500
> > Steven Rostedt <rostedt@goodmis.org> wrote:
> > 
> > > On Sat, 12 Mar 2022 15:53:58 +0900
> > > Masami Hiramatsu <mhiramat@kernel.org> wrote:
> > > 
> > > > OK, please try below patch. You can embed your bootconfig in the kernel via
> > > > CONFIG_EMBED_BOOT_CONFIG_FILE.
> > > > 
> > > >   
> > > > >From 7478a8fbfe4669ee61fcb12b85b36d7e36f992ba Mon Sep 17 00:00:00 2001    
> > > > From: Masami Hiramatsu <mhiramat@kernel.org>
> > > > Date: Sat, 12 Mar 2022 14:59:30 +0900
> > > > Subject: [PATCH] bootconfig: Support embedding a bootconfig file in kernel  
> > > 
> > > I'm going to try this out, because there was a few times I could have
> > > used this.
> > > 
> > 
> > Oh, and can you send this as a separate patch so that it triggers my
> > scripts?
> 
> OK, let me clean it up and add a document how to use it.

I found that the current patch causes a build error with allyesconfig.
I think I need to check CONFIG_EMBED_BOOT_CONFIG_FILE in Makefile and
copy it to default.bconf file.
Let me try to fix it.

Thank you,

> 
> Thank you,
> 
> > 
> > Thanks,
> > 
> > -- Steve
> 
> 
> -- 
> Masami Hiramatsu <mhiramat@kernel.org>


-- 
Masami Hiramatsu <mhiramat@kernel.org>

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

* Re: tracing : bootconfig : Early boot config for non intrd systems
  2022-03-12  6:53         ` Masami Hiramatsu
  2022-03-12 15:15           ` Steven Rostedt
@ 2022-03-16 14:06           ` Padmanabha Srinivasaiah
  1 sibling, 0 replies; 11+ messages in thread
From: Padmanabha Srinivasaiah @ 2022-03-16 14:06 UTC (permalink / raw)
  To: Masami Hiramatsu; +Cc: rostedt, linux-kernel

Hello Masami Hiramatsu,

On Sat, Mar 12, 2022 at 03:53:58PM +0900, Masami Hiramatsu wrote:
> Hello Padmanabha,
> 
> On Wed, 9 Mar 2022 20:06:51 +0100
> Padmanabha Srinivasaiah <treasure4paddy@gmail.com> wrote:
> 
> > On Wed, Mar 09, 2022 at 05:01:24PM +0900, Masami Hiramatsu wrote:
> > > On Tue, 8 Mar 2022 18:48:29 +0100
> > > Padmanabha Srinivasaiah <treasure4paddy@gmail.com> wrote:
> > > 
> > > > Hello Masami Hiramatsu,
> > > > 
> > > > On Tue, Mar 08, 2022 at 04:36:00PM +0900, Masami Hiramatsu wrote:
> > > > > Hello Padmanabha,
> > > > > 
> > > > > On Mon, 7 Mar 2022 19:40:11 +0100
> > > > > Padmanabha Srinivasaiah <treasure4paddy@gmail.com> wrote:
> > > > > 
> > > > > > Hello Masami Hiramatsu,
> > > > > > 
> > > > > > Thanks for detailed explanation on boot time tracing using early boot configuration file.
> > > > > > https://linuxfoundation.org/wp-content/uploads/boottrace-LF-live-2021-update.pdf
> > > > > > 
> > > > > > Also for https://lwn.net/Articles/806002/.
> > > > > > 
> > > > > > Latter link also states we can embed boot config into the kernel image for non intrd based system.
> > > > > 
> > > > > Ah, that was an original plan, but since no one interested in, I didn't implement it.
> > > > > So we still need the initrd for bootconfig.
> > > > >
> > > > Ok.
> > > > > > 
> > > > > > I tried searching mailing lists not able to find pointer for same.
> > > > > > 
> > > > > > A hint/pointer on how-to will be very helpful. 
> > > > > 
> > > > > BTW, what is your problem, could you share your use-case?
> > > > > 
> > > > 
> > > > I have hetrogenous system which donot use intrd.
> > > > 
> > > > The use-case is to capture __system wide__ event based tracing for
> > > > boot-up sequence, which also covers early stage of default init programs
> > > > used.
> > > > 
> > > > As buffer size is limited, will have hand-picked events set configured.
> > > 
> > > Hm, so I guess you will boot linux from your custom bootloader (or binary loader on sub processor?).
> > >
> > Yes, customised implemation which loads linux. 
> > 
> > > Can you even try to add a dummy initrd? or are you OK to rebuild kernel for embedding the bootconfig data?
> > Yes, re-building the kernel image to appended bootconfig data is feasable option.
> > 
> 
> OK, please try below patch. You can embed your bootconfig in the kernel via
> CONFIG_EMBED_BOOT_CONFIG_FILE.
>
Thank you Masmi, so kind of you. Will test the latest patchset and
report the results.
> 
> From 7478a8fbfe4669ee61fcb12b85b36d7e36f992ba Mon Sep 17 00:00:00 2001
> From: Masami Hiramatsu <mhiramat@kernel.org>
> Date: Sat, 12 Mar 2022 14:59:30 +0900
> Subject: [PATCH] bootconfig: Support embedding a bootconfig file in kernel
> 
> 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 2 options: CONFIG_EMBED_BOOT_CONFIG=y and set the file
> name to CONFIG_EMBED_BOOT_CONFIG_FILE.
> Note that you still need 'bootconfig' command line option to load the
> embedded bootconfig. And if you boot with the initrd which has another
> bootconfig, the kernel will use the bootconfig in the initrd, instead
> of embedding one.
> 
> Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
> ---
>  include/linux/bootconfig.h | 10 ++++++++++
>  init/Kconfig               | 19 +++++++++++++++++++
>  init/main.c                | 25 +++++++++++++------------
>  lib/bootconfig.c           | 23 +++++++++++++++++++++++
>  4 files changed, 65 insertions(+), 12 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..1b736ac7f90d 100644
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -1357,6 +1357,25 @@ 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.
> +
>  choice
>  	prompt "Compiler optimization level"
>  	default CC_OPTIMIZE_FOR_PERFORMANCE
> diff --git a/init/main.c b/init/main.c
> index 65fa2e41a9c0..f371610bc008 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(size_t *_size)
>  {
>  	u32 size, csum;
>  	char *data;
> @@ -299,12 +299,15 @@ 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;
>  }
> @@ -408,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, csum;
> +	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, &csum);
> +	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,
> @@ -432,16 +438,11 @@ static void __init setup_boot_config(void)
>  	}
>  
>  	if (size >= XBC_DATA_MAX) {
> -		pr_err("bootconfig size %d greater than max size %d\n",
> +		pr_err("bootconfig size %ld greater than max size %d\n",
>  			size, XBC_DATA_MAX);
>  		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)
> @@ -451,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", 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/bootconfig.c b/lib/bootconfig.c
> index 74f3201ab8e5..bf84f5838c08 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 \"" CONFIG_EMBED_BOOT_CONFIG_FILE "\"	\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 embedded_bootconfig_data;
> +}
> +
> +#endif
> +
>  #else /* !__KERNEL__ */
>  /*
>   * NOTE: This is only for tools/bootconfig, because tools/bootconfig will
> -- 
> 2.25.1
> 
> 
> -- 
> Masami Hiramatsu <mhiramat@kernel.org>

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

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

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-07 18:40 tracing : bootconfig : Early boot config for non intrd systems Padmanabha Srinivasaiah
2022-03-08  7:36 ` Masami Hiramatsu
2022-03-08 17:48   ` Padmanabha Srinivasaiah
2022-03-09  8:01     ` Masami Hiramatsu
2022-03-09 19:06       ` Padmanabha Srinivasaiah
2022-03-12  6:53         ` Masami Hiramatsu
2022-03-12 15:15           ` Steven Rostedt
2022-03-12 15:16             ` Steven Rostedt
2022-03-13  7:48               ` Masami Hiramatsu
2022-03-13  9:40                 ` Masami Hiramatsu
2022-03-16 14:06           ` Padmanabha Srinivasaiah

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.