1sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/admin-guide/bootconfigmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/zh_TW/admin-guide/bootconfigmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/it_IT/admin-guide/bootconfigmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/ja_JP/admin-guide/bootconfigmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/ko_KR/admin-guide/bootconfigmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/sp_SP/admin-guide/bootconfigmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhW/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/admin-guide/bootconfig.rsthKubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h paragraph)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(h)Documentation/admin-guide/bootconfig.rst h]h)}(h(Documentation/admin-guide/bootconfig.rsth]h(Documentation/admin-guide/bootconfig.rst}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h译者h]h译者}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhKubh)}(h*吴想成 Wu XiangCheng h]h)}(h)吴想成 Wu XiangCheng h](h吴想成 Wu XiangCheng <}(hj hhhNhNubh reference)}(hbobwxc@email.cnh]hbobwxc@email.cn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:bobwxc@email.cnuh1j(hj ubh>}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhsection)}(hhh](htitle)}(h 引导配置h]h 引导配置}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjXhhhhhK ubh)}(hhh]h)}(hhh](h)}(h作者h]h作者}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhhhKubh)}(h'Masami Hiramatsu h]h)}(h&Masami Hiramatsu h](hMasami Hiramatsu <}(hjhhhNhNubj))}(hmhiramat@kernel.orgh]hmhiramat@kernel.org}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:mhiramat@kernel.orguh1j(hjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjubah}(h]h ]h"]h$]h&]uh1hhjnubeh}(h]h ]h"]h$]h&]uh1hhhhK hjkhhubah}(h]h ]h"]h$]h&]uh1hhjXhhhhhK ubjW)}(hhh](j\)}(h概述h]h概述}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhhhhhKubh)}(h引导配置扩展了现有的内核命令行,以一种更有效率的方式在引导内核时进一步支持 键值数据。这允许管理员传递一份结构化关键字的配置文件。h]h引导配置扩展了现有的内核命令行,以一种更有效率的方式在引导内核时进一步支持 键值数据。这允许管理员传递一份结构化关键字的配置文件。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]id2ah ]h"]概述ah$]h&]uh1jVhjXhhhhhKubjW)}(hhh](j\)}(h配置文件语法h]h配置文件语法}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhhhhhKubh)}(h引导配置文件的语法采用非常简单的键值结构。每个关键字由点连接的单词组成,键 和值由 ``=`` 连接。值以分号( ``;`` )或换行符( ``\n`` )结尾。数组值中每 个元素由逗号( ``,`` )分隔。::h](hz引导配置文件的语法采用非常简单的键值结构。每个关键字由点连接的单词组成,键 和值由 }(hjhhhNhNubhliteral)}(h``=``h]h=}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 连接。值以分号( }(hjhhhNhNubj)}(h``;``h]h;}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh )或换行符( }(hjhhhNhNubj)}(h``\n``h]h\n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh3 )结尾。数组值中每 个元素由逗号( }(hjhhhNhNubj)}(h``,``h]h,}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh )分隔。:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh literal_block)}(h)KEY[.WORD[...]] = VALUE[, VALUE2[...]][;]h]h)KEY[.WORD[...]] = VALUE[, VALUE2[...]][;]}hjIsbah}(h]h ]h"]h$]h&]hhuh1jGhhhKhjhhubh)}(hI与内核命令行语法不同,逗号和 ``=`` 周围允许有空格。h](h+与内核命令行语法不同,逗号和 }(hjWhhhNhNubj)}(h``=``h]h=}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh 周围允许有空格。}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hX关键字只允许包含字母、数字、连字符( ``-`` )和下划线( ``_`` )。值可包含 可打印字符和空格,但分号( ``;`` )、换行符( ``\n`` )、逗号( ``,`` )、 井号( ``#`` )和右大括号( ``}`` )等分隔符除外。h](h7关键字只允许包含字母、数字、连字符( }(hjwhhhNhNubj)}(h``-``h]h-}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh )和下划线( }(hjwhhhNhNubj)}(h``_``h]h_}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh< )。值可包含 可打印字符和空格,但分号( }(hjwhhhNhNubj)}(h``;``h]h;}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh )、换行符( }(hjwhhhNhNubj)}(h``\n``h]h\n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh )、逗号( }(hjwhhhNhNubj)}(h``,``h]h,}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh )、 井号( }(hjwhhhNhNubj)}(h``#``h]h#}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh )和右大括号( }(hjwhhhNhNubj)}(h``}``h]h}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh )等分隔符除外。}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjhhubh)}(h如果你需要在值中使用这些分隔符,可以用双引号( ``"VALUE"`` )或单引号 ( ``'VALUE'`` )括起来。注意,引号无法转义。h](hF如果你需要在值中使用这些分隔符,可以用双引号( }(hjhhhNhNubj)}(h ``"VALUE"``h]h"VALUE"}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh )或单引号 ( }(hjhhhNhNubj)}(h ``'VALUE'``h]h'VALUE'}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. )括起来。注意,引号无法转义。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK$hjhhubh)}(hc键的值可以为空或不存在。这些键用于检查该键是否存在(类似布尔值)。h]hc键的值可以为空或不存在。这些键用于检查该键是否存在(类似布尔值)。}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hjhhubjW)}(hhh](j\)}(h 键值语法h]h 键值语法}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjChhhhhK*ubh)}(hb引导配置文件语法允许用户通过大括号合并键名部分相同的关键字。例如::h]ha引导配置文件语法允许用户通过大括号合并键名部分相同的关键字。例如:}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK,hjChhubjH)}(h.foo.bar.baz = value1 foo.bar.qux.quux = value2h]h.foo.bar.baz = value1 foo.bar.qux.quux = value2}hjbsbah}(h]h ]h"]h$]h&]hhuh1jGhhhK.hjChhubh)}(h也可以写成::h]h也可以写成:}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hjChhubjH)}(h0foo.bar { baz = value1 qux.quux = value2 }h]h0foo.bar { baz = value1 qux.quux = value2 }}hj~sbah}(h]h ]h"]h$]h&]hhuh1jGhhhK3hjChhubh)}(h 或者更紧凑一些,写成::h]h或者更紧凑一些,写成:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK8hjChhubjH)}(h+foo.bar { baz = value1; qux.quux = value2 }h]h+foo.bar { baz = value1; qux.quux = value2 }}hjsbah}(h]h ]h"]h$]h&]hhuh1jGhhhK:hjChhubh)}(hy在这两种样式中,引导解析时相同的关键字都会自动合并。因此可以追加类似的树或 键值。h]hy在这两种样式中,引导解析时相同的关键字都会自动合并。因此可以追加类似的树或 键值。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK这将被复制到内核命令行字符串中,如下所示::h]h=这将被复制到内核命令行字符串中,如下所示:}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjH)}(h3root="01234567-89ab-cdef-0123-456789abcd" -- splashh]h3root="01234567-89ab-cdef-0123-456789abcd" -- splash}hj|sbah}(h]h ]h"]h$]h&]hhuh1jGhhhKhjhhubh)}(h)如果用户给出的其他命令行是::h]h(如果用户给出的其他命令行是:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjH)}(hro bootconfig -- quieth]hro bootconfig -- quiet}hjsbah}(h]h ]h"]h$]h&]hhuh1jGhhhKhjhhubh)}(h#则最后的内核命令行如下::h]h"则最后的内核命令行如下:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjH)}(hGroot="01234567-89ab-cdef-0123-456789abcd" ro bootconfig -- splash quieth]hGroot="01234567-89ab-cdef-0123-456789abcd" ro bootconfig -- splash quiet}hjsbah}(h]h ]h"]h$]h&]hhuh1jGhhhKhjhhubeh}(h]id9ah ]h"]$通过引导配置传递内核参数ah$]h&]uh1jVhjXhhhhhKubjW)}(hhh](j\)}(h配置文件的限制h]h配置文件的限制}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhhhhhKubh)}(hX当前最大的配置大小是32KB,关键字总数(不是键值条目)必须少于1024个节点。 注意:这不是条目数而是节点数,条目必须消耗超过2个节点(一个关键字和一个值)。 所以从理论上讲最多512个键值对。如果关键字平均包含3个单词,则可有256个键值对。 在大多数情况下,配置项的数量将少于100个条目,小于8KB,因此这应该足够了。如果 节点数超过1024,解析器将返回错误,即使文件大小小于32KB。(请注意,此最大尺寸 不包括填充的空字符。) 无论如何,因为 ``bootconfig`` 命令在附加启动配置到initrd映像时会验证它,用户 可以在引导之前注意到它。h](hXe当前最大的配置大小是32KB,关键字总数(不是键值条目)必须少于1024个节点。 注意:这不是条目数而是节点数,条目必须消耗超过2个节点(一个关键字和一个值)。 所以从理论上讲最多512个键值对。如果关键字平均包含3个单词,则可有256个键值对。 在大多数情况下,配置项的数量将少于100个条目,小于8KB,因此这应该足够了。如果 节点数超过1024,解析器将返回错误,即使文件大小小于32KB。(请注意,此最大尺寸 不包括填充的空字符。) 无论如何,因为 }(hjhhhNhNubj)}(h``bootconfig``h]h bootconfig}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhh 命令在附加启动配置到initrd映像时会验证它,用户 可以在引导之前注意到它。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]id10ah ]h"]配置文件的限制ah$]h&]uh1jVhjXhhhhhKubjW)}(hhh](j\)}(h引导配置APIh]h引导配置API}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj hhhhhKubh)}(h|用户可以查询或遍历键值对,也可以查找(前缀)根关键字节点,并在查找该节点下的 键值。h]h|用户可以查询或遍历键值对,也可以查找(前缀)根关键字节点,并在查找该节点下的 键值。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubh)}(hX'如果您有一个关键字字符串,则可以直接使用 xbc_find_value() 查询该键的值。如果 你想知道引导配置里有哪些关键字,可以使用 xbc_for_each_key_value() 迭代键值对。 请注意,您需要使用 xbc_array_for_each_value() 访问数组的值,例如::h]hX&如果您有一个关键字字符串,则可以直接使用 xbc_find_value() 查询该键的值。如果 你想知道引导配置里有哪些关键字,可以使用 xbc_for_each_key_value() 迭代键值对。 请注意,您需要使用 xbc_array_for_each_value() 访问数组的值,例如:}(hj" hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubjH)}(hvnode = NULL; xbc_find_value("key.word", &vnode); if (vnode && xbc_node_is_array(vnode)) xbc_array_for_each_value(vnode, value) { printk("%s ", value); }h]hvnode = NULL; xbc_find_value("key.word", &vnode); if (vnode && xbc_node_is_array(vnode)) xbc_array_for_each_value(vnode, value) { printk("%s ", value); }}hj0 sbah}(h]h ]h"]h$]h&]hhuh1jGhhhMhj hhubh)}(h如果您想查找具有前缀字符串的键,可以使用 xbc_find_node() 通过前缀字符串查找 节点,然后用 xbc_node_for_each_key_value() 迭代前缀节点下的键。h]h如果您想查找具有前缀字符串的键,可以使用 xbc_find_node() 通过前缀字符串查找 节点,然后用 xbc_node_for_each_key_value() 迭代前缀节点下的键。}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubh)}(hY但最典型的用法是获取前缀下的命名值或前缀下的命名数组,例如::h]hX但最典型的用法是获取前缀下的命名值或前缀下的命名数组,例如:}(hjL hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubjH)}(hroot = xbc_find_node("key.prefix"); value = xbc_node_find_value(root, "option", &vnode); ... xbc_node_for_each_array_value(root, "array-option", value, anode) { ... }h]hroot = xbc_find_node("key.prefix"); value = xbc_node_find_value(root, "option", &vnode); ... xbc_node_for_each_array_value(root, "array-option", value, anode) { ... }}hjZ sbah}(h]h ]h"]h$]h&]hhuh1jGhhhMhj hhubh)}(hX这将访问值“key.prefix.option”的值和“key.prefix.array-option”的数组。h]hX这将访问值“key.prefix.option”的值和“key.prefix.array-option”的数组。}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubh)}(hx锁是不需要的,因为在初始化之后配置只读。如果需要修改,必须复制所有数据和关键字。h]hx锁是不需要的,因为在初始化之后配置只读。如果需要修改,必须复制所有数据和关键字。}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubeh}(h]apiah ]h"]引导配置apiah$]h&]uh1jVhjXhhhhhKubjW)}(hhh](j\)}(h函数与结构体h]h函数与结构体}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj hhhhhM ubh)}(h"相关定义的kernel-doc参见:h]h"相关定义的kernel-doc参见:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM"hj hhubh block_quote)}(h/- include/linux/bootconfig.h - lib/bootconfig.ch]h bullet_list)}(hhh](h list_item)}(hinclude/linux/bootconfig.hh]h)}(hj h]hinclude/linux/bootconfig.h}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM$hj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hlib/bootconfig.ch]h)}(hj h]hlib/bootconfig.c}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM%hj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]bullet-uh1j hhhM$hj ubah}(h]h ]h"]h$]h&]uh1j hhhM$hj hhubeh}(h]id11ah ]h"]函数与结构体ah$]h&]uh1jVhjXhhhhhM ubeh}(h]id1ah ]h"] 引导配置ah$]h&]uh1jVhhhhhhhK ubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(j[N generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj' error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j j jjjjjjjDjAjjj6j3jjjwjtjjjjj jj j j j u nametypes}(j jjjjDjj6jjwjjj j j uh}(j jXjjjjjjCjAjjjGj3jjj9jtjqjjzjjjjj j j j u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j5 K sRparse_messages]transform_messages] transformerN include_log];Documentation/translations/zh_CN/admin-guide/bootconfig.rst(NNNNta decorationNhhub.