2016-06-23 20:36:04 +08:00
|
|
|
|
==========================
|
|
|
|
|
Linux Kernel Documentation
|
|
|
|
|
==========================
|
|
|
|
|
|
|
|
|
|
Introduction
|
|
|
|
|
============
|
|
|
|
|
|
|
|
|
|
The Linux kernel uses `Sphinx`_ to generate pretty documentation from
|
|
|
|
|
`reStructuredText`_ files under ``Documentation``. To build the documentation in
|
|
|
|
|
HTML or PDF formats, use ``make htmldocs`` or ``make pdfdocs``. The generated
|
|
|
|
|
documentation is placed in ``Documentation/output``.
|
|
|
|
|
|
|
|
|
|
.. _Sphinx: http://www.sphinx-doc.org/
|
|
|
|
|
.. _reStructuredText: http://docutils.sourceforge.net/rst.html
|
|
|
|
|
|
|
|
|
|
The reStructuredText files may contain directives to include structured
|
|
|
|
|
documentation comments, or kernel-doc comments, from source files. Usually these
|
|
|
|
|
are used to describe the functions and types and design of the code. The
|
|
|
|
|
kernel-doc comments have some special structure and formatting, but beyond that
|
|
|
|
|
they are also treated as reStructuredText.
|
|
|
|
|
|
|
|
|
|
There is also the deprecated DocBook toolchain to generate documentation from
|
|
|
|
|
DocBook XML template files under ``Documentation/DocBook``. The DocBook files
|
|
|
|
|
are to be converted to reStructuredText, and the toolchain is slated to be
|
|
|
|
|
removed.
|
|
|
|
|
|
|
|
|
|
Finally, there are thousands of plain text documentation files scattered around
|
|
|
|
|
``Documentation``. Some of these will likely be converted to reStructuredText
|
|
|
|
|
over time, but the bulk of them will remain in plain text.
|
|
|
|
|
|
|
|
|
|
Sphinx Build
|
|
|
|
|
============
|
|
|
|
|
|
|
|
|
|
The usual way to generate the documentation is to run ``make htmldocs`` or
|
|
|
|
|
``make pdfdocs``. There are also other formats available, see the documentation
|
|
|
|
|
section of ``make help``. The generated documentation is placed in
|
|
|
|
|
format-specific subdirectories under ``Documentation/output``.
|
|
|
|
|
|
|
|
|
|
To generate documentation, Sphinx (``sphinx-build``) must obviously be
|
|
|
|
|
installed. For prettier HTML output, the Read the Docs Sphinx theme
|
|
|
|
|
(``sphinx_rtd_theme``) is used if available. For PDF output, ``rst2pdf`` is also
|
|
|
|
|
needed. All of these are widely available and packaged in distributions.
|
|
|
|
|
|
|
|
|
|
To pass extra options to Sphinx, you can use the ``SPHINXOPTS`` make
|
|
|
|
|
variable. For example, use ``make SPHINXOPTS=-v htmldocs`` to get more verbose
|
|
|
|
|
output.
|
|
|
|
|
|
|
|
|
|
To remove the generated documentation, run ``make cleandocs``.
|
|
|
|
|
|
|
|
|
|
Writing Documentation
|
|
|
|
|
=====================
|
|
|
|
|
|
|
|
|
|
Adding new documentation can be as simple as:
|
|
|
|
|
|
|
|
|
|
1. Add a new ``.rst`` file somewhere under ``Documentation``.
|
|
|
|
|
2. Refer to it from the Sphinx main `TOC tree`_ in ``Documentation/index.rst``.
|
|
|
|
|
|
|
|
|
|
.. _TOC tree: http://www.sphinx-doc.org/en/stable/markup/toctree.html
|
|
|
|
|
|
|
|
|
|
This is usually good enough for simple documentation (like the one you're
|
|
|
|
|
reading right now), but for larger documents it may be advisable to create a
|
|
|
|
|
subdirectory (or use an existing one). For example, the graphics subsystem
|
|
|
|
|
documentation is under ``Documentation/gpu``, split to several ``.rst`` files,
|
|
|
|
|
and has a separate ``index.rst`` (with a ``toctree`` of its own) referenced from
|
|
|
|
|
the main index.
|
|
|
|
|
|
|
|
|
|
See the documentation for `Sphinx`_ and `reStructuredText`_ on what you can do
|
|
|
|
|
with them. In particular, the Sphinx `reStructuredText Primer`_ is a good place
|
|
|
|
|
to get started with reStructuredText. There are also some `Sphinx specific
|
|
|
|
|
markup constructs`_.
|
|
|
|
|
|
|
|
|
|
.. _reStructuredText Primer: http://www.sphinx-doc.org/en/stable/rest.html
|
|
|
|
|
.. _Sphinx specific markup constructs: http://www.sphinx-doc.org/en/stable/markup/index.html
|
|
|
|
|
|
|
|
|
|
Specific guidelines for the kernel documentation
|
|
|
|
|
------------------------------------------------
|
|
|
|
|
|
|
|
|
|
Here are some specific guidelines for the kernel documentation:
|
|
|
|
|
|
|
|
|
|
* Please don't go overboard with reStructuredText markup. Keep it simple.
|
|
|
|
|
|
|
|
|
|
* Please stick to this order of heading adornments:
|
|
|
|
|
|
|
|
|
|
1. ``=`` with overline for document title::
|
|
|
|
|
|
|
|
|
|
==============
|
|
|
|
|
Document title
|
|
|
|
|
==============
|
|
|
|
|
|
|
|
|
|
2. ``=`` for chapters::
|
|
|
|
|
|
|
|
|
|
Chapters
|
|
|
|
|
========
|
|
|
|
|
|
|
|
|
|
3. ``-`` for sections::
|
|
|
|
|
|
|
|
|
|
Section
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
4. ``~`` for subsections::
|
|
|
|
|
|
|
|
|
|
Subsection
|
|
|
|
|
~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
Although RST doesn't mandate a specific order ("Rather than imposing a fixed
|
|
|
|
|
number and order of section title adornment styles, the order enforced will be
|
|
|
|
|
the order as encountered."), having the higher levels the same overall makes
|
|
|
|
|
it easier to follow the documents.
|
|
|
|
|
|
2016-08-15 22:08:25 +08:00
|
|
|
|
|
|
|
|
|
the C domain
|
|
|
|
|
------------
|
|
|
|
|
|
|
|
|
|
The `Sphinx C Domain`_ (name c) is suited for documentation of C API. E.g. a
|
|
|
|
|
function prototype:
|
|
|
|
|
|
|
|
|
|
.. code-block:: rst
|
|
|
|
|
|
|
|
|
|
.. c:function:: int ioctl( int fd, int request )
|
|
|
|
|
|
|
|
|
|
The C domain of the kernel-doc has some additional features. E.g. you can
|
|
|
|
|
*rename* the reference name of a function with a common name like ``open`` or
|
|
|
|
|
``ioctl``:
|
|
|
|
|
|
|
|
|
|
.. code-block:: rst
|
|
|
|
|
|
|
|
|
|
.. c:function:: int ioctl( int fd, int request )
|
|
|
|
|
:name: VIDIOC_LOG_STATUS
|
|
|
|
|
|
|
|
|
|
The func-name (e.g. ioctl) remains in the output but the ref-name changed from
|
|
|
|
|
``ioctl`` to ``VIDIOC_LOG_STATUS``. The index entry for this function is also
|
|
|
|
|
changed to ``VIDIOC_LOG_STATUS`` and the function can now referenced by:
|
|
|
|
|
|
|
|
|
|
.. code-block:: rst
|
|
|
|
|
|
|
|
|
|
:c:func:`VIDIOC_LOG_STATUS`
|
|
|
|
|
|
|
|
|
|
|
2016-06-30 20:00:22 +08:00
|
|
|
|
list tables
|
|
|
|
|
-----------
|
|
|
|
|
|
|
|
|
|
We recommend the use of *list table* formats. The *list table* formats are
|
|
|
|
|
double-stage lists. Compared to the ASCII-art they might not be as
|
|
|
|
|
comfortable for
|
|
|
|
|
readers of the text files. Their advantage is that they are easy to
|
|
|
|
|
create or modify and that the diff of a modification is much more meaningful,
|
|
|
|
|
because it is limited to the modified content.
|
|
|
|
|
|
|
|
|
|
The ``flat-table`` is a double-stage list similar to the ``list-table`` with
|
|
|
|
|
some additional features:
|
|
|
|
|
|
|
|
|
|
* column-span: with the role ``cspan`` a cell can be extended through
|
|
|
|
|
additional columns
|
|
|
|
|
|
|
|
|
|
* row-span: with the role ``rspan`` a cell can be extended through
|
|
|
|
|
additional rows
|
|
|
|
|
|
|
|
|
|
* auto span rightmost cell of a table row over the missing cells on the right
|
|
|
|
|
side of that table-row. With Option ``:fill-cells:`` this behavior can
|
|
|
|
|
changed from *auto span* to *auto fill*, which automatically inserts (empty)
|
|
|
|
|
cells instead of spanning the last cell.
|
|
|
|
|
|
|
|
|
|
options:
|
|
|
|
|
|
|
|
|
|
* ``:header-rows:`` [int] count of header rows
|
|
|
|
|
* ``:stub-columns:`` [int] count of stub columns
|
|
|
|
|
* ``:widths:`` [[int] [int] ... ] widths of columns
|
|
|
|
|
* ``:fill-cells:`` instead of auto-spanning missing cells, insert missing cells
|
|
|
|
|
|
|
|
|
|
roles:
|
|
|
|
|
|
|
|
|
|
* ``:cspan:`` [int] additional columns (*morecols*)
|
|
|
|
|
* ``:rspan:`` [int] additional rows (*morerows*)
|
|
|
|
|
|
|
|
|
|
The example below shows how to use this markup. The first level of the staged
|
|
|
|
|
list is the *table-row*. In the *table-row* there is only one markup allowed,
|
|
|
|
|
the list of the cells in this *table-row*. Exceptions are *comments* ( ``..`` )
|
|
|
|
|
and *targets* (e.g. a ref to ``:ref:`last row <last row>``` / :ref:`last row
|
|
|
|
|
<last row>`).
|
|
|
|
|
|
|
|
|
|
.. code-block:: rst
|
|
|
|
|
|
|
|
|
|
.. flat-table:: table title
|
|
|
|
|
:widths: 2 1 1 3
|
|
|
|
|
|
|
|
|
|
* - head col 1
|
|
|
|
|
- head col 2
|
|
|
|
|
- head col 3
|
|
|
|
|
- head col 4
|
|
|
|
|
|
|
|
|
|
* - column 1
|
|
|
|
|
- field 1.1
|
|
|
|
|
- field 1.2 with autospan
|
|
|
|
|
|
|
|
|
|
* - column 2
|
|
|
|
|
- field 2.1
|
|
|
|
|
- :rspan:`1` :cspan:`1` field 2.2 - 3.3
|
|
|
|
|
|
|
|
|
|
* .. _`last row`:
|
|
|
|
|
|
|
|
|
|
- column 3
|
|
|
|
|
|
|
|
|
|
Rendered as:
|
|
|
|
|
|
|
|
|
|
.. flat-table:: table title
|
|
|
|
|
:widths: 2 1 1 3
|
|
|
|
|
|
|
|
|
|
* - head col 1
|
|
|
|
|
- head col 2
|
|
|
|
|
- head col 3
|
|
|
|
|
- head col 4
|
|
|
|
|
|
|
|
|
|
* - column 1
|
|
|
|
|
- field 1.1
|
|
|
|
|
- field 1.2 with autospan
|
|
|
|
|
|
|
|
|
|
* - column 2
|
|
|
|
|
- field 2.1
|
|
|
|
|
- :rspan:`1` :cspan:`1` field 2.2 - 3.3
|
|
|
|
|
|
|
|
|
|
* .. _`last row`:
|
|
|
|
|
|
|
|
|
|
- column 3
|
|
|
|
|
|
2016-06-23 20:36:04 +08:00
|
|
|
|
|
|
|
|
|
Including kernel-doc comments
|
|
|
|
|
=============================
|
|
|
|
|
|
|
|
|
|
The Linux kernel source files may contain structured documentation comments, or
|
|
|
|
|
kernel-doc comments to describe the functions and types and design of the
|
|
|
|
|
code. The documentation comments may be included to 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:
|
|
|
|
|
|
|
|
|
|
export: *[source-pattern ...]*
|
|
|
|
|
Include documentation for all functions in *source* that have been exported
|
|
|
|
|
using ``EXPORT_SYMBOL`` or ``EXPORT_SYMBOL_GPL`` either in *source* or in any
|
|
|
|
|
of the files specified by *source-pattern*.
|
|
|
|
|
|
|
|
|
|
The *source-pattern* is useful when the kernel-doc comments have been placed
|
|
|
|
|
in header files, while ``EXPORT_SYMBOL`` and ``EXPORT_SYMBOL_GPL`` are next to
|
|
|
|
|
the function definitions.
|
|
|
|
|
|
|
|
|
|
Examples::
|
|
|
|
|
|
|
|
|
|
.. kernel-doc:: lib/bitmap.c
|
|
|
|
|
:export:
|
|
|
|
|
|
|
|
|
|
.. kernel-doc:: include/net/mac80211.h
|
|
|
|
|
:export: net/mac80211/*.c
|
|
|
|
|
|
|
|
|
|
internal: *[source-pattern ...]*
|
|
|
|
|
Include documentation for all functions and types in *source* that have
|
|
|
|
|
**not** been exported using ``EXPORT_SYMBOL`` or ``EXPORT_SYMBOL_GPL`` either
|
|
|
|
|
in *source* or in any of the files specified by *source-pattern*.
|
|
|
|
|
|
|
|
|
|
Example::
|
|
|
|
|
|
|
|
|
|
.. kernel-doc:: drivers/gpu/drm/i915/intel_audio.c
|
|
|
|
|
:internal:
|
|
|
|
|
|
|
|
|
|
doc: *title*
|
|
|
|
|
Include documentation for the ``DOC:`` paragraph identified by *title* in
|
|
|
|
|
*source*. Spaces are allowed in *title*; do not quote the *title*. The *title*
|
|
|
|
|
is only used as an identifier for the paragraph, and is not included in the
|
|
|
|
|
output. Please make sure to have an appropriate heading in the enclosing
|
|
|
|
|
reStructuredText document.
|
|
|
|
|
|
|
|
|
|
Example::
|
|
|
|
|
|
|
|
|
|
.. kernel-doc:: drivers/gpu/drm/i915/intel_audio.c
|
|
|
|
|
:doc: High Definition Audio over HDMI and Display Port
|
|
|
|
|
|
|
|
|
|
functions: *function* *[...]*
|
|
|
|
|
Include documentation for each *function* in *source*.
|
|
|
|
|
|
|
|
|
|
Example::
|
|
|
|
|
|
|
|
|
|
.. kernel-doc:: lib/bitmap.c
|
|
|
|
|
:functions: bitmap_parselist bitmap_parselist_user
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
``Documentation/sphinx/kernel-doc.py``. Internally, it uses the
|
|
|
|
|
``scripts/kernel-doc`` script to extract the documentation comments from the
|
|
|
|
|
source.
|
|
|
|
|
|
2016-09-19 19:08:00 +08:00
|
|
|
|
.. _kernel_doc:
|
|
|
|
|
|
2016-06-23 20:36:04 +08:00
|
|
|
|
Writing kernel-doc comments
|
|
|
|
|
===========================
|
|
|
|
|
|
|
|
|
|
In order to provide embedded, "C" friendly, easy to maintain, but consistent and
|
|
|
|
|
extractable overview, function and type documentation, the Linux kernel has
|
|
|
|
|
adopted a consistent style for documentation comments. The format for this
|
|
|
|
|
documentation is called the kernel-doc format, described below. This style
|
|
|
|
|
embeds the documentation within the source files, using a few simple conventions
|
|
|
|
|
for adding documentation paragraphs and documenting functions and their
|
|
|
|
|
parameters, structures and unions and their members, enumerations, and typedefs.
|
|
|
|
|
|
|
|
|
|
.. note:: The kernel-doc format is deceptively similar to 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.
|
|
|
|
|
|
|
|
|
|
The ``scripts/kernel-doc`` script is used by the Sphinx kernel-doc extension in
|
|
|
|
|
the documentation build to extract this embedded documentation into the various
|
|
|
|
|
HTML, PDF, and other format documents.
|
|
|
|
|
|
|
|
|
|
In order to provide good documentation of kernel functions and data structures,
|
|
|
|
|
please use the following conventions to format your kernel-doc comments in the
|
|
|
|
|
Linux kernel source.
|
|
|
|
|
|
|
|
|
|
How to format kernel-doc comments
|
|
|
|
|
---------------------------------
|
|
|
|
|
|
|
|
|
|
The opening comment mark ``/**`` is reserved for kernel-doc comments. Only
|
|
|
|
|
comments so marked will be considered by the ``kernel-doc`` tool. Use it only
|
|
|
|
|
for comment blocks that contain kernel-doc formatted comments. The usual ``*/``
|
|
|
|
|
should be used as the closing comment marker. The lines in between should be
|
|
|
|
|
prefixed by `` * `` (space star space).
|
|
|
|
|
|
|
|
|
|
The function and type kernel-doc comments should be placed just before the
|
|
|
|
|
function or type being described. The overview kernel-doc comments may be freely
|
|
|
|
|
placed at the top indentation level.
|
|
|
|
|
|
|
|
|
|
Example kernel-doc function comment::
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* foobar() - Brief description of foobar.
|
|
|
|
|
* @arg: Description of argument of foobar.
|
|
|
|
|
*
|
|
|
|
|
* Longer description of foobar.
|
|
|
|
|
*
|
|
|
|
|
* Return: Description of return value of foobar.
|
|
|
|
|
*/
|
|
|
|
|
int foobar(int arg)
|
|
|
|
|
|
|
|
|
|
The format is similar for documentation for structures, enums, paragraphs,
|
|
|
|
|
etc. See the sections below for details.
|
|
|
|
|
|
|
|
|
|
The kernel-doc structure is extracted from the comments, and proper `Sphinx C
|
|
|
|
|
Domain`_ function and type descriptions with anchors are generated for them. The
|
|
|
|
|
descriptions are filtered for special kernel-doc highlights and
|
|
|
|
|
cross-references. See below for details.
|
|
|
|
|
|
|
|
|
|
.. _Sphinx C Domain: http://www.sphinx-doc.org/en/stable/domains.html
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
``funcname()``
|
|
|
|
|
Function reference.
|
|
|
|
|
|
|
|
|
|
``@parameter``
|
|
|
|
|
Name of a function parameter. (No cross-referencing, just formatting.)
|
|
|
|
|
|
|
|
|
|
``%CONST``
|
|
|
|
|
Name of a constant. (No cross-referencing, just formatting.)
|
|
|
|
|
|
|
|
|
|
``$ENVVAR``
|
|
|
|
|
Name of an environment variable. (No cross-referencing, just formatting.)
|
|
|
|
|
|
|
|
|
|
``&struct name``
|
|
|
|
|
Structure reference.
|
|
|
|
|
|
|
|
|
|
``&enum name``
|
|
|
|
|
Enum reference.
|
|
|
|
|
|
|
|
|
|
``&typedef name``
|
|
|
|
|
Typedef reference.
|
|
|
|
|
|
|
|
|
|
``&struct_name->member`` or ``&struct_name.member``
|
|
|
|
|
Structure or union member reference. The cross-reference will be to the struct
|
|
|
|
|
or union definition, not the member directly.
|
|
|
|
|
|
|
|
|
|
``&name``
|
|
|
|
|
A generic type reference. Prefer using the full reference described above
|
|
|
|
|
instead. This is mostly for legacy comments.
|
|
|
|
|
|
|
|
|
|
Cross-referencing from reStructuredText
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
To cross-reference the functions and types defined in the kernel-doc comments
|
|
|
|
|
from reStructuredText documents, please use the `Sphinx C Domain`_
|
|
|
|
|
references. For example::
|
|
|
|
|
|
|
|
|
|
See function :c:func:`foo` and struct/union/enum/typedef :c:type:`bar`.
|
|
|
|
|
|
|
|
|
|
While the type reference works with just the type name, without the
|
|
|
|
|
struct/union/enum/typedef part in front, you may want to use::
|
|
|
|
|
|
|
|
|
|
See :c:type:`struct foo <foo>`.
|
|
|
|
|
See :c:type:`union bar <bar>`.
|
|
|
|
|
See :c:type:`enum baz <baz>`.
|
|
|
|
|
See :c:type:`typedef meh <meh>`.
|
|
|
|
|
|
|
|
|
|
This will produce prettier links, and is in line with how kernel-doc does the
|
|
|
|
|
cross-references.
|
|
|
|
|
|
|
|
|
|
For further details, please refer to the `Sphinx C Domain`_ documentation.
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
*
|
|
|
|
|
* Return: Describe the return value of foobar.
|
|
|
|
|
*
|
|
|
|
|
* 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.
|
|
|
|
|
|
|
|
|
|
The kernel-doc function comments describe each parameter to the function, in
|
|
|
|
|
order, with the ``@argument:`` descriptions. The ``@argument:`` descriptions
|
|
|
|
|
must begin on the very next line following the opening brief function
|
|
|
|
|
description line, with no intervening blank comment lines. The ``@argument:``
|
|
|
|
|
descriptions may span multiple lines. The continuation lines may contain
|
|
|
|
|
indentation. If a function parameter is ``...`` (varargs), it should be listed
|
|
|
|
|
in kernel-doc notation as: ``@...:``.
|
|
|
|
|
|
|
|
|
|
The return value, if any, should be described in a dedicated section at the end
|
|
|
|
|
of the comment starting with "Return:".
|
|
|
|
|
|
|
|
|
|
Structure, union, and enumeration documentation
|
|
|
|
|
-----------------------------------------------
|
|
|
|
|
|
|
|
|
|
The general format of a struct, union, and enum kernel-doc comment is::
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* struct struct_name - Brief description.
|
|
|
|
|
* @member_name: Description of member member_name.
|
|
|
|
|
*
|
|
|
|
|
* Description of the structure.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
Below, "struct" is used to mean structs, unions and enums, and "member" is used
|
|
|
|
|
to mean struct and union members as well as enumerations in an enum.
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
The kernel-doc data structure comments describe each member of the structure, in
|
|
|
|
|
order, with the ``@member:`` descriptions. The ``@member:`` descriptions must
|
|
|
|
|
begin on the very next line following the opening brief function description
|
|
|
|
|
line, with no intervening blank comment lines. The ``@member:`` descriptions may
|
|
|
|
|
span multiple lines. The continuation lines may contain indentation.
|
|
|
|
|
|
|
|
|
|
In-line member documentation comments
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
The structure members may also be documented in-line within the definition::
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Private members
|
|
|
|
|
~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
Inside a struct description, you can use the "private:" and "public:" comment
|
|
|
|
|
tags. Structure fields that are inside a "private:" area are not listed in the
|
|
|
|
|
generated output documentation. The "private:" and "public:" tags must begin
|
|
|
|
|
immediately following a ``/*`` comment marker. They may optionally include
|
|
|
|
|
comments between the ``:`` and the ending ``*/`` marker.
|
|
|
|
|
|
|
|
|
|
Example::
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* struct my_struct - short description
|
|
|
|
|
* @a: first member
|
|
|
|
|
* @b: second member
|
|
|
|
|
*
|
|
|
|
|
* Longer description
|
|
|
|
|
*/
|
|
|
|
|
struct my_struct {
|
|
|
|
|
int a;
|
|
|
|
|
int b;
|
|
|
|
|
/* private: internal use only */
|
|
|
|
|
int c;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Typedef documentation
|
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
|
|
The general format of a typedef kernel-doc comment is::
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* typedef type_name - Brief description.
|
|
|
|
|
*
|
|
|
|
|
* Description of the type.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
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, or typedefs. 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 ``DOC:`` section keyword with a section title.
|
|
|
|
|
|
|
|
|
|
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 ``DOC:`` acts as a heading within the source file, but also
|
|
|
|
|
as an identifier for extracting the documentation comment. Thus, the title must
|
|
|
|
|
be unique within the file.
|
|
|
|
|
|
|
|
|
|
Recommendations
|
|
|
|
|
---------------
|
|
|
|
|
|
|
|
|
|
We definitely need kernel-doc formatted documentation for functions that are
|
|
|
|
|
exported to loadable modules using ``EXPORT_SYMBOL`` or ``EXPORT_SYMBOL_GPL``.
|
|
|
|
|
|
|
|
|
|
We also look to provide kernel-doc formatted documentation for functions
|
|
|
|
|
externally visible to other kernel files (not marked "static").
|
|
|
|
|
|
|
|
|
|
We also recommend providing kernel-doc formatted documentation for private (file
|
|
|
|
|
"static") routines, for consistency of kernel source code layout. But this is
|
|
|
|
|
lower priority and at the discretion of the MAINTAINER of that kernel source
|
|
|
|
|
file.
|
|
|
|
|
|
|
|
|
|
Data structures visible in kernel include files should also be documented using
|
|
|
|
|
kernel-doc formatted comments.
|
|
|
|
|
|
|
|
|
|
DocBook XML [DEPRECATED]
|
|
|
|
|
========================
|
|
|
|
|
|
|
|
|
|
.. attention::
|
|
|
|
|
|
|
|
|
|
This section describes the deprecated DocBook XML toolchain. Please do not
|
|
|
|
|
create new DocBook XML template files. Please consider converting existing
|
|
|
|
|
DocBook XML templates files to Sphinx/reStructuredText.
|
|
|
|
|
|
|
|
|
|
Converting DocBook to Sphinx
|
|
|
|
|
----------------------------
|
|
|
|
|
|
|
|
|
|
Over time, we expect all of the documents under ``Documentation/DocBook`` to be
|
|
|
|
|
converted to Sphinx and reStructuredText. For most DocBook XML documents, a good
|
|
|
|
|
enough solution is to use the simple ``Documentation/sphinx/tmplcvt`` script,
|
|
|
|
|
which uses ``pandoc`` under the hood. For example::
|
|
|
|
|
|
|
|
|
|
$ cd Documentation/sphinx
|
|
|
|
|
$ ./tmplcvt ../DocBook/in.tmpl ../out.rst
|
|
|
|
|
|
|
|
|
|
Then edit the resulting rst files to fix any remaining issues, and add the
|
|
|
|
|
document in the ``toctree`` in ``Documentation/index.rst``.
|
|
|
|
|
|
|
|
|
|
Components of the kernel-doc system
|
|
|
|
|
-----------------------------------
|
|
|
|
|
|
|
|
|
|
Many places in the source tree have extractable documentation in the form of
|
|
|
|
|
block comments above functions. The components of this system are:
|
|
|
|
|
|
|
|
|
|
- ``scripts/kernel-doc``
|
|
|
|
|
|
|
|
|
|
This is a perl script that hunts for the block comments and can mark them up
|
|
|
|
|
directly into reStructuredText, DocBook, man, text, and HTML. (No, not
|
|
|
|
|
texinfo.)
|
|
|
|
|
|
|
|
|
|
- ``Documentation/DocBook/*.tmpl``
|
|
|
|
|
|
|
|
|
|
These are XML template files, which are normal XML files with special
|
|
|
|
|
place-holders for where the extracted documentation should go.
|
|
|
|
|
|
|
|
|
|
- ``scripts/docproc.c``
|
|
|
|
|
|
|
|
|
|
This is a program for converting XML template files into XML files. When a
|
|
|
|
|
file is referenced it is searched for symbols exported (EXPORT_SYMBOL), to be
|
|
|
|
|
able to distinguish between internal and external functions.
|
|
|
|
|
|
|
|
|
|
It invokes kernel-doc, giving it the list of functions that are to be
|
|
|
|
|
documented.
|
|
|
|
|
|
|
|
|
|
Additionally it is used to scan the XML template files to locate all the files
|
|
|
|
|
referenced herein. This is used to generate dependency information as used by
|
|
|
|
|
make.
|
|
|
|
|
|
|
|
|
|
- ``Makefile``
|
|
|
|
|
|
|
|
|
|
The targets 'xmldocs', 'psdocs', 'pdfdocs', and 'htmldocs' are used to build
|
|
|
|
|
DocBook XML files, PostScript files, PDF files, and html files in
|
|
|
|
|
Documentation/DocBook. The older target 'sgmldocs' is equivalent to 'xmldocs'.
|
|
|
|
|
|
|
|
|
|
- ``Documentation/DocBook/Makefile``
|
|
|
|
|
|
|
|
|
|
This is where C files are associated with SGML templates.
|
|
|
|
|
|
|
|
|
|
How to use kernel-doc comments in DocBook XML template files
|
|
|
|
|
------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
DocBook XML template files (\*.tmpl) are like normal XML files, except that they
|
|
|
|
|
can contain escape sequences where extracted documentation should be inserted.
|
|
|
|
|
|
|
|
|
|
``!E<filename>`` is replaced by the documentation, in ``<filename>``, for
|
|
|
|
|
functions that are exported using ``EXPORT_SYMBOL``: the function list is
|
|
|
|
|
collected from files listed in ``Documentation/DocBook/Makefile``.
|
|
|
|
|
|
|
|
|
|
``!I<filename>`` is replaced by the documentation for functions that are **not**
|
|
|
|
|
exported using ``EXPORT_SYMBOL``.
|
|
|
|
|
|
|
|
|
|
``!D<filename>`` is used to name additional files to search for functions
|
|
|
|
|
exported using ``EXPORT_SYMBOL``.
|
|
|
|
|
|
|
|
|
|
``!F<filename> <function [functions...]>`` is replaced by the documentation, in
|
|
|
|
|
``<filename>``, for the functions listed.
|
|
|
|
|
|
|
|
|
|
``!P<filename> <section title>`` is replaced by the contents of the ``DOC:``
|
|
|
|
|
section titled ``<section title>`` from ``<filename>``. Spaces are allowed in
|
|
|
|
|
``<section title>``; do not quote the ``<section title>``.
|
|
|
|
|
|
|
|
|
|
``!C<filename>`` is replaced by nothing, but makes the tools check that all DOC:
|
|
|
|
|
sections and documented functions, symbols, etc. are used. This makes sense to
|
|
|
|
|
use when you use ``!F`` or ``!P`` only and want to verify that all documentation
|
|
|
|
|
is included.
|