Blame view

Documentation/kernel-documentation.rst 23 KB
17defc282   Jani Nikula   Documentation: ad...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
  ==========================
  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.
2c645cd7c   Markus Heiser   doc-rst:c-domain:...
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
  
  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`
0249a7644   Markus Heiser   doc-rst: flat-tab...
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
  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
17defc282   Jani Nikula   Documentation: ad...
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
  
  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.
0cef67aa6   Mauro Carvalho Chehab   Documentation/Sub...
292
  .. _kernel_doc:
17defc282   Jani Nikula   Documentation: ad...
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
  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.