1kernel-doc nano-HOWTO 2===================== 3 4Many places in the source tree have extractable documentation in the 5form of block comments above functions. The components of this system 6are: 7 8- scripts/kernel-doc 9 10 This is a perl script that hunts for the block comments and can mark 11 them up directly into DocBook, man, text, and HTML. (No, not 12 texinfo.) 13 14- Documentation/DocBook/*.tmpl 15 16 These are SGML template files, which are normal SGML files with 17 special place-holders for where the extracted documentation should 18 go. 19 20- scripts/docproc.c 21 22 This is a program for converting SGML template files into SGML 23 files. It invokes kernel-doc, giving it the list of functions that 24 are to be documented. 25 26- scripts/gen-all-syms 27 28 This is a script that lists the EXPORT_SYMBOL symbols in a list of C 29 files. 30 31- scripts/docgen 32 33 This script invokes docproc, telling it which functions are to be 34 documented (this list comes from gen-all-syms). 35 36- Makefile 37 38 The targets 'sgmldocs', 'psdocs', 'pdfdocs', and 'htmldocs' are used 39 to build DocBook files, PostScript files, PDF files, and html files 40 in Documentation/DocBook. 41 42- Documentation/DocBook/Makefile 43 44 This is where C files are associated with SGML templates. 45 46 47How to extract the documentation 48-------------------------------- 49 50If you just want to read the ready-made books on the various 51subsystems (see Documentation/DocBook/*.tmpl), just type 'make 52psdocs', or 'make pdfdocs', or 'make htmldocs', depending on your 53preference. If you would rather read a different format, you can type 54'make sgmldocs' and then use DocBook tools to convert 55Documentation/DocBook/*.sgml to a format of your choice (for example, 56'db2html ...' if 'make htmldocs' was not defined). 57 58If you want to see man pages instead, you can do this: 59 60$ cd linux 61$ scripts/kernel-doc -man $(find -name '*.c') | split-man.pl /tmp/man 62$ scripts/kernel-doc -man $(find -name '*.h') | split-man.pl /tmp/man 63 64Here is split-man.pl: 65 66--> 67#!/usr/bin/perl 68 69if ($#ARGV < 0) { 70 die "where do I put the results?\n"; 71} 72 73mkdir $ARGV[0],0777; 74$state = 0; 75while (<STDIN>) { 76 if (/^\.TH \"[^\"]*\" 4 \"([^\"]*)\"/) { 77 if ($state == 1) { close OUT } 78 $state = 1; 79 $fn = "$ARGV[0]/$1.4"; 80 print STDERR "Creating $fn\n"; 81 open OUT, ">$fn" or die "can't open $fn: $!\n"; 82 print OUT $_; 83 } elsif ($state != 0) { 84 print OUT $_; 85 } 86} 87 88close OUT; 89<-- 90 91If you just want to view the documentation for one function in one 92file, you can do this: 93 94$ scripts/kernel-doc -man -function fn file | nroff -man | less 95 96or this: 97 98$ scripts/kernel-doc -text -function fn file 99 100 101How to add extractable documentation to your source files 102--------------------------------------------------------- 103 104The format of the block comment is like this: 105 106/** 107 * function_name(:)? (- short description)? 108(* @parameterx: (description of parameter x)?)* 109(* a blank line)? 110 * (Description:)? (Description of function)? 111 * (section header: (section description)? )* 112(*)?*/ 113 114The short function description cannot be multiline, but the other 115descriptions can be (and they can contain blank lines). Avoid putting a 116spurious blank line after the function name, or else the description will 117be repeated! 118 119All descriptive text is further processed, scanning for the following special 120patterns, which are highlighted appropriately. 121 122'funcname()' - function 123'$ENVVAR' - environment variable 124'&struct_name' - name of a structure (up to two words including 'struct') 125'@parameter' - name of a parameter 126'%CONST' - name of a constant. 127 128Take a look around the source tree for examples. 129 130 131How to make new SGML template files 132----------------------------------- 133 134SGML template files (*.tmpl) are like normal SGML files, except that 135they can contain escape sequences where extracted documentation should 136be inserted. 137 138!E<filename> is replaced by the documentation, in <filename>, for 139functions that are exported using EXPORT_SYMBOL: the function list is 140collected from files listed in Documentation/DocBook/Makefile. 141 142!I<filename> is replaced by the documentation for functions that are 143_not_ exported using EXPORT_SYMBOL. 144 145!F<filename> <function [functions...]> is replaced by the 146documentation, in <filename>, for the functions listed. 147 148 149Tim. 150*/ <twaugh@redhat.com> 151 152

