GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing docs.kernel.org — Kernel-doc comments — The Linux Kernel documentation
English
Writing kernel-doc comments¶The Linux kernel source files may contain structured documentation comments in the kernel-doc format to describe the functions, types and design of the code. It is easier to keep documentation up-to-date when it is embedded in source files. Note The kernel-doc format is deceptively similar to javadoc, gtk-doc or Doxygen, yet distinctively different, for historical reasons. The kernel source contains tens of thousands of kernel-doc comments. Please stick to the style described here. Note kernel-doc does not cover Rust code: please see General Information instead. The kernel-doc structure is extracted from the comments, and proper Sphinx C Domain function and type descriptions with anchors are generated from them. The descriptions are filtered for special kernel-doc highlights and cross-references. See below for details. Every function that is exported to loadable modules using
It is good practice to also provide kernel-doc formatted documentation
for functions externally visible to other kernel files (not marked
How to format kernel-doc comments¶The opening comment mark The function and type kernel-doc comments should be placed just before the function or type being described in order to maximise the chance that somebody changing the code will also change the documentation. The overview kernel-doc comments may be placed anywhere at the top indentation level. Running the tools/docs/kernel-doc -v -none drivers/foo/bar.c The documentation format of make W=n However, the above command does not verify header files. These should be checked
separately using Function documentation¶The general format of a function and function-like macro kernel-doc comment is: /** * function_name() - Brief description of function. * @arg1: Describe the first argument. * @arg2: Describe the second argument. * One can provide multiple line descriptions * for arguments. * * A longer description, with more discussion of the function function_name() * that might be useful to those using or modifying it. Begins with an * empty comment line, and may include additional embedded empty * comment lines. * * The longer description may have multiple paragraphs. * * Context: Describes whether the function can sleep, what locks it takes, * releases, or expects to be held. It can extend over multiple * lines. * Return: Describe the return value of function_name. * * The return value description can also have multiple paragraphs, and should * be placed at the end of the comment block. */ The brief description following the function name may span multiple lines, and ends with an argument description, a blank comment line, or the end of the comment block. Function parameters¶Each function argument should be described in order, immediately following the short function description. Do not leave a blank line between the function description and the arguments, nor between the arguments. Each Note If the * @argument: some long description * that continues on next lines or: * @argument: * some long description * that continues on next lines If a function has a variable number of arguments, its description should be written in kernel-doc notation as: * @...: description Function context¶The context in which a function can be called should be described in a
section named Examples: * Context: Any context. * Context: Any context. Takes and releases the RCU lock. * Context: Any context. Expects <lock> to be held by caller. * Context: Process context. May sleep if @gfp flags permit. * Context: Process context. Takes and releases <mutex>. * Context: Softirq or process context. Takes and releases <lock>, BH-safe. * Context: Interrupt context. Return values¶The return value, if any, should be described in a dedicated section
named Note
Structure, union, and enumeration documentation¶The general format of a /** * struct struct_name - Brief description. * @member1: Description of member1. * @member2: Description of member2. * One can provide multiple line descriptions * for members. * * Description of the structure. */ You can replace the The brief description following the structure name may span multiple lines, and ends with a member description, a blank comment line, or the end of the comment block. Members¶Members of structs, unions and enums should be documented the same way as function parameters; they immediately succeed the short description and may be multi-line. Inside a The When Example: /**
* struct my_struct - short description
* @a: first member
* @b: second member
* @d: fourth member
*
* Longer description
*/
struct my_struct {
int a;
int b;
/* private: internal use only */
int c;
/* public: the next one is public */
int d;
};
Nested structs/unions¶It is possible to document nested structs and unions, like: /**
* struct nested_foobar - a struct with nested unions and structs
* @memb1: first member of anonymous union/anonymous struct
* @memb2: second member of anonymous union/anonymous struct
* @memb3: third member of anonymous union/anonymous struct
* @memb4: fourth member of anonymous union/anonymous struct
* @bar: non-anonymous union
* @bar.st1: struct st1 inside @bar
* @bar.st2: struct st2 inside @bar
* @bar.st1.memb1: first member of struct st1 on union bar
* @bar.st1.memb2: second member of struct st1 on union bar
* @bar.st2.memb1: first member of struct st2 on union bar
* @bar.st2.memb2: second member of struct st2 on union bar
*/
struct nested_foobar {
/* Anonymous union/struct*/
union {
struct {
int memb1;
/* private: hides memb2 from documentation */
int memb2;
};
/* Everything here is public again, as private scope finished */
struct {
void *memb3;
int memb4;
};
};
union {
struct {
int memb1;
int memb2;
} st1;
struct {
void *memb1;
int memb2;
} st2;
} bar;
};
Note
In-line member documentation comments¶The structure members may also be documented in-line within the definition.
There are two styles, single-line comments where both the opening /**
* struct foo - Brief description.
* @foo: The Foo member.
*/
struct foo {
int foo;
/**
* @bar: The Bar member.
*/
int bar;
/**
* @baz: The Baz member.
*
* Here, the member description may contain several paragraphs.
*/
int baz;
union {
/** @foobar: Single line description. */
int foobar;
};
/** @bar2: Description for struct @bar2 inside @foo */
struct {
/**
* @bar2.barbar: Description for @barbar inside @foo.bar2
*/
int barbar;
} bar2;
};
Typedef documentation¶The general format of a /** * typedef type_name - Brief description. * * Description of the type. */ Typedefs with function prototypes can also be documented: /** * typedef type_name - Brief description. * @arg1: description of arg1 * @arg2: description of arg2 * * Description of the type. * * Context: Locking context. * Returns: Meaning of the return value. */ typedef void (*type_name)(struct v4l2_ctrl *arg1, void *arg2); Variables documentation¶The general format of a kernel-doc variable comment is: /** * var var_name - Brief description. * * Description of the var_name variable. */ extern int var_name; Object-like macro documentation¶Object-like macros are distinct from function-like macros. They are differentiated by whether the macro name is immediately followed by a left parenthesis (‘(’) for function-like macros or not followed by one for object-like macros. Function-like macros are handled like functions by The general format of an object-like macro kernel-doc comment is: /** * define object_name - Brief description. * * Description of the object. */ Example: /** * define MAX_ERRNO - maximum errno value that is supported * * Kernel pointers have redundant information, so we can use a * scheme where we can return either an error code or a normal * pointer with the same return value. */ #define MAX_ERRNO 4095 Example: /**
* define DRM_GEM_VRAM_PLANE_HELPER_FUNCS - \
* Initializes struct drm_plane_helper_funcs for VRAM handling
*
* This macro initializes struct drm_plane_helper_funcs to use the
* respective helper functions.
*/
#define DRM_GEM_VRAM_PLANE_HELPER_FUNCS \
.prepare_fb = drm_gem_vram_plane_helper_prepare_fb, \
.cleanup_fb = drm_gem_vram_plane_helper_cleanup_fb
Highlights and cross-references¶The following special patterns are recognized in the kernel-doc comment descriptive text and converted to proper reStructuredText markup and Sphinx C Domain references. Attention The below are only recognized within kernel-doc comments, not within normal reStructuredText documents.
Cross-referencing from reStructuredText¶No additional syntax is needed to cross-reference the functions and types
defined in the kernel-doc comments from reStructuredText documents.
Just end function names with See foo(). See struct foo. See union bar. See enum baz. See typedef meh. However, if you want custom text in the cross-reference link, that can be done through the following syntax: See :c:func:`my custom link text for function foo <foo>`. See :c:type:`my custom link text for struct bar <bar>`. For further details, please refer to the Sphinx C Domain documentation. Note Variables aren’t automatically cross referenced. For those, you need to explicitly add a C domain cross-reference. Overview documentation comments¶To facilitate having source code and comments close together, you can include kernel-doc documentation blocks that are free-form comments instead of being kernel-doc for functions, structures, unions, enums, typedefs or variables. This could be used for something like a theory of operation for a driver or library code, for example. This is done by using a The general format of an overview or high-level documentation comment is: /** * DOC: Theory of Operation * * The whizbang foobar is a dilly of a gizmo. It can do whatever you * want it to do, at any time. It reads your mind. Here's how it works. * * foo bar splat * * The only drawback to this gizmo is that is can sometimes damage * hardware, software, or its subject(s). */ The title following Including kernel-doc comments¶The documentation comments may be included in any of the reStructuredText documents using a dedicated kernel-doc Sphinx directive extension. The kernel-doc directive is of the format: .. kernel-doc:: source :option: The source is the path to a source file, relative to the kernel source tree. The following directive options are supported:
Without options, the kernel-doc directive includes all documentation comments from the source file. The kernel-doc extension is included in the kernel source tree, at
How to use kernel-doc to generate man pages¶To generate man pages for all files that contain kernel-doc markups, run: $ make mandocs Or calling $ ./tools/docs/sphinx-build-wrapper mandocs The output will be at Optionally, it is possible to generate a partial set of man pages by using SPHINXDIRS:
Note When SPHINXDIRS={subdir} is used, it will only generate man pages for
the files explicitly inside a |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |