* [PATCH 1/2] Documentation: bootconfig: Add EBNF definiton of bootconfig
2026-03-14 9:06 [PATCH 0/2] bootconfig: Add EBNF definition and more tests Masami Hiramatsu (Google)
@ 2026-03-14 9:06 ` Masami Hiramatsu (Google)
2026-03-14 9:34 ` Masami Hiramatsu
2026-03-14 9:06 ` [PATCH 2/2] bootconfig: Add more test samples Masami Hiramatsu (Google)
1 sibling, 1 reply; 4+ messages in thread
From: Masami Hiramatsu (Google) @ 2026-03-14 9:06 UTC (permalink / raw)
To: Masami Hiramatsu, Steven Rostedt; +Cc: linux-kernel, linux-trace-kernel
From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Add the EBNF definition to Documentation/admin-guide/bootconfig.rst
to formally define the bootconfig syntax.
Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
---
Documentation/admin-guide/bootconfig.rst | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/Documentation/admin-guide/bootconfig.rst b/Documentation/admin-guide/bootconfig.rst
index f712758472d5..5c5f736ca982 100644
--- a/Documentation/admin-guide/bootconfig.rst
+++ b/Documentation/admin-guide/bootconfig.rst
@@ -22,6 +22,21 @@ The boot config syntax is a simple structured key-value. Each key consists
of dot-connected-words, and key and value are connected by ``=``. The value
string has to be terminated by the following delimiters described below.
+The syntax is defined in EBNF as follows::
+
+ Config = { Statement }
+ Statement = [ Key [ Assignment | Block ] | Comment ] ( "\n" | ";" )
+ Assignment = ( "=" | "+=" | ":=" ) ValueList
+ ValueList = [ Value { "," [ { ( Comment | "\n" ) } ] Value } ]
+ Block = "{" { Statement } "}"
+ Key = Word { "." Word }
+ Word = [a-zA-Z0-9_-]+
+ Value = QuotedValue | UnquotedValue
+ QuotedValue = "\"" { any_character_except_double_quote } "\""
+ | "'" { any_character_except_single_quote } "'"
+ UnquotedValue = { any_printable_character_except_delimiters }
+ Comment = "#" { any_character_except_newline }
+
Each key word must contain only alphabets, numbers, dash (``-``) or underscore
(``_``). And each value only contains printable characters or spaces except
for delimiters such as semi-colon (``;``), new-line (``\n``), comma (``,``),
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH 2/2] bootconfig: Add more test samples
2026-03-14 9:06 [PATCH 0/2] bootconfig: Add EBNF definition and more tests Masami Hiramatsu (Google)
2026-03-14 9:06 ` [PATCH 1/2] Documentation: bootconfig: Add EBNF definiton of bootconfig Masami Hiramatsu (Google)
@ 2026-03-14 9:06 ` Masami Hiramatsu (Google)
1 sibling, 0 replies; 4+ messages in thread
From: Masami Hiramatsu (Google) @ 2026-03-14 9:06 UTC (permalink / raw)
To: Masami Hiramatsu, Steven Rostedt; +Cc: linux-kernel, linux-trace-kernel
From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Add more test samples for edge cases (empty block, quoted newline,
various error cases) to tools/bootconfig/samples/.
Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
---
| 2 ++
tools/bootconfig/samples/bad-dot-middle.bconf | 1 +
.../bootconfig/samples/bad-invalid-operator.bconf | 1 +
tools/bootconfig/samples/bad-key-dot-end.bconf | 1 +
tools/bootconfig/samples/bad-unclosed-quote.bconf | 1 +
.../samples/bad-unexpected-close-brace.bconf | 4 ++++
.../samples/exp-good-dot-with-block.bconf | 1 +
.../bootconfig/samples/exp-good-empty-block.bconf | 1 +
.../samples/exp-good-empty-value-sep.bconf | 3 +++
.../samples/exp-good-quoted-newline.bconf | 2 ++
tools/bootconfig/samples/good-dot-with-block.bconf | 3 +++
tools/bootconfig/samples/good-empty-block.bconf | 1 +
.../bootconfig/samples/good-empty-value-sep.bconf | 3 +++
tools/bootconfig/samples/good-quoted-newline.bconf | 2 ++
14 files changed, 26 insertions(+)
create mode 100644 tools/bootconfig/samples/bad-array-comment-delimiter.bconf
create mode 100644 tools/bootconfig/samples/bad-dot-middle.bconf
create mode 100644 tools/bootconfig/samples/bad-invalid-operator.bconf
create mode 100644 tools/bootconfig/samples/bad-key-dot-end.bconf
create mode 100644 tools/bootconfig/samples/bad-unclosed-quote.bconf
create mode 100644 tools/bootconfig/samples/bad-unexpected-close-brace.bconf
create mode 100644 tools/bootconfig/samples/exp-good-dot-with-block.bconf
create mode 100644 tools/bootconfig/samples/exp-good-empty-block.bconf
create mode 100644 tools/bootconfig/samples/exp-good-empty-value-sep.bconf
create mode 100644 tools/bootconfig/samples/exp-good-quoted-newline.bconf
create mode 100644 tools/bootconfig/samples/good-dot-with-block.bconf
create mode 100644 tools/bootconfig/samples/good-empty-block.bconf
create mode 100644 tools/bootconfig/samples/good-empty-value-sep.bconf
create mode 100644 tools/bootconfig/samples/good-quoted-newline.bconf
--git a/tools/bootconfig/samples/bad-array-comment-delimiter.bconf b/tools/bootconfig/samples/bad-array-comment-delimiter.bconf
new file mode 100644
index 000000000000..5300cef82aa3
--- /dev/null
+++ b/tools/bootconfig/samples/bad-array-comment-delimiter.bconf
@@ -0,0 +1,2 @@
+key = 1 # comment
+ , 2 # Error: comment between value and its comma delimiter
diff --git a/tools/bootconfig/samples/bad-dot-middle.bconf b/tools/bootconfig/samples/bad-dot-middle.bconf
new file mode 100644
index 000000000000..b3bd19e3c991
--- /dev/null
+++ b/tools/bootconfig/samples/bad-dot-middle.bconf
@@ -0,0 +1 @@
+key..word = value # Double dots are not allowed
diff --git a/tools/bootconfig/samples/bad-invalid-operator.bconf b/tools/bootconfig/samples/bad-invalid-operator.bconf
new file mode 100644
index 000000000000..ca19895bee8a
--- /dev/null
+++ b/tools/bootconfig/samples/bad-invalid-operator.bconf
@@ -0,0 +1 @@
+key ?= value # Unsupported operator
diff --git a/tools/bootconfig/samples/bad-key-dot-end.bconf b/tools/bootconfig/samples/bad-key-dot-end.bconf
new file mode 100644
index 000000000000..57ae39d36e95
--- /dev/null
+++ b/tools/bootconfig/samples/bad-key-dot-end.bconf
@@ -0,0 +1 @@
+key. = value # Key cannot end with a dot
diff --git a/tools/bootconfig/samples/bad-unclosed-quote.bconf b/tools/bootconfig/samples/bad-unclosed-quote.bconf
new file mode 100644
index 000000000000..9384e68d17f6
--- /dev/null
+++ b/tools/bootconfig/samples/bad-unclosed-quote.bconf
@@ -0,0 +1 @@
+key = "unclosed quote
diff --git a/tools/bootconfig/samples/bad-unexpected-close-brace.bconf b/tools/bootconfig/samples/bad-unexpected-close-brace.bconf
new file mode 100644
index 000000000000..a372be395200
--- /dev/null
+++ b/tools/bootconfig/samples/bad-unexpected-close-brace.bconf
@@ -0,0 +1,4 @@
+key {
+ subkey = value
+}
+} # Extra closing brace
diff --git a/tools/bootconfig/samples/exp-good-dot-with-block.bconf b/tools/bootconfig/samples/exp-good-dot-with-block.bconf
new file mode 100644
index 000000000000..ff563ceec024
--- /dev/null
+++ b/tools/bootconfig/samples/exp-good-dot-with-block.bconf
@@ -0,0 +1 @@
+key.subkey.subsubkey = "value";
diff --git a/tools/bootconfig/samples/exp-good-empty-block.bconf b/tools/bootconfig/samples/exp-good-empty-block.bconf
new file mode 100644
index 000000000000..fe460e8e675c
--- /dev/null
+++ b/tools/bootconfig/samples/exp-good-empty-block.bconf
@@ -0,0 +1 @@
+key;
diff --git a/tools/bootconfig/samples/exp-good-empty-value-sep.bconf b/tools/bootconfig/samples/exp-good-empty-value-sep.bconf
new file mode 100644
index 000000000000..266851aae8f2
--- /dev/null
+++ b/tools/bootconfig/samples/exp-good-empty-value-sep.bconf
@@ -0,0 +1,3 @@
+key1 = "";
+key2 = "";
+key3 = "";
diff --git a/tools/bootconfig/samples/exp-good-quoted-newline.bconf b/tools/bootconfig/samples/exp-good-quoted-newline.bconf
new file mode 100644
index 000000000000..2b5166541df6
--- /dev/null
+++ b/tools/bootconfig/samples/exp-good-quoted-newline.bconf
@@ -0,0 +1,2 @@
+key = "value
+that spans multiple lines";
diff --git a/tools/bootconfig/samples/good-dot-with-block.bconf b/tools/bootconfig/samples/good-dot-with-block.bconf
new file mode 100644
index 000000000000..3d9bef7daa2f
--- /dev/null
+++ b/tools/bootconfig/samples/good-dot-with-block.bconf
@@ -0,0 +1,3 @@
+key.subkey {
+ subsubkey = value
+} # Combination of dot-notation and block syntax
diff --git a/tools/bootconfig/samples/good-empty-block.bconf b/tools/bootconfig/samples/good-empty-block.bconf
new file mode 100644
index 000000000000..8c390f37b177
--- /dev/null
+++ b/tools/bootconfig/samples/good-empty-block.bconf
@@ -0,0 +1 @@
+key { } # Empty block should be allowed and ignored
diff --git a/tools/bootconfig/samples/good-empty-value-sep.bconf b/tools/bootconfig/samples/good-empty-value-sep.bconf
new file mode 100644
index 000000000000..fbfb9a17ff99
--- /dev/null
+++ b/tools/bootconfig/samples/good-empty-value-sep.bconf
@@ -0,0 +1,3 @@
+key1 = ;
+key2 =
+key3 = # comment
diff --git a/tools/bootconfig/samples/good-quoted-newline.bconf b/tools/bootconfig/samples/good-quoted-newline.bconf
new file mode 100644
index 000000000000..8c9cd088579a
--- /dev/null
+++ b/tools/bootconfig/samples/good-quoted-newline.bconf
@@ -0,0 +1,2 @@
+key = "value
+that spans multiple lines" # Quoted values can contain newlines
^ permalink raw reply related [flat|nested] 4+ messages in thread