|
@@ -0,0 +1,554 @@
|
|
|
|
+.. include:: ../disclaimer-ita.rst
|
|
|
|
+
|
|
|
|
+.. note:: Per leggere la documentazione originale in inglese:
|
|
|
|
+ :ref:`Documentation/doc-guide/index.rst <doc_guide>`
|
|
|
|
+
|
|
|
|
+.. _it_kernel_doc:
|
|
|
|
+
|
|
|
|
+Scrivere i commenti in kernel-doc
|
|
|
|
+=================================
|
|
|
|
+
|
|
|
|
+Nei file sorgenti del kernel Linux potrete trovare commenti di documentazione
|
|
|
|
+strutturanti secondo il formato kernel-doc. Essi possono descrivere funzioni,
|
|
|
|
+tipi di dati, e l'architettura del codice.
|
|
|
|
+
|
|
|
|
+.. note:: Il formato kernel-doc può sembrare simile a gtk-doc o Doxygen ma
|
|
|
|
+ in realtà è molto differente per ragioni storiche. I sorgenti del kernel
|
|
|
|
+ contengono decine di migliaia di commenti kernel-doc. Siete pregati
|
|
|
|
+ d'attenervi allo stile qui descritto.
|
|
|
|
+
|
|
|
|
+La struttura kernel-doc è estratta a partire dai commenti; da questi viene
|
|
|
|
+generato il `dominio Sphinx per il C`_ con un'adeguata descrizione per le
|
|
|
|
+funzioni ed i tipi di dato con i loro relativi collegamenti. Le descrizioni
|
|
|
|
+vengono filtrare per cercare i riferimenti ed i marcatori.
|
|
|
|
+
|
|
|
|
+Vedere di seguito per maggiori dettagli.
|
|
|
|
+
|
|
|
|
+.. _`dominio Sphinx per il C`: http://www.sphinx-doc.org/en/stable/domains.html
|
|
|
|
+
|
|
|
|
+Tutte le funzioni esportate verso i moduli esterni utilizzando
|
|
|
|
+``EXPORT_SYMBOL`` o ``EXPORT_SYMBOL_GPL`` dovrebbero avere un commento
|
|
|
|
+kernel-doc. Quando l'intenzione è di utilizzarle nei moduli, anche le funzioni
|
|
|
|
+e le strutture dati nei file d'intestazione dovrebbero avere dei commenti
|
|
|
|
+kernel-doc.
|
|
|
|
+
|
|
|
|
+È considerata una buona pratica quella di fornire una documentazione formattata
|
|
|
|
+secondo kernel-doc per le funzioni che sono visibili da altri file del kernel
|
|
|
|
+(ovvero, che non siano dichiarate utilizzando ``static``). Raccomandiamo,
|
|
|
|
+inoltre, di fornire una documentazione kernel-doc anche per procedure private
|
|
|
|
+(ovvero, dichiarate "static") al fine di fornire una struttura più coerente
|
|
|
|
+dei sorgenti. Quest'ultima raccomandazione ha una priorità più bassa ed è a
|
|
|
|
+discrezione dal manutentore (MAINTAINER) del file sorgente.
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+Sicuramente la documentazione formattata con kernel-doc è necessaria per
|
|
|
|
+le funzioni che sono esportate verso i moduli esterni utilizzando
|
|
|
|
+``EXPORT_SYMBOL`` o ``EXPORT_SYMBOL_GPL``.
|
|
|
|
+
|
|
|
|
+Cerchiamo anche di fornire una documentazione formattata secondo kernel-doc
|
|
|
|
+per le funzioni che sono visibili da altri file del kernel (ovvero, che non
|
|
|
|
+siano dichiarate utilizzando "static")
|
|
|
|
+
|
|
|
|
+Raccomandiamo, inoltre, di fornire una documentazione formattata con kernel-doc
|
|
|
|
+anche per procedure private (ovvero, dichiarate "static") al fine di fornire
|
|
|
|
+una struttura più coerente dei sorgenti. Questa raccomandazione ha una priorità
|
|
|
|
+più bassa ed è a discrezione dal manutentore (MAINTAINER) del file sorgente.
|
|
|
|
+
|
|
|
|
+Le strutture dati visibili nei file di intestazione dovrebbero essere anch'esse
|
|
|
|
+documentate utilizzando commenti formattati con kernel-doc.
|
|
|
|
+
|
|
|
|
+Come formattare i commenti kernel-doc
|
|
|
|
+-------------------------------------
|
|
|
|
+
|
|
|
|
+I commenti kernel-doc iniziano con il marcatore ``/**``. Il programma
|
|
|
|
+``kernel-doc`` estrarrà i commenti marchiati in questo modo. Il resto
|
|
|
|
+del commento è formattato come un normale commento multilinea, ovvero
|
|
|
|
+con un asterisco all'inizio d'ogni riga e che si conclude con ``*/``
|
|
|
|
+su una riga separata.
|
|
|
|
+
|
|
|
|
+I commenti kernel-doc di funzioni e tipi dovrebbero essere posizionati
|
|
|
|
+appena sopra la funzione od il tipo che descrivono. Questo allo scopo di
|
|
|
|
+aumentare la probabilità che chi cambia il codice si ricordi di aggiornare
|
|
|
|
+anche la documentazione. I commenti kernel-doc di tipo più generale possono
|
|
|
|
+essere posizionati ovunque nel file.
|
|
|
|
+
|
|
|
|
+Al fine di verificare che i commenti siano formattati correttamente, potete
|
|
|
|
+eseguire il programma ``kernel-doc`` con un livello di verbosità alto e senza
|
|
|
|
+che questo produca alcuna documentazione. Per esempio::
|
|
|
|
+
|
|
|
|
+ scripts/kernel-doc -v -none drivers/foo/bar.c
|
|
|
|
+
|
|
|
|
+Il formato della documentazione è verificato della procedura di generazione
|
|
|
|
+del kernel quando viene richiesto di effettuare dei controlli extra con GCC::
|
|
|
|
+
|
|
|
|
+ make W=n
|
|
|
|
+
|
|
|
|
+Documentare le funzioni
|
|
|
|
+------------------------
|
|
|
|
+
|
|
|
|
+Generalmente il formato di un commento kernel-doc per funzioni e
|
|
|
|
+macro simil-funzioni è il seguente::
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 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 foobar.
|
|
|
|
+ *
|
|
|
|
+ * The return value description can also have multiple paragraphs, and should
|
|
|
|
+ * be placed at the end of the comment block.
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+La descrizione introduttiva (*brief description*) che segue il nome della
|
|
|
|
+funzione può continuare su righe successive e termina con la descrizione di
|
|
|
|
+un argomento, una linea di commento vuota, oppure la fine del commento.
|
|
|
|
+
|
|
|
|
+Parametri delle funzioni
|
|
|
|
+~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
+
|
|
|
|
+Ogni argomento di una funzione dovrebbe essere descritto in ordine, subito
|
|
|
|
+dopo la descrizione introduttiva. Non lasciare righe vuote né fra la
|
|
|
|
+descrizione introduttiva e quella degli argomenti, né fra gli argomenti.
|
|
|
|
+
|
|
|
|
+Ogni ``@argument:`` può estendersi su più righe.
|
|
|
|
+
|
|
|
|
+.. note::
|
|
|
|
+
|
|
|
|
+ Se la descrizione di ``@argument:`` si estende su più righe,
|
|
|
|
+ la continuazione dovrebbe iniziare alla stessa colonna della riga
|
|
|
|
+ precedente::
|
|
|
|
+
|
|
|
|
+ * @argument: some long description
|
|
|
|
+ * that continues on next lines
|
|
|
|
+
|
|
|
|
+ or::
|
|
|
|
+
|
|
|
|
+ * @argument:
|
|
|
|
+ * some long description
|
|
|
|
+ * that continues on next lines
|
|
|
|
+
|
|
|
|
+Se una funzione ha un numero variabile di argomento, la sua descrizione
|
|
|
|
+dovrebbe essere scritta con la notazione kernel-doc::
|
|
|
|
+
|
|
|
|
+ * @...: description
|
|
|
|
+
|
|
|
|
+Contesto delle funzioni
|
|
|
|
+~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
+
|
|
|
|
+Il contesto in cui le funzioni vengono chiamate viene descritto in una
|
|
|
|
+sezione chiamata ``Context``. Questo dovrebbe informare sulla possibilità
|
|
|
|
+che una funzione dorma (*sleep*) o che possa essere chiamata in un contesto
|
|
|
|
+d'interruzione, così come i *lock* che prende, rilascia e che si aspetta che
|
|
|
|
+vengano presi dal chiamante.
|
|
|
|
+
|
|
|
|
+Esempi::
|
|
|
|
+
|
|
|
|
+ * 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.
|
|
|
|
+
|
|
|
|
+Valore di ritorno
|
|
|
|
+~~~~~~~~~~~~~~~~~
|
|
|
|
+
|
|
|
|
+Il valore di ritorno, se c'è, viene descritto in una sezione dedicata di nome
|
|
|
|
+``Return``.
|
|
|
|
+
|
|
|
|
+.. note::
|
|
|
|
+
|
|
|
|
+ #) La descrizione multiriga non riconosce il termine d'una riga, per cui
|
|
|
|
+ se provate a formattare bene il vostro testo come nel seguente esempio::
|
|
|
|
+
|
|
|
|
+ * Return:
|
|
|
|
+ * 0 - OK
|
|
|
|
+ * -EINVAL - invalid argument
|
|
|
|
+ * -ENOMEM - out of memory
|
|
|
|
+
|
|
|
|
+ le righe verranno unite e il risultato sarà::
|
|
|
|
+
|
|
|
|
+ Return: 0 - OK -EINVAL - invalid argument -ENOMEM - out of memory
|
|
|
|
+
|
|
|
|
+ Quindi, se volete che le righe vengano effettivamente generate, dovete
|
|
|
|
+ utilizzare una lista ReST, ad esempio::
|
|
|
|
+
|
|
|
|
+ * Return:
|
|
|
|
+ * * 0 - OK to runtime suspend the device
|
|
|
|
+ * * -EBUSY - Device should not be runtime suspended
|
|
|
|
+
|
|
|
|
+ #) Se il vostro testo ha delle righe che iniziano con una frase seguita dai
|
|
|
|
+ due punti, allora ognuna di queste frasi verrà considerata come il nome
|
|
|
|
+ di una nuova sezione, e probabilmente non produrrà gli effetti desiderati.
|
|
|
|
+
|
|
|
|
+Documentare strutture, unioni ed enumerazioni
|
|
|
|
+---------------------------------------------
|
|
|
|
+
|
|
|
|
+Generalmente il formato di un commento kernel-doc per struct, union ed enum è::
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 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.
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+Nell'esempio qui sopra, potete sostituire ``struct`` con ``union`` o ``enum``
|
|
|
|
+per descrivere unioni ed enumerati. ``member`` viene usato per indicare i
|
|
|
|
+membri di strutture ed unioni, ma anche i valori di un tipo enumerato.
|
|
|
|
+
|
|
|
|
+La descrizione introduttiva (*brief description*) che segue il nome della
|
|
|
|
+funzione può continuare su righe successive e termina con la descrizione di
|
|
|
|
+un argomento, una linea di commento vuota, oppure la fine del commento.
|
|
|
|
+
|
|
|
|
+Membri
|
|
|
|
+~~~~~~
|
|
|
|
+
|
|
|
|
+I membri di strutture, unioni ed enumerati devo essere documentati come i
|
|
|
|
+parametri delle funzioni; seguono la descrizione introduttiva e possono
|
|
|
|
+estendersi su più righe.
|
|
|
|
+
|
|
|
|
+All'interno d'una struttura o d'un unione, potete utilizzare le etichette
|
|
|
|
+``private:`` e ``public:``. I campi che sono nell'area ``private:`` non
|
|
|
|
+verranno inclusi nella documentazione finale.
|
|
|
|
+
|
|
|
|
+Le etichette ``private:`` e ``public:`` devono essere messe subito dopo
|
|
|
|
+il marcatore di un commento ``/*``. Opzionalmente, possono includere commenti
|
|
|
|
+fra ``:`` e il marcatore di fine commento ``*/``.
|
|
|
|
+
|
|
|
|
+Esempio::
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 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;
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+Strutture ed unioni annidate
|
|
|
|
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
+
|
|
|
|
+È possibile documentare strutture ed unioni annidate, ad esempio::
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 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;
|
|
|
|
+ int memb2;
|
|
|
|
+ }
|
|
|
|
+ struct {
|
|
|
|
+ void *memb3;
|
|
|
|
+ int memb4;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ union {
|
|
|
|
+ struct {
|
|
|
|
+ int memb1;
|
|
|
|
+ int memb2;
|
|
|
|
+ } st1;
|
|
|
|
+ struct {
|
|
|
|
+ void *memb1;
|
|
|
|
+ int memb2;
|
|
|
|
+ } st2;
|
|
|
|
+ } bar;
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+.. note::
|
|
|
|
+
|
|
|
|
+ #) Quando documentate una struttura od unione annidata, ad esempio
|
|
|
|
+ di nome ``foo``, il suo campo ``bar`` dev'essere documentato
|
|
|
|
+ usando ``@foo.bar:``
|
|
|
|
+ #) Quando la struttura od unione annidata è anonima, il suo campo
|
|
|
|
+ ``bar`` dev'essere documentato usando ``@bar:``
|
|
|
|
+
|
|
|
|
+Commenti in linea per la documentazione dei membri
|
|
|
|
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
+
|
|
|
|
+I membri d'una struttura possono essere documentati in linea all'interno
|
|
|
|
+della definizione stessa. Ci sono due stili: una singola riga di commento
|
|
|
|
+che inizia con ``/**`` e finisce con ``*/``; commenti multi riga come
|
|
|
|
+qualsiasi altro commento kernel-doc::
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 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;
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+Documentazione dei tipi di dato
|
|
|
|
+-------------------------------
|
|
|
|
+Generalmente il formato di un commento kernel-doc per typedef è
|
|
|
|
+il seguente::
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * typedef type_name - Brief description.
|
|
|
|
+ *
|
|
|
|
+ * Description of the type.
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+Anche i tipi di dato per prototipi di funzione possono essere documentati::
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * typedef type_name - Brief description.
|
|
|
|
+ * @arg1: description of arg1
|
|
|
|
+ * @arg2: description of arg2
|
|
|
|
+ *
|
|
|
|
+ * Description of the type.
|
|
|
|
+ *
|
|
|
|
+ * Context: Locking context.
|
|
|
|
+ * Return: Meaning of the return value.
|
|
|
|
+ */
|
|
|
|
+ typedef void (*type_name)(struct v4l2_ctrl *arg1, void *arg2);
|
|
|
|
+
|
|
|
|
+Marcatori e riferimenti
|
|
|
|
+-----------------------
|
|
|
|
+
|
|
|
|
+All'interno dei commenti di tipo kernel-doc vengono riconosciuti i seguenti
|
|
|
|
+*pattern* che vengono convertiti in marcatori reStructuredText ed in riferimenti
|
|
|
|
+del `dominio Sphinx per il C`_.
|
|
|
|
+
|
|
|
|
+.. attention:: Questi sono riconosciuti **solo** all'interno di commenti
|
|
|
|
+ kernel-doc, e **non** all'interno di documenti reStructuredText.
|
|
|
|
+
|
|
|
|
+``funcname()``
|
|
|
|
+ Riferimento ad una funzione.
|
|
|
|
+
|
|
|
|
+``@parameter``
|
|
|
|
+ Nome di un parametro di una funzione (nessun riferimento, solo formattazione).
|
|
|
|
+
|
|
|
|
+``%CONST``
|
|
|
|
+ Il nome di una costante (nessun riferimento, solo formattazione)
|
|
|
|
+
|
|
|
|
+````literal````
|
|
|
|
+ Un blocco di testo che deve essere riportato così com'è. La rappresentazione
|
|
|
|
+ finale utilizzerà caratteri a ``spaziatura fissa``.
|
|
|
|
+
|
|
|
|
+ Questo è utile se dovete utilizzare caratteri speciali che altrimenti
|
|
|
|
+ potrebbero assumere un significato diverso in kernel-doc o in reStructuredText
|
|
|
|
+
|
|
|
|
+ Questo è particolarmente utile se dovete scrivere qualcosa come ``%ph``
|
|
|
|
+ all'interno della descrizione di una funzione.
|
|
|
|
+
|
|
|
|
+``$ENVVAR``
|
|
|
|
+ Il nome di una variabile d'ambiente (nessun riferimento, solo formattazione).
|
|
|
|
+
|
|
|
|
+``&struct name``
|
|
|
|
+ Riferimento ad una struttura.
|
|
|
|
+
|
|
|
|
+``&enum name``
|
|
|
|
+ Riferimento ad un'enumerazione.
|
|
|
|
+
|
|
|
|
+``&typedef name``
|
|
|
|
+ Riferimento ad un tipo di dato.
|
|
|
|
+
|
|
|
|
+``&struct_name->member`` or ``&struct_name.member``
|
|
|
|
+ Riferimento ad un membro di una struttura o di un'unione. Il riferimento sarà
|
|
|
|
+ la struttura o l'unione, non il memembro.
|
|
|
|
+
|
|
|
|
+``&name``
|
|
|
|
+ Un generico riferimento ad un tipo. Usate, preferibilmente, il riferimento
|
|
|
|
+ completo come descritto sopra. Questo è dedicato ai commenti obsoleti.
|
|
|
|
+
|
|
|
|
+Riferimenti usando reStructuredText
|
|
|
|
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
+
|
|
|
|
+Per fare riferimento a funzioni e tipi di dato definiti nei commenti kernel-doc
|
|
|
|
+all'interno dei documenti reStructuredText, utilizzate i riferimenti dal
|
|
|
|
+`dominio Sphinx per il C`_. Per esempio::
|
|
|
|
+
|
|
|
|
+ See function :c:func:`foo` and struct/union/enum/typedef :c:type:`bar`.
|
|
|
|
+
|
|
|
|
+Nonostante il riferimento ai tipi di dato funzioni col solo nome,
|
|
|
|
+ovvero senza specificare struct/union/enum/typedef, potreste preferire il
|
|
|
|
+seguente::
|
|
|
|
+
|
|
|
|
+ See :c:type:`struct foo <foo>`.
|
|
|
|
+ See :c:type:`union bar <bar>`.
|
|
|
|
+ See :c:type:`enum baz <baz>`.
|
|
|
|
+ See :c:type:`typedef meh <meh>`.
|
|
|
|
+
|
|
|
|
+Questo produce dei collegamenti migliori, ed è in linea con il modo in cui
|
|
|
|
+kernel-doc gestisce i riferimenti.
|
|
|
|
+
|
|
|
|
+Per maggiori informazioni, siete pregati di consultare la documentazione
|
|
|
|
+del `dominio Sphinx per il C`_.
|
|
|
|
+
|
|
|
|
+Commenti per una documentazione generale
|
|
|
|
+----------------------------------------
|
|
|
|
+
|
|
|
|
+Al fine d'avere il codice ed i commenti nello stesso file, potete includere
|
|
|
|
+dei blocchi di documentazione kernel-doc con un formato libero invece
|
|
|
|
+che nel formato specifico per funzioni, strutture, unioni, enumerati o tipi
|
|
|
|
+di dato. Per esempio, questo tipo di commento potrebbe essere usato per la
|
|
|
|
+spiegazione delle operazioni di un driver o di una libreria
|
|
|
|
+
|
|
|
|
+Questo s'ottiene utilizzando la parola chiave ``DOC:`` a cui viene associato
|
|
|
|
+un titolo.
|
|
|
|
+
|
|
|
|
+Generalmente il formato di un commento generico o di visione d'insieme è
|
|
|
|
+il seguente::
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 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).
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+Il titolo che segue ``DOC:`` funziona da intestazione all'interno del file
|
|
|
|
+sorgente, ma anche come identificatore per l'estrazione di questi commenti di
|
|
|
|
+documentazione. Quindi, il titolo dev'essere unico all'interno del file.
|
|
|
|
+
|
|
|
|
+Includere i commenti di tipo kernel-doc
|
|
|
|
+=======================================
|
|
|
|
+
|
|
|
|
+I commenti di documentazione possono essere inclusi in un qualsiasi documento
|
|
|
|
+di tipo reStructuredText mediante l'apposita direttiva nell'estensione
|
|
|
|
+kernel-doc per Sphinx.
|
|
|
|
+
|
|
|
|
+Le direttive kernel-doc sono nel formato::
|
|
|
|
+
|
|
|
|
+ .. kernel-doc:: source
|
|
|
|
+ :option:
|
|
|
|
+
|
|
|
|
+Il campo *source* è il percorso ad un file sorgente, relativo alla cartella
|
|
|
|
+principale dei sorgenti del kernel. La direttiva supporta le seguenti opzioni:
|
|
|
|
+
|
|
|
|
+export: *[source-pattern ...]*
|
|
|
|
+ Include la documentazione per tutte le funzioni presenti nel file sorgente
|
|
|
|
+ (*source*) che sono state esportate utilizzando ``EXPORT_SYMBOL`` o
|
|
|
|
+ ``EXPORT_SYMBOL_GPL`` in *source* o in qualsiasi altro *source-pattern*
|
|
|
|
+ specificato.
|
|
|
|
+
|
|
|
|
+ Il campo *source-patter* è utile quando i commenti kernel-doc sono stati
|
|
|
|
+ scritti nei file d'intestazione, mentre ``EXPORT_SYMBOL`` e
|
|
|
|
+ ``EXPORT_SYMBOL_GPL`` si trovano vicino alla definizione delle funzioni.
|
|
|
|
+
|
|
|
|
+ Esempi::
|
|
|
|
+
|
|
|
|
+ .. kernel-doc:: lib/bitmap.c
|
|
|
|
+ :export:
|
|
|
|
+
|
|
|
|
+ .. kernel-doc:: include/net/mac80211.h
|
|
|
|
+ :export: net/mac80211/*.c
|
|
|
|
+
|
|
|
|
+internal: *[source-pattern ...]*
|
|
|
|
+ Include la documentazione per tutte le funzioni ed i tipi presenti nel file
|
|
|
|
+ sorgente (*source*) che **non** sono stati esportati utilizzando
|
|
|
|
+ ``EXPORT_SYMBOL`` o ``EXPORT_SYMBOL_GPL`` né in *source* né in qualsiasi
|
|
|
|
+ altro *source-pattern* specificato.
|
|
|
|
+
|
|
|
|
+ Esempio::
|
|
|
|
+
|
|
|
|
+ .. kernel-doc:: drivers/gpu/drm/i915/intel_audio.c
|
|
|
|
+ :internal:
|
|
|
|
+
|
|
|
|
+doc: *title*
|
|
|
|
+ Include la documentazione del paragrafo ``DOC:`` identificato dal titolo
|
|
|
|
+ (*title*) all'interno del file sorgente (*source*). Gli spazi in *title* sono
|
|
|
|
+ permessi; non virgolettate *title*. Il campo *title* è utilizzato per
|
|
|
|
+ identificare un paragrafo e per questo non viene incluso nella documentazione
|
|
|
|
+ finale. Verificate d'avere l'intestazione appropriata nei documenti
|
|
|
|
+ reStructuredText.
|
|
|
|
+
|
|
|
|
+ Esempio::
|
|
|
|
+
|
|
|
|
+ .. kernel-doc:: drivers/gpu/drm/i915/intel_audio.c
|
|
|
|
+ :doc: High Definition Audio over HDMI and Display Port
|
|
|
|
+
|
|
|
|
+functions: *function* *[...]*
|
|
|
|
+ Dal file sorgente (*source*) include la documentazione per le funzioni
|
|
|
|
+ elencate (*function*).
|
|
|
|
+
|
|
|
|
+ Esempio::
|
|
|
|
+
|
|
|
|
+ .. kernel-doc:: lib/bitmap.c
|
|
|
|
+ :functions: bitmap_parselist bitmap_parselist_user
|
|
|
|
+
|
|
|
|
+Senza alcuna opzione, la direttiva kernel-doc include tutti i commenti di
|
|
|
|
+documentazione presenti nel file sorgente (*source*).
|
|
|
|
+
|
|
|
|
+L'estensione kernel-doc fa parte dei sorgenti del kernel, la si può trovare
|
|
|
|
+in ``Documentation/sphinx/kerneldoc.py``. Internamente, viene utilizzato
|
|
|
|
+lo script ``scripts/kernel-doc`` per estrarre i commenti di documentazione
|
|
|
|
+dai file sorgenti.
|
|
|
|
+
|
|
|
|
+Come utilizzare kernel-doc per generare pagine man
|
|
|
|
+--------------------------------------------------
|
|
|
|
+
|
|
|
|
+Se volete utilizzare kernel-doc solo per generare delle pagine man, potete
|
|
|
|
+farlo direttamente dai sorgenti del kernel::
|
|
|
|
+
|
|
|
|
+ $ scripts/kernel-doc -man $(git grep -l '/\*\*' -- :^Documentation :^tools) | scripts/split-man.pl /tmp/man
|