Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / Documentation / translations / zh_CN / rust / general-information.rst
blob251f6ee2bb443532d48e4681bec6959bfdb67f80
1 .. SPDX-License-Identifier: GPL-2.0
2 .. include:: ../disclaimer-zh_CN.rst
4 :Original: Documentation/rust/general-information.rst
6 :翻译:
8  司延腾 Yanteng Si <siyanteng@loongson.cn>
11 基本信息
12 ========
14 本文档包含了在内核中使用Rust支持时需要了解的有用信息。
17 代码文档
18 --------
20 Rust内核代码使用其内置的文档生成器 ``rustdoc`` 进行记录。
22 生成的HTML文档包括集成搜索、链接项(如类型、函数、常量)、源代码等。它们可以在以下地址阅读
23 (TODO:当在主线中时链接,与其他文档一起生成):
25         http://kernel.org/
27 这些文档也可以很容易地在本地生成和阅读。这相当快(与编译代码本身的顺序相同),而且不需要特
28 殊的工具或环境。这有一个额外的好处,那就是它们将根据所使用的特定内核配置进行定制。要生成它
29 们,请使用 ``rustdoc`` 目标,并使用编译时使用的相同调用,例如::
31         make LLVM=1 rustdoc
33 要在你的网络浏览器中本地阅读该文档,请运行如::
35         xdg-open Documentation/output/rust/rustdoc/kernel/index.html
37 要了解如何编写文档,请看 coding-guidelines.rst 。
40 额外的lints
41 -----------
43 虽然 ``rustc`` 是一个非常有用的编译器,但一些额外的lints和分析可以通过 ``clippy``
44 (一个Rust linter)来实现。要启用它,请将CLIPPY=1传递到用于编译的同一调用中,例如::
46         make LLVM=1 CLIPPY=1
48 请注意,Clippy可能会改变代码生成,因此在构建产品内核时不应该启用它。
50 抽象和绑定
51 ----------
53 抽象是用Rust代码包装来自C端的内核功能。
55 为了使用来自C端的函数和类型,需要创建绑定。绑定是Rust对那些来自C端的函数和类型的声明。
57 例如,人们可以在Rust中写一个 ``Mutex`` 抽象,它从C端包装一个 ``Mutex结构体`` ,并
58 通过绑定调用其函数。
60 抽象并不能用于所有的内核内部API和概念,但随着时间的推移,我们打算扩大覆盖范围。“Leaf”
61 模块(例如,驱动程序)不应该直接使用C语言的绑定。相反,子系统应该根据需要提供尽可能安
62 全的抽象。
65 有条件的编译
66 ------------
68 Rust代码可以访问基于内核配置的条件性编译:
70 .. code-block:: rust
72         #[cfg(CONFIG_X)]       // Enabled               (`y` or `m`)
73         #[cfg(CONFIG_X="y")]   // Enabled as a built-in (`y`)
74         #[cfg(CONFIG_X="m")]   // Enabled as a module   (`m`)
75         #[cfg(not(CONFIG_X))]  // Disabled