包含 uAPI 头文件¶
有时,包含头文件和 C 示例代码来描述用户空间 API 以及在代码和文档之间生成交叉引用是很有用的。为用户空间 API 文件添加交叉引用还有一个额外的好处:如果在文档中找不到符号,Sphinx 将生成警告。这有助于使 uAPI 文档与内核更改保持同步。parse_headers.pl 提供了一种生成此类交叉引用的方法。它必须在构建文档时通过 Makefile 调用。请参阅 Documentation/userspace-api/media/Makefile
,了解如何在内核树中使用它的示例。
parse_headers.pl¶
名称¶
parse_headers.pl - 解析 C 文件,以识别函数、结构体、枚举和定义,并创建到 Sphinx 书籍的交叉引用。
概要¶
parse_headers.pl [<选项>] <C_FILE> <OUT_FILE> [<EXCEPTIONS_FILE>]
其中 <选项> 可以是:--debug、--help 或 --usage。
选项¶
--debug
将脚本置于详细模式,用于调试。
--usage
打印简短的帮助消息并退出。
--help
打印更详细的帮助消息并退出。
描述¶
将 C 头文件或源文件 (C_FILE) 转换为 reStructuredText,通过 ..parsed-literal 块包含,并带有描述 API 的文档文件的交叉引用。它接受一个可选的 EXCEPTIONS_FILE,其中描述了哪些元素将被忽略或指向非默认引用。
输出写入 (OUT_FILE)。
它能够识别定义、函数、结构体、类型定义、枚举和枚举符号,并为所有这些创建交叉引用。它还能够区分用于指定 Linux ioctl 的 #define。
EXCEPTIONS_FILE 包含两种类型的语句:ignore 或 replace。
ignore 标签的语法是
ignore type name
ignore 表示它不会为 type 类型的 name 符号生成交叉引用。
replace 标签的语法是
replace type name new_value
replace 表示它将为 type 类型的 name 符号生成交叉引用,但是,它将使用 new_value,而不是使用默认的替换规则。
对于这两个语句,type 可以是以下之一
ioctl
ignore 或 replace 语句将应用于类似以下的 ioctl 定义
#define VIDIOC_DBG_S_REGISTER _IOW('V', 79, struct v4l2_dbg_register)
define
ignore 或 replace 语句将应用于在 C_FILE 中找到的任何其他 #define。
typedef
ignore 或 replace 语句将应用于 C_FILE 中的类型定义语句。
struct
ignore 或 replace 语句将应用于 C_FILE 中结构体语句的名称。
enum
ignore 或 replace 语句将应用于 C_FILE 中枚举语句的名称。
symbol
ignore 或 replace 语句将应用于 C_FILE 中枚举值的名称。
对于 replace 语句,new_value 将自动为 typedef、enum 和 struct 类型使用 :c:type: 引用。它将为 ioctl、define 和 symbol 类型使用 :ref:。引用的类型也可以在 replace 语句中显式定义。
示例¶
ignore define _VIDEODEV2_H
忽略 C_FILE 中的 #define _VIDEODEV2_H。
ignore symbol PRIVATE
在类似以下的结构体中
enum foo { BAR1, BAR2, PRIVATE };
它不会为 PRIVATE 生成交叉引用。
replace symbol BAR1 :c:type:`foo` replace symbol BAR2 :c:type:`foo`
在类似以下的结构体中
enum foo { BAR1, BAR2, PRIVATE };
它将使 BAR1 和 BAR2 枚举符号交叉引用 C 域中的 foo 符号。
错误¶
向 Mauro Carvalho Chehab <mchehab@kernel.org> 报告错误
版权¶
Copyright (c) 2016 by Mauro Carvalho Chehab <mchehab+samsung@kernel.org>。
许可证 GPLv2: GNU GPL 版本 2 <https://gnu.org/licenses/gpl.html>。
这是自由软件:您可以自由更改和重新分发它。在法律允许的范围内,不提供任何担保。