sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/rust/quick-startmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/zh_TW/rust/quick-startmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/it_IT/rust/quick-startmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/ja_JP/rust/quick-startmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/ko_KR/rust/quick-startmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/sp_SP/rust/quick-startmodnameN 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:spacepreserveuh1hhhhhhQ/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/rust/quick-start.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/rust/quick-start.rst h]h)}(h"Documentation/rust/quick-start.rsth]h"Documentation/rust/quick-start.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.司延腾 Yanteng Si h]h)}(h,司延腾 Yanteng Si h](h司延腾 Yanteng Si <}(hj hhhNhNubh reference)}(hsiyanteng@loongson.cnh]hsiyanteng@loongson.cn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:siyanteng@loongson.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)}(h:本文介绍了如何开始使用Rust进行内核开发。h]h:本文介绍了如何开始使用Rust进行内核开发。}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubjW)}(hhh](j\)}(h 构建依赖h]h 构建依赖}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjyhhhhhKubh)}(h3本节描述了如何获取构建所需的工具。h]h3本节描述了如何获取构建所需的工具。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjyhhubh)}(h其中一些依赖也许可以从Linux发行版中获得,包名可能是 ``rustc`` , ``rust-src`` , ``rust-bindgen`` 等。然而,在写这篇文章的时候,它们很可能还不够新,除非发行版跟踪最 新的版本。h](hK其中一些依赖也许可以从Linux发行版中获得,包名可能是 }(hjhhhNhNubhliteral)}(h ``rustc``h]hrustc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh , }(hjhhhNhNubj)}(h ``rust-src``h]hrust-src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh , }(hjhhhNhNubj)}(h``rust-bindgen``h]h rust-bindgen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubht 等。然而,在写这篇文章的时候,它们很可能还不够新,除非发行版跟踪最 新的版本。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjyhhubh)}(hA为了方便检查是否满足要求,可以使用以下目标::h]h@为了方便检查是否满足要求,可以使用以下目标:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjyhhubh literal_block)}(hmake LLVM=1 rustavailableh]hmake LLVM=1 rustavailable}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjyhhubh)}(h这会触发与Kconfig用来确定是否应该启用 ``RUST_IS_AVAILABLE`` 相同的逻辑;不过,如 果Kconfig认为不该启用,它会列出未满足的条件。h](h5这会触发与Kconfig用来确定是否应该启用 }(hjhhhNhNubj)}(h``RUST_IS_AVAILABLE``h]hRUST_IS_AVAILABLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh` 相同的逻辑;不过,如 果Kconfig认为不该启用,它会列出未满足的条件。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjyhhubjW)}(hhh](j\)}(hrustch]hrustc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhhhhhK#ubh)}(h需要一个特定版本的Rust编译器。较新的版本可能会也可能不会工作,因为就目前而言,内核依赖 于一些不稳定的Rust特性。h]h需要一个特定版本的Rust编译器。较新的版本可能会也可能不会工作,因为就目前而言,内核依赖 于一些不稳定的Rust特性。}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hjhhubh)}(h如果使用的是 ``rustup`` ,请进入内核编译目录(或者用 ``--path=`` 参数 来 ``设置`` sub-command)并运行::h](h如果使用的是 }(hj;hhhNhNubj)}(h ``rustup``h]hrustup}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh, ,请进入内核编译目录(或者用 }(hj;hhhNhNubj)}(h``--path=``h]h--path=}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh 参数 来 }(hj;hhhNhNubj)}(h ``设置``h]h设置}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh sub-command)并运行:}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK(hjhhubj)}(h8rustup override set $(scripts/min-tool-version.sh rustc)h]h8rustup override set $(scripts/min-tool-version.sh rustc)}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhK+hjhhubh)}(he+这将配置你的工作目录使用正确版本的 ``rustc``,而不影响你的默认工具链。h](h5+这将配置你的工作目录使用正确版本的 }(hjhhhNhNubj)}(h ``rustc``h]hrustc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh',而不影响你的默认工具链。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK-hjhhubh)}(hE请注意覆盖应用当前的工作目录(和它的子目录)。h]hE请注意覆盖应用当前的工作目录(和它的子目录)。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hjhhubh)}(hX如果你使用 ``rustup``, 可以从下面的链接拉取一个单独的安装程序:h](h如果你使用 }(hjhhhNhNubj)}(h ``rustup``h]hrustup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh>, 可以从下面的链接拉取一个单独的安装程序:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK1hjhhubh block_quote)}(hNhttps://forge.rust-lang.org/infra/other-installation-methods.html#standalone h]h)}(hLhttps://forge.rust-lang.org/infra/other-installation-methods.html#standaloneh]j))}(hjh]hLhttps://forge.rust-lang.org/infra/other-installation-methods.html#standalone}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1j(hjubah}(h]h ]h"]h$]h&]uh1hhhhK3hjubah}(h]h ]h"]h$]h&]uh1jhhhK3hjhhubeh}(h]rustcah ]h"]rustcah$]h&]uh1jVhjyhhhhhK#ubjW)}(hhh](j\)}(hRust标准库源代码h]hRust标准库源代码}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhhhhhK7ubh)}(hdRust标准库的源代码是必需的,因为构建系统会交叉编译 ``core`` 和 ``alloc`` 。h](hJRust标准库的源代码是必需的,因为构建系统会交叉编译 }(hjhhhNhNubj)}(h``core``h]hcore}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 和 }(hjhhhNhNubj)}(h ``alloc``h]halloc}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK9hjhhubh)}(h,如果正在使用 ``rustup`` ,请运行::h](h如果正在使用 }(hjJhhhNhNubj)}(h ``rustup``h]hrustup}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh ,请运行:}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK;hjhhubj)}(hrustup component add rust-srch]hrustup component add rust-src}hjjsbah}(h]h ]h"]h$]h&]hhuh1jhhhK=hjhhubh)}(hg这些组件是按工具链安装的,因此以后升级Rust编译器版本需要重新添加组件。h]hg这些组件是按工具链安装的,因此以后升级Rust编译器版本需要重新添加组件。}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK?hjhhubh)}(hl否则,如果使用独立的安装程序,可以将Rust源码树下载到安装工具链的文件夹中::h]hk否则,如果使用独立的安装程序,可以将Rust源码树下载到安装工具链的文件夹中:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKAhjhhubj)}(hcurl -L "https://static.rust-lang.org/dist/rust-src-$(scripts/min-tool-version.sh rustc).tar.gz" | tar -xzf - -C "$(rustc --print sysroot)/lib" \ "rust-src-$(scripts/min-tool-version.sh rustc)/rust-src/lib/" \ --strip-components=3h]hcurl -L "https://static.rust-lang.org/dist/rust-src-$(scripts/min-tool-version.sh rustc).tar.gz" | tar -xzf - -C "$(rustc --print sysroot)/lib" \ "rust-src-$(scripts/min-tool-version.sh rustc)/rust-src/lib/" \ --strip-components=3}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKChjhhubh)}(h在这种情况下,以后升级Rust编译器版本需要手动更新这个源代码树(这可以通过移除 ``$(rustc --print sysroot)/lib/rustlib/src/rust`` ,然后重新执行上 面的命令做到)。h](hq在这种情况下,以后升级Rust编译器版本需要手动更新这个源代码树(这可以通过移除 }(hjhhhNhNubj)}(h1``$(rustc --print sysroot)/lib/rustlib/src/rust``h]h-$(rustc --print sysroot)/lib/rustlib/src/rust}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 ,然后重新执行上 面的命令做到)。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKHhjhhubeh}(h]rustah ]h"]rust标准库源代码ah$]h&]uh1jVhjyhhhhhK7ubjW)}(hhh](j\)}(hlibclangh]hlibclang}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhhhhhKNubh)}(h``bindgen`` 使用 ``libclang`` (LLVM的一部分)来理解内核中的C代码,这意味着需要安 装LLVM;同在开启``LLVM=1`` 时编译内核一样。h](j)}(h ``bindgen``h]hbindgen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 使用 }(hjhhhNhNubj)}(h ``libclang``h]hlibclang}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh (LLVM的一部分)来理解内核中的C代码,这意味着需要安 装LLVM;同在开启``LLVM=1`` 时编译内核一样。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKPhjhhubh)}(hJLinux发行版中可能会有合适的包,所以最好先检查一下。h]hJLinux发行版中可能会有合适的包,所以最好先检查一下。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKShjhhubh)}(hN适用于部分系统和架构的二进制文件也可到以下网址下载:h]hN适用于部分系统和架构的二进制文件也可到以下网址下载:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKUhjhhubj)}(h(https://releases.llvm.org/download.html h]h)}(h'https://releases.llvm.org/download.htmlh]j))}(hj+h]h'https://releases.llvm.org/download.html}(hj-hhhNhNubah}(h]h ]h"]h$]h&]refurij+uh1j(hj)ubah}(h]h ]h"]h$]h&]uh1hhhhKWhj%ubah}(h]h ]h"]h$]h&]uh1jhhhKWhjhhubh)}(h[或者自行构建LLVM,这需要相当长的时间,但并不是一个复杂的过程:h]h[或者自行构建LLVM,这需要相当长的时间,但并不是一个复杂的过程:}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKYhjhhubj)}(hThttps://llvm.org/docs/GettingStarted.html#getting-the-source-code-and-building-llvm h]h)}(hShttps://llvm.org/docs/GettingStarted.html#getting-the-source-code-and-building-llvmh]j))}(hj[h]hShttps://llvm.org/docs/GettingStarted.html#getting-the-source-code-and-building-llvm}(hj]hhhNhNubah}(h]h ]h"]h$]h&]refurij[uh1j(hjYubah}(h]h ]h"]h$]h&]uh1hhhhK[hjUubah}(h]h ]h"]h$]h&]uh1jhhhK[hjhhubh)}(hz请参阅 Documentation/kbuild/llvm.rst 了解更多信息,以及获取预构建版本和发行包 的进一步方法。h]hz请参阅 Documentation/kbuild/llvm.rst 了解更多信息,以及获取预构建版本和发行包 的进一步方法。}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK]hjhhubeh}(h]libclangah ]h"]libclangah$]h&]uh1jVhjyhhhhhKNubjW)}(hhh](j\)}(hbindgenh]hbindgen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhhhhhKbubh)}(hb内核的C端绑定是在构建时使用 ``bindgen`` 工具生成的。这需要特定的版本。h](h)内核的C端绑定是在构建时使用 }(hjhhhNhNubj)}(h ``bindgen``h]hbindgen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. 工具生成的。这需要特定的版本。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKdhjhhubh)}(hS通过以下方式安装它(注意,这将从源码下载并构建该工具)::h]hR通过以下方式安装它(注意,这将从源码下载并构建该工具):}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKfhjhhubj)}(hScargo install --locked --version $(scripts/min-tool-version.sh bindgen) bindgen-clih]hScargo install --locked --version $(scripts/min-tool-version.sh bindgen) bindgen-cli}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhhjhhubh)}(hX``bindgen`` 需要找到合适的 ``libclang`` 才能工作。如果没有找到(或者找到的 ``libclang`` 与应该使用的 ``libclang`` 不同),则可以使用 ``clang-sys`` 理解的环境变量(Rust绑定创建的 ``bindgen`` 用来访问 ``libclang``):h](j)}(h ``bindgen``h]hbindgen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 需要找到合适的 }(hjhhhNhNubj)}(h ``libclang``h]hlibclang}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh5 才能工作。如果没有找到(或者找到的 }(hjhhhNhNubj)}(h ``libclang``h]hlibclang}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 与应该使用的 }(hjhhhNhNubj)}(h ``libclang``h]hlibclang}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 不同),则可以使用 }(hjhhhNhNubj)}(h ``clang-sys``h]h clang-sys}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh- 理解的环境变量(Rust绑定创建的 }(hjhhhNhNubj)}(h ``bindgen``h]hbindgen}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 用来访问 }(hjhhhNhNubj)}(h ``libclang``h]hlibclang}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh):}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKjhjhhubh bullet_list)}(hhh](h list_item)}(hK``LLVM_CONFIG_PATH`` 可以指向一个 ``llvm-config`` 可执行文件。 h]h)}(hJ``LLVM_CONFIG_PATH`` 可以指向一个 ``llvm-config`` 可执行文件。h](j)}(h``LLVM_CONFIG_PATH``h]hLLVM_CONFIG_PATH}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh 可以指向一个 }(hjmhhhNhNubj)}(h``llvm-config``h]h llvm-config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh 可执行文件。}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKohjiubah}(h]h ]h"]h$]h&]uh1jghjdhhhhhNubjh)}(hU或者 ``LIBCLANG_PATH`` 可以指向 ``libclang`` 共享库或包含它的目录。 h]h)}(hT或者 ``LIBCLANG_PATH`` 可以指向 ``libclang`` 共享库或包含它的目录。h](h或者 }(hjhhhNhNubj)}(h``LIBCLANG_PATH``h]h LIBCLANG_PATH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 可以指向 }(hjhhhNhNubj)}(h ``libclang``h]hlibclang}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh" 共享库或包含它的目录。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKqhjubah}(h]h ]h"]h$]h&]uh1jghjdhhhhhNubjh)}(h@或者 ``CLANG_PATH`` 可以指向 ``clang`` 可执行文件。 h]h)}(h?或者 ``CLANG_PATH`` 可以指向 ``clang`` 可执行文件。h](h或者 }(hjhhhNhNubj)}(h``CLANG_PATH``h]h CLANG_PATH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 可以指向 }(hjhhhNhNubj)}(h ``clang``h]hclang}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 可执行文件。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKshjubah}(h]h ]h"]h$]h&]uh1jghjdhhhhhNubeh}(h]h ]h"]h$]h&]bullet*uh1jbhhhKohjhhubh)}(h(详情请参阅 ``clang-sys`` 的文档:h](h详情请参阅 }(hj!hhhNhNubj)}(h ``clang-sys``h]h clang-sys}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh 的文档:}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKuhjhhubeh}(h]bindgenah ]h"]bindgenah$]h&]uh1jVhjyhhhhhKbubeh}(h]id2ah ]h"] 构建依赖ah$]h&]uh1jVhjXhhhhhKubjW)}(hhh](j\)}(h 开发依赖h]h 开发依赖}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjQhhhhhKyubh)}(hl本节解释了如何获取开发所需的工具。也就是说,在构建内核时不需要这些工具。h]hl本节解释了如何获取开发所需的工具。也就是说,在构建内核时不需要这些工具。}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK{hjQhhubjW)}(hhh](j\)}(hrustfmth]hrustfmt}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjphhhhhKubh)}(h``rustfmt`` 工具被用来自动格式化所有的Rust内核代码,包括生成的C绑定(详情请见 coding-guidelines.rst )。h](j)}(h ``rustfmt``h]hrustfmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh} 工具被用来自动格式化所有的Rust内核代码,包括生成的C绑定(详情请见 coding-guidelines.rst )。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjphhubh)}(h如果使用的是 ``rustup`` ,它的 ``默认`` 配置文件已经安装了这个工具,因此不需要做什么。 如果使用的是其他配置文件,可以手动安装该组件::h](h如果使用的是 }(hjhhhNhNubj)}(h ``rustup``h]hrustup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh ,它的 }(hjhhhNhNubj)}(h ``默认``h]h默认}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 配置文件已经安装了这个工具,因此不需要做什么。 如果使用的是其他配置文件,可以手动安装该组件:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjphhubj)}(hrustup component add rustfmth]hrustup component add rustfmt}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjphhubh)}(h.独立的安装程序也带有 ``rustfmt`` 。h](h独立的安装程序也带有 }(hjhhhNhNubj)}(h ``rustfmt``h]hrustfmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjphhubeh}(h]rustfmtah ]h"]rustfmtah$]h&]uh1jVhjQhhhhhKubjW)}(hhh](j\)}(hclippyh]hclippy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhhhhhKubh)}(h``clippy`` 是一个Rust linter。运行它可以为Rust代码提供额外的警告。它可以通过向 ``make`` 传递 ``CLIPPY=1`` 来运行(关于细节,详见 general-information.rst )。h](j)}(h ``clippy``h]hclippy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh_ 是一个Rust linter。运行它可以为Rust代码提供额外的警告。它可以通过向 }(hjhhhNhNubj)}(h``make``h]hmake}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 传递 }(hjhhhNhNubj)}(h ``CLIPPY=1``h]hCLIPPY=1}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhA 来运行(关于细节,详见 general-information.rst )。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h如果正在使用 ``rustup`` ,它的 ``默认`` 配置文件已经安装了这个工具,因此不需要做什么。 如果使用的是另一个配置文件,该组件可以被手动安装::h](h如果正在使用 }(hjVhhhNhNubj)}(h ``rustup``h]hrustup}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh ,它的 }(hjVhhhNhNubj)}(h ``默认``h]h默认}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh 配置文件已经安装了这个工具,因此不需要做什么。 如果使用的是另一个配置文件,该组件可以被手动安装:}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hrustup component add clippyh]hrustup component add clippy}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjhhubh)}(h-独立的安装程序也带有 ``clippy`` 。h](h独立的安装程序也带有 }(hjhhhNhNubj)}(h ``clippy``h]hclippy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]clippyah ]h"]clippyah$]h&]uh1jVhjQhhhhhKubjW)}(hhh](j\)}(hcargoh]hcargo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhhhhhKubh)}(h``cargo`` 是Rust的本地构建系统。目前需要它来运行测试,因为它被用来构建一个自定义的标准 库,其中包含了内核中自定义 ``alloc`` 所提供的设施。测试可以使用 ``rusttest`` Make 目标 来运行。h](j)}(h ``cargo``h]hcargo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 是Rust的本地构建系统。目前需要它来运行测试,因为它被用来构建一个自定义的标准 库,其中包含了内核中自定义 }(hjhhhNhNubj)}(h ``alloc``h]halloc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) 所提供的设施。测试可以使用 }(hjhhhNhNubj)}(h ``rusttest``h]hrusttest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh Make 目标 来运行。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hr如果使用的是 ``rustup`` ,所有的配置文件都已经安装了该工具,因此不需要再做什么。h](h如果使用的是 }(hjhhhNhNubj)}(h ``rustup``h]hrustup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhU ,所有的配置文件都已经安装了该工具,因此不需要再做什么。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h,独立的安装程序也带有 ``cargo`` 。h](h独立的安装程序也带有 }(hj/hhhNhNubj)}(h ``cargo``h]hcargo}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh 。}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]cargoah ]h"]cargoah$]h&]uh1jVhjQhhhhhKubjW)}(hhh](j\)}(hrustdoch]hrustdoc}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjWhhhhhKubh)}(h|``rustdoc`` 是Rust的文档工具。它为Rust代码生成漂亮的HTML文档(详情请见 general-information.rst )。h](j)}(h ``rustdoc``h]hrustdoc}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubhq 是Rust的文档工具。它为Rust代码生成漂亮的HTML文档(详情请见 general-information.rst )。}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjWhhubh)}(h``rustdoc`` 也被用来测试文档化的Rust代码中提供的例子(称为doctests或文档测试)。 ``rusttest`` 是本功能的Make目标。h](j)}(h ``rustdoc``h]hrustdoc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhb 也被用来测试文档化的Rust代码中提供的例子(称为doctests或文档测试)。 }(hjhhhNhNubj)}(h ``rusttest``h]hrusttest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 是本功能的Make目标。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjWhhubh)}(hr如果使用的是 ``rustup`` ,所有的配置文件都已经安装了这个工具,因此不需要做什么。h](h如果使用的是 }(hjhhhNhNubj)}(h ``rustup``h]hrustup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhU ,所有的配置文件都已经安装了这个工具,因此不需要做什么。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjWhhubh)}(h.独立的安装程序也带有 ``rustdoc`` 。h](h独立的安装程序也带有 }(hjhhhNhNubj)}(h ``rustdoc``h]hrustdoc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjWhhubeh}(h]rustdocah ]h"]rustdocah$]h&]uh1jVhjQhhhhhKubjW)}(hhh](j\)}(h rust-analyzerh]h rust-analyzer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhhhhhKubh)}(h`rust-analyzer `_ 语言服务器可以和许多编辑器 一起使用,以实现语法高亮、补全、转到定义和其他功能。h](j))}(h3`rust-analyzer `_h]h rust-analyzer}(hj hhhNhNubah}(h]h ]h"]h$]h&]name rust-analyzerrefuri https://rust-analyzer.github.io/uh1j(hj ubhtarget)}(h# h]h}(h]id4ah ]h"] rust-analyzerah$]h&]refurij uh1j! referencedKhj ubhw 语言服务器可以和许多编辑器 一起使用,以实现语法高亮、补全、转到定义和其他功能。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hw``rust-analyzer`` 需要一个配置文件, ``rust-project.json``, 它可以由 ``rust-analyzer`` Make 目标生成::h](j)}(h``rust-analyzer``h]h rust-analyzer}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj; ubh 需要一个配置文件, }(hj; hhhNhNubj)}(h``rust-project.json``h]hrust-project.json}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj; ubh, 它可以由 }(hj; hhhNhNubj)}(h``rust-analyzer``h]h rust-analyzer}(hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj; ubh Make 目标生成:}(hj; hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hmake LLVM=1 rust-analyzerh]hmake LLVM=1 rust-analyzer}hj{ sbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjhhubeh}(h] rust-analyzerah ]h"]h$]j, ah&]uh1jVhjQhhhhhKj0 Kubeh}(h]id3ah ]h"] 开发依赖ah$]h&]uh1jVhjXhhhhhKyubjW)}(hhh](j\)}(h配置h]h配置}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj hhhhhKubh)}(hRust支持(CONFIG_RUST)需要在 ``General setup`` 菜单中启用。在其他要求得到满足的情 况下,该选项只有在找到合适的Rust工具链时才会显示(见上文)。相应的,这将使依赖Rust的其 他选项可见。h](h%Rust支持(CONFIG_RUST)需要在 }(hj hhhNhNubj)}(h``General setup``h]h General setup}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh 菜单中启用。在其他要求得到满足的情 况下,该选项只有在找到合适的Rust工具链时才会显示(见上文)。相应的,这将使依赖Rust的其 他选项可见。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(h之后,进入::h]h之后,进入:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubj)}(h@Kernel hacking -> Sample kernel code -> Rust samplesh]h@Kernel hacking -> Sample kernel code -> Rust samples}hj sbah}(h]h ]h"]h$]h&]hhuh1jhhhKhj hhubh)}(h3并启用一些内置或可加载的样例模块。h]h3并启用一些内置或可加载的样例模块。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]id5ah ]h"]配置ah$]h&]uh1jVhjXhhhhhKubjW)}(hhh](j\)}(h构建h]h构建}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj hhhhhKubh)}(hK用完整的LLVM工具链构建内核是目前支持的最佳设置。即::h]hJ用完整的LLVM工具链构建内核是目前支持的最佳设置。即:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubj)}(h make LLVM=1h]h make LLVM=1}hj sbah}(h]h ]h"]h$]h&]hhuh1jhhhKhj hhubh)}(hN使用GCC对某些配置也是可行的,但目前它是非常试验性的。h]hN使用GCC对某些配置也是可行的,但目前它是非常试验性的。}(hj( hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]id6ah ]h"]构建ah$]h&]uh1jVhjXhhhhhKubjW)}(hhh](j\)}(h折腾h]h折腾}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj> hhhhhKubh)}(h要想深入了解,请看 ``samples/rust/`` 下的样例源代码、 ``rust/`` 下的Rust支持代码和 ``Kernel hacking`` 下的 ``Rust hacking`` 菜单。h](h要想深入了解,请看 }(hjO hhhNhNubj)}(h``samples/rust/``h]h samples/rust/}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO ubh 下的样例源代码、 }(hjO hhhNhNubj)}(h ``rust/``h]hrust/}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO ubh 下的Rust支持代码和 }(hjO hhhNhNubj)}(h``Kernel hacking``h]hKernel hacking}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO ubh 下的 }(hjO hhhNhNubj)}(h``Rust hacking``h]h Rust hacking}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO ubh 菜单。}(hjO hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj> hhubh)}(h如果使用的是GDB/Binutils,而Rust符号没有被demangled,原因是工具链还不支持Rust的新v0 mangling方案。有几个办法可以解决:h]h如果使用的是GDB/Binutils,而Rust符号没有被demangled,原因是工具链还不支持Rust的新v0 mangling方案。有几个办法可以解决:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj> hhubj)}(h- 安装一个较新的版本(GDB >= 10.2, Binutils >= 2.36)。 - 一些版本的GDB(例如vanilla GDB 10.1)能够使用嵌入在调试信息(``CONFIG_DEBUG_INFO``) 中的pre-demangled的名字。h]jc)}(hhh](jh)}(hB安装一个较新的版本(GDB >= 10.2, Binutils >= 2.36)。 h]h)}(hA安装一个较新的版本(GDB >= 10.2, Binutils >= 2.36)。h]hA安装一个较新的版本(GDB >= 10.2, Binutils >= 2.36)。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jghj ubjh)}(h一些版本的GDB(例如vanilla GDB 10.1)能够使用嵌入在调试信息(``CONFIG_DEBUG_INFO``) 中的pre-demangled的名字。h]h)}(h一些版本的GDB(例如vanilla GDB 10.1)能够使用嵌入在调试信息(``CONFIG_DEBUG_INFO``) 中的pre-demangled的名字。h](hP一些版本的GDB(例如vanilla GDB 10.1)能够使用嵌入在调试信息(}(hj hhhNhNubj)}(h``CONFIG_DEBUG_INFO``h]hCONFIG_DEBUG_INFO}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh!) 中的pre-demangled的名字。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jghj ubeh}(h]h ]h"]h$]h&]j-uh1jbhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhhhKhj> hhubeh}(h]id7ah ]h"]折腾ah$]h&]uh1jVhjXhhhhhKubeh}(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 jNjKjjjjjjjFjCj j jjjjjTjQjj rust-analyzerj) j j j; j8 j j u nametypes}(j jNjjjjFj jjjTjj j j; j uh}(j jXjKjyjjjjjjjCjj jQjjpjjjQjjjWj jj) j# j j j8 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}jJ KsRparse_messages]hsystem_message)}(hhh]h)}(h0Duplicate implicit target name: "rust-analyzer".h]h4Duplicate implicit target name: “rust-analyzer”.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]j) alevelKtypeINFOsourcehlineK uh1j hjhhhhhKubatransform_messages] transformerN include_log]5Documentation/translations/zh_CN/rust/quick-start.rst(NNNNta decorationNhhub.