162306a36Sopenharmony_ci.. SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci.. include:: ../disclaimer-zh_CN.rst
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci:Original: Documentation/doc-guide/parse-headers.rst
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci:译者: 吴想成 Wu XiangCheng <bobwxc@email.cn>
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci=====================
1062306a36Sopenharmony_ci包含用户空间API头文件
1162306a36Sopenharmony_ci=====================
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci有时,为了描述用户空间API并在代码和文档之间生成交叉引用,需要包含头文件和示例
1462306a36Sopenharmony_ciC代码。为用户空间API文件添加交叉引用还有一个好处:如果在文档中找不到相应符号,
1562306a36Sopenharmony_ciSphinx将生成警告。这有助于保持用户空间API文档与内核更改同步。
1662306a36Sopenharmony_ci:ref:`parse_headers.pl <parse_headers_zh>` 提供了生成此类交叉引用的一种方法。
1762306a36Sopenharmony_ci在构建文档时,必须通过Makefile调用它。有关如何在内核树中使用它的示例,请参阅
1862306a36Sopenharmony_ci``Documentation/userspace-api/media/Makefile`` 。
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci.. _parse_headers_zh:
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ciparse_headers.pl
2362306a36Sopenharmony_ci----------------
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci脚本名称
2662306a36Sopenharmony_ci~~~~~~~~
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ciparse_headers.pl——解析一个C文件,识别函数、结构体、枚举、定义并对Sphinx文档
3062306a36Sopenharmony_ci创建交叉引用。
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci用法概要
3462306a36Sopenharmony_ci~~~~~~~~
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci\ **parse_headers.pl**\  [<选项>] <C文件> <输出文件> [<例外文件>]
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci<选项> 可以是: --debug, --help 或 --usage 。
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci选项
4362306a36Sopenharmony_ci~~~~
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci\ **--debug**\
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci 开启脚本详细模式,在调试时很有用。
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci\ **--usage**\
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci 打印简短的帮助信息并退出。
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci\ **--help**\
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci 打印更详细的帮助信息并退出。
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci说明
6462306a36Sopenharmony_ci~~~~
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci通过C头文件或源文件(<C文件>)中为描述API的文档编写的带交叉引用的 ..预格式化
6762306a36Sopenharmony_ci文本 块将文件转换成重构文本(RST)。它接受一个可选的<例外文件>,其中描述了
6862306a36Sopenharmony_ci哪些元素将被忽略或指向非默认引用。
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci输出被写入到<输出文件>。
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci它能够识别定义、函数、结构体、typedef、枚举和枚举符号,并为它们创建交叉引用。
7362306a36Sopenharmony_ci它还能够区分用于指定Linux ioctl的 ``#define`` 。
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ci<例外文件> 包含两种类型的语句: \ **ignore**\  或 \ **replace**\ .
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ciignore标记的语法为:
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ciignore \ **type**\  \ **name**\
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ciThe \ **ignore**\  意味着它不会为类型为 \ **type**\ 的 \ **name**\ 符号生成
8362306a36Sopenharmony_ci交叉引用。
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_cireplace标记的语法为:
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_cireplace \ **type**\  \ **name**\  \ **new_value**\
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ciThe \ **replace**\  味着它将为 \ **type**\ 类型的 \ **name**\ 符号生成交叉引
9262306a36Sopenharmony_ci用,但是它将使用 \ **new_value**\ 来取代默认的替换规则。
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci这两种语句中, \ **type**\ 可以是以下任一项:
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci\ **ioctl**\
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ci ignore 或 replace 语句应用于ioctl定义,如:
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci #define	VIDIOC_DBG_S_REGISTER 	 _IOW('V', 79, struct v4l2_dbg_register)
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ci
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ci\ **define**\
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci ignore 或 replace 语句应用于在<C文件>中找到的任何其他 ``#define`` 。
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ci\ **typedef**\
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci ignore 和 replace 语句应用于<C文件>中的typedef语句。
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ci
11862306a36Sopenharmony_ci\ **struct**\
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_ci ignore 和 replace 语句应用于<C文件>中的结构体名称语句。
12162306a36Sopenharmony_ci
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ci
12462306a36Sopenharmony_ci\ **enum**\
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ci ignore 和 replace 语句应用于<C文件>中的枚举名称语句。
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ci\ **symbol**\
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ci ignore 和 replace 语句应用于<C文件>中的枚举值名称语句。
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci replace语句中, \ **new_value**\  会自动使用 \ **typedef**\ , \ **enum**\
13562306a36Sopenharmony_ci 和 \ **struct**\ 类型的 :c:type: 引用;以及 \ **ioctl**\ , \ **define**\  和
13662306a36Sopenharmony_ci \ **symbol**\ 类型的  :ref: 。引用的类型也可以在replace语句中显式定义。
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_ci示例
14062306a36Sopenharmony_ci~~~~
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ci
14362306a36Sopenharmony_ciignore define _VIDEODEV2_H
14462306a36Sopenharmony_ci
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ci忽略<C文件>中的 #define _VIDEODEV2_H 。
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_ciignore symbol PRIVATE
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_ci如下结构体:
15262306a36Sopenharmony_ci
15362306a36Sopenharmony_cienum foo { BAR1, BAR2, PRIVATE };
15462306a36Sopenharmony_ci
15562306a36Sopenharmony_ci不会为 \ **PRIVATE**\ 生成交叉引用。
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_cireplace symbol BAR1 :c:type:\`foo\`
15862306a36Sopenharmony_cireplace symbol BAR2 :c:type:\`foo\`
15962306a36Sopenharmony_ci
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_ci如下结构体:
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_cienum foo { BAR1, BAR2, PRIVATE };
16462306a36Sopenharmony_ci
16562306a36Sopenharmony_ci它会让BAR1和BAR2枚举符号交叉引用C域中的foo符号。
16662306a36Sopenharmony_ci
16762306a36Sopenharmony_ci
16862306a36Sopenharmony_ci
16962306a36Sopenharmony_ci缺陷
17062306a36Sopenharmony_ci~~~~
17162306a36Sopenharmony_ci
17262306a36Sopenharmony_ci
17362306a36Sopenharmony_ci请向Mauro Carvalho Chehab <mchehab@kernel.org>报告有关缺陷。
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ci中文翻译问题请找中文翻译维护者。
17662306a36Sopenharmony_ci
17762306a36Sopenharmony_ci
17862306a36Sopenharmony_ci版权
17962306a36Sopenharmony_ci~~~~
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ci
18262306a36Sopenharmony_ci版权所有 (c) 2016 Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_ci许可证 GPLv2:GNU GPL version 2 <https://gnu.org/licenses/gpl.html>
18562306a36Sopenharmony_ci
18662306a36Sopenharmony_ci这是自由软件:你可以自由地修改和重新发布它。
18762306a36Sopenharmony_ci在法律允许的范围内,**不提供任何保证**。
188