Blame view

Documentation/kernel-doc-nano-HOWTO.txt 5.13 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
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
  kernel-doc nano-HOWTO
  =====================
  
  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 DocBook, man, text, and HTML. (No, not
    texinfo.)
  
  - Documentation/DocBook/*.tmpl
  
    These are SGML template files, which are normal SGML files with
    special place-holders for where the extracted documentation should
    go.
  
  - scripts/docproc.c
  
    This is a program for converting SGML template files into SGML
    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 SGML template files to locate
    all the files referenced herein. This is used to generate dependency
    information as used by make.
  
  - Makefile
  
    The targets 'sgmldocs', 'psdocs', 'pdfdocs', and 'htmldocs' are used
    to build DocBook files, PostScript files, PDF files, and html files
    in Documentation/DocBook.
  
  - Documentation/DocBook/Makefile
  
    This is where C files are associated with SGML templates.
  
  
  How to extract the documentation
  --------------------------------
  
  If you just want to read the ready-made books on the various
  subsystems (see Documentation/DocBook/*.tmpl), just type 'make
d28bee0c0   Randy Dunlap   [PATCH] Doc/kerne...
48
49
50
51
  psdocs', or 'make pdfdocs', or 'make htmldocs', depending on your
  preference.  If you would rather read a different format, you can type
  'make sgmldocs' and then use DocBook tools to convert
  Documentation/DocBook/*.sgml to a format of your choice (for example,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
  'db2html ...' if 'make htmldocs' was not defined).
  
  If you want to see man pages instead, you can do this:
  
  $ cd linux
  $ scripts/kernel-doc -man $(find -name '*.c') | split-man.pl /tmp/man
  $ scripts/kernel-doc -man $(find -name '*.h') | split-man.pl /tmp/man
  
  Here is split-man.pl:
  
  -->
  #!/usr/bin/perl
  
  if ($#ARGV < 0) {
     die "where do I put the results?
  ";
  }
  
  mkdir $ARGV[0],0777;
  $state = 0;
  while (<STDIN>) {
      if (/^\.TH \"[^\"]*\" 4 \"([^\"]*)\"/) {
  	if ($state == 1) { close OUT }
  	$state = 1;
  	$fn = "$ARGV[0]/$1.4";
  	print STDERR "Creating $fn
  ";
  	open OUT, ">$fn" or die "can't open $fn: $!
  ";
  	print OUT $_;
      } elsif ($state != 0) {
  	print OUT $_;
      }
  }
  
  close OUT;
  <--
  
  If you just want to view the documentation for one function in one
  file, you can do this:
  
  $ scripts/kernel-doc -man -function fn file | nroff -man | less
  
  or this:
  
  $ scripts/kernel-doc -text -function fn file
  
  
  How to add extractable documentation to your source files
  ---------------------------------------------------------
  
  The format of the block comment is like this:
  
  /**
   * function_name(:)? (- short description)?
  (* @parameterx: (description of parameter x)?)*
  (* a blank line)?
   * (Description:)? (Description of function)?
   * (section header: (section description)? )*
  (*)?*/
  
  The short function description cannot be multiline, but the other
  descriptions can be (and they can contain blank lines). Avoid putting a
  spurious blank line after the function name, or else the description will
  be repeated!
  
  All descriptive text is further processed, scanning for the following special
  patterns, which are highlighted appropriately.
  
  'funcname()' - function
  '$ENVVAR' - environment variable
  '&struct_name' - name of a structure (up to two words including 'struct')
  '@parameter' - name of a parameter
  '%CONST' - name of a constant.
  
  Take a look around the source tree for examples.
d28bee0c0   Randy Dunlap   [PATCH] Doc/kerne...
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
  kernel-doc for structs, unions, enums, and typedefs
  ---------------------------------------------------
  
  Beside functions you can also write documentation for structs, unions,
  enums and typedefs. Instead of the function name you must write the name
  of the declaration;  the struct/union/enum/typedef must always precede
  the name. Nesting of declarations is not supported.
  Use the argument mechanism to document members or constants.
  
  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.
  
  Example:
  
  /**
   * struct my_struct - short description
   * @a: first member
   * @b: second member
   *
   * Longer description
   */
  struct my_struct {
      int a;
      int b;
  /* private: */
      int c;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
  How to make new SGML template files
  -----------------------------------
  
  SGML template files (*.tmpl) are like normal SGML 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.
  
  
  Tim.
  */ <twaugh@redhat.com>