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