@@ -19,12 +19,10 @@ import (
1919 "strings"
2020)
2121
22- // kernelArgs serializes+deserializes kernel boot parameters from/into a map.
23- // Kernel docs: https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt
24- //
25- // "key=value" will result in map["key"] = &"value"
26- // "key=" will result in map["key"] = &""
27- // "key" will result in map["key"] = nil
22+ // kernelArg represents a key and optional value pair for passing an argument
23+ // into the kernel. Additionally, it also saves the position of the argument
24+ // in the whole command line input. This is important because the kernel stops reading
25+ // everything after `--` and passes these keys into the init process
2826type kernelArg struct {
2927 position uint
3028 key string
@@ -38,10 +36,17 @@ func (karg kernelArg) String() string {
3836 return karg .key
3937}
4038
39+ // kernelArgs serializes + deserializes kernel boot parameters from/into a map.
40+ // Kernel docs: https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt
41+ //
42+ // "key=value flag emptykey=" will be converted to
43+ // map["key"] = { position: 0, key: "key", value: &"value" }
44+ // map["flag"] = { position: 1, key: "flag", value: nil }
45+ // map["emptykey"] = { position: 2, key: "emptykey", value: &"" }
4146type kernelArgs map [string ]kernelArg
4247
43- // serialize the sorted kernelArgs back to a string that can be provided
44- // to the kernel
48+ // Sorts the arguments by its position
49+ // and serializes the map back into a single string
4550func (kargs kernelArgs ) String () string {
4651 sortedArgs := make ([]kernelArg , 0 )
4752 for _ , arg := range kargs {
@@ -58,6 +63,7 @@ func (kargs kernelArgs) String() string {
5863 return strings .Join (args , " " )
5964}
6065
66+ // Add a new kernel argument to the kernelArgs, also the position is saved
6167func (kargs kernelArgs ) Add (key string , value * string ) {
6268 kargs [key ] = kernelArg {
6369 position : uint (len (kargs )),
@@ -66,7 +72,8 @@ func (kargs kernelArgs) Add(key string, value *string) {
6672 }
6773}
6874
69- // deserialize the provided string to a kernelArgs map
75+ // Parses an input string and deserializes it into a map
76+ // saving its position in the command line
7077func parseKernelArgs (rawString string ) kernelArgs {
7178 args := make (map [string ]kernelArg )
7279 for index , kv := range strings .Fields (rawString ) {
0 commit comments