0001 .. SPDX-License-Identifier: GPL-2.0
0002
0003 .. include:: ../disclaimer-zh_CN.rst
0004
0005 :Original: Documentation/doc-guide/parse-headers.rst
0006
0007 :译者: 吴想成 Wu XiangCheng <bobwxc@email.cn>
0008
0009 =====================
0010 包含用户空间API头文件
0011 =====================
0012
0013 有时,为了描述用户空间API并在代码和文档之间生成交叉引用,需要包含头文件和示例
0014 C代码。为用户空间API文件添加交叉引用还有一个好处:如果在文档中找不到相应符号,
0015 Sphinx将生成警告。这有助于保持用户空间API文档与内核更改同步。
0016 :ref:`parse_headers.pl <parse_headers_zh>` 提供了生成此类交叉引用的一种方法。
0017 在构建文档时,必须通过Makefile调用它。有关如何在内核树中使用它的示例,请参阅
0018 ``Documentation/userspace-api/media/Makefile`` 。
0019
0020 .. _parse_headers_zh:
0021
0022 parse_headers.pl
0023 ----------------
0024
0025 脚本名称
0026 ~~~~~~~~
0027
0028
0029 parse_headers.pl——解析一个C文件,识别函数、结构体、枚举、定义并对Sphinx文档
0030 创建交叉引用。
0031
0032
0033 用法概要
0034 ~~~~~~~~
0035
0036
0037 \ **parse_headers.pl**\ [<选项>] <C文件> <输出文件> [<例外文件>]
0038
0039 <选项> 可以是: --debug, --help 或 --usage 。
0040
0041
0042 选项
0043 ~~~~
0044
0045
0046
0047 \ **--debug**\
0048
0049 开启脚本详细模式,在调试时很有用。
0050
0051
0052 \ **--usage**\
0053
0054 打印简短的帮助信息并退出。
0055
0056
0057
0058 \ **--help**\
0059
0060 打印更详细的帮助信息并退出。
0061
0062
0063 说明
0064 ~~~~
0065
0066 通过C头文件或源文件(<C文件>)中为描述API的文档编写的带交叉引用的 ..预格式化
0067 文本 块将文件转换成重构文本(RST)。它接受一个可选的<例外文件>,其中描述了
0068 哪些元素将被忽略或指向非默认引用。
0069
0070 输出被写入到<输出文件>。
0071
0072 它能够识别定义、函数、结构体、typedef、枚举和枚举符号,并为它们创建交叉引用。
0073 它还能够区分用于指定Linux ioctl的 ``#define`` 。
0074
0075 <例外文件> 包含两种类型的语句: \ **ignore**\ 或 \ **replace**\ .
0076
0077 ignore标记的语法为:
0078
0079
0080 ignore \ **type**\ \ **name**\
0081
0082 The \ **ignore**\ 意味着它不会为类型为 \ **type**\ 的 \ **name**\ 符号生成
0083 交叉引用。
0084
0085
0086 replace标记的语法为:
0087
0088
0089 replace \ **type**\ \ **name**\ \ **new_value**\
0090
0091 The \ **replace**\ 味着它将为 \ **type**\ 类型的 \ **name**\ 符号生成交叉引
0092 用,但是它将使用 \ **new_value**\ 来取代默认的替换规则。
0093
0094
0095 这两种语句中, \ **type**\ 可以是以下任一项:
0096
0097
0098 \ **ioctl**\
0099
0100 ignore 或 replace 语句应用于ioctl定义,如:
0101
0102 #define VIDIOC_DBG_S_REGISTER _IOW('V', 79, struct v4l2_dbg_register)
0103
0104
0105
0106 \ **define**\
0107
0108 ignore 或 replace 语句应用于在<C文件>中找到的任何其他 ``#define`` 。
0109
0110
0111
0112 \ **typedef**\
0113
0114 ignore 和 replace 语句应用于<C文件>中的typedef语句。
0115
0116
0117
0118 \ **struct**\
0119
0120 ignore 和 replace 语句应用于<C文件>中的结构体名称语句。
0121
0122
0123
0124 \ **enum**\
0125
0126 ignore 和 replace 语句应用于<C文件>中的枚举名称语句。
0127
0128
0129
0130 \ **symbol**\
0131
0132 ignore 和 replace 语句应用于<C文件>中的枚举值名称语句。
0133
0134 replace语句中, \ **new_value**\ 会自动使用 \ **typedef**\ , \ **enum**\
0135 和 \ **struct**\ 类型的 :c:type: 引用;以及 \ **ioctl**\ , \ **define**\ 和
0136 \ **symbol**\ 类型的 :ref: 。引用的类型也可以在replace语句中显式定义。
0137
0138
0139 示例
0140 ~~~~
0141
0142
0143 ignore define _VIDEODEV2_H
0144
0145
0146 忽略<C文件>中的 #define _VIDEODEV2_H 。
0147
0148 ignore symbol PRIVATE
0149
0150
0151 如下结构体:
0152
0153 enum foo { BAR1, BAR2, PRIVATE };
0154
0155 不会为 \ **PRIVATE**\ 生成交叉引用。
0156
0157 replace symbol BAR1 :c:type:\`foo\`
0158 replace symbol BAR2 :c:type:\`foo\`
0159
0160
0161 如下结构体:
0162
0163 enum foo { BAR1, BAR2, PRIVATE };
0164
0165 它会让BAR1和BAR2枚举符号交叉引用C域中的foo符号。
0166
0167
0168
0169 缺陷
0170 ~~~~
0171
0172
0173 请向Mauro Carvalho Chehab <mchehab@kernel.org>报告有关缺陷。
0174
0175 中文翻译问题请找中文翻译维护者。
0176
0177
0178 版权
0179 ~~~~
0180
0181
0182 版权所有 (c) 2016 Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
0183
0184 许可证 GPLv2:GNU GPL version 2 <https://gnu.org/licenses/gpl.html>
0185
0186 这是自由软件:你可以自由地修改和重新发布它。
0187 在法律允许的范围内,**不提供任何保证**。