162306a36Sopenharmony_ci.. include:: ../disclaimer-ita.rst 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci.. note:: Per leggere la documentazione originale in inglese: 462306a36Sopenharmony_ci :ref:`Documentation/doc-guide/index.rst <doc_guide>` 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci.. title:: Commenti in kernel-doc 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci.. _it_kernel_doc: 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci================================= 1162306a36Sopenharmony_ciScrivere i commenti in kernel-doc 1262306a36Sopenharmony_ci================================= 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ciNei file sorgenti del kernel Linux potrete trovare commenti di documentazione 1562306a36Sopenharmony_cistrutturanti secondo il formato kernel-doc. Essi possono descrivere funzioni, 1662306a36Sopenharmony_citipi di dati, e l'architettura del codice. 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci.. note:: Il formato kernel-doc può sembrare simile a gtk-doc o Doxygen ma 1962306a36Sopenharmony_ci in realtà è molto differente per ragioni storiche. I sorgenti del kernel 2062306a36Sopenharmony_ci contengono decine di migliaia di commenti kernel-doc. Siete pregati 2162306a36Sopenharmony_ci d'attenervi allo stile qui descritto. 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ciLa struttura kernel-doc è estratta a partire dai commenti; da questi viene 2462306a36Sopenharmony_cigenerato il `dominio Sphinx per il C`_ con un'adeguata descrizione per le 2562306a36Sopenharmony_cifunzioni ed i tipi di dato con i loro relativi collegamenti. Le descrizioni 2662306a36Sopenharmony_civengono filtrare per cercare i riferimenti ed i marcatori. 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ciVedere di seguito per maggiori dettagli. 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci.. _`dominio Sphinx per il C`: http://www.sphinx-doc.org/en/stable/domains.html 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ciTutte le funzioni esportate verso i moduli esterni utilizzando 3362306a36Sopenharmony_ci``EXPORT_SYMBOL`` o ``EXPORT_SYMBOL_GPL`` dovrebbero avere un commento 3462306a36Sopenharmony_cikernel-doc. Quando l'intenzione è di utilizzarle nei moduli, anche le funzioni 3562306a36Sopenharmony_cie le strutture dati nei file d'intestazione dovrebbero avere dei commenti 3662306a36Sopenharmony_cikernel-doc. 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ciÈ considerata una buona pratica quella di fornire una documentazione formattata 3962306a36Sopenharmony_cisecondo kernel-doc per le funzioni che sono visibili da altri file del kernel 4062306a36Sopenharmony_ci(ovvero, che non siano dichiarate utilizzando ``static``). Raccomandiamo, 4162306a36Sopenharmony_ciinoltre, di fornire una documentazione kernel-doc anche per procedure private 4262306a36Sopenharmony_ci(ovvero, dichiarate "static") al fine di fornire una struttura più coerente 4362306a36Sopenharmony_cidei sorgenti. Quest'ultima raccomandazione ha una priorità più bassa ed è a 4462306a36Sopenharmony_cidiscrezione dal manutentore (MAINTAINER) del file sorgente. 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ciSicuramente la documentazione formattata con kernel-doc è necessaria per 4962306a36Sopenharmony_cile funzioni che sono esportate verso i moduli esterni utilizzando 5062306a36Sopenharmony_ci``EXPORT_SYMBOL`` o ``EXPORT_SYMBOL_GPL``. 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ciCerchiamo anche di fornire una documentazione formattata secondo kernel-doc 5362306a36Sopenharmony_ciper le funzioni che sono visibili da altri file del kernel (ovvero, che non 5462306a36Sopenharmony_cisiano dichiarate utilizzando "static") 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ciRaccomandiamo, inoltre, di fornire una documentazione formattata con kernel-doc 5762306a36Sopenharmony_cianche per procedure private (ovvero, dichiarate "static") al fine di fornire 5862306a36Sopenharmony_ciuna struttura più coerente dei sorgenti. Questa raccomandazione ha una priorità 5962306a36Sopenharmony_cipiù bassa ed è a discrezione dal manutentore (MAINTAINER) del file sorgente. 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ciLe strutture dati visibili nei file di intestazione dovrebbero essere anch'esse 6262306a36Sopenharmony_cidocumentate utilizzando commenti formattati con kernel-doc. 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ciCome formattare i commenti kernel-doc 6562306a36Sopenharmony_ci------------------------------------- 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ciI commenti kernel-doc iniziano con il marcatore ``/**``. Il programma 6862306a36Sopenharmony_ci``kernel-doc`` estrarrà i commenti marchiati in questo modo. Il resto 6962306a36Sopenharmony_cidel commento è formattato come un normale commento multilinea, ovvero 7062306a36Sopenharmony_cicon un asterisco all'inizio d'ogni riga e che si conclude con ``*/`` 7162306a36Sopenharmony_cisu una riga separata. 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ciI commenti kernel-doc di funzioni e tipi dovrebbero essere posizionati 7462306a36Sopenharmony_ciappena sopra la funzione od il tipo che descrivono. Questo allo scopo di 7562306a36Sopenharmony_ciaumentare la probabilità che chi cambia il codice si ricordi di aggiornare 7662306a36Sopenharmony_cianche la documentazione. I commenti kernel-doc di tipo più generale possono 7762306a36Sopenharmony_ciessere posizionati ovunque nel file. 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ciAl fine di verificare che i commenti siano formattati correttamente, potete 8062306a36Sopenharmony_cieseguire il programma ``kernel-doc`` con un livello di verbosità alto e senza 8162306a36Sopenharmony_ciche questo produca alcuna documentazione. Per esempio:: 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci scripts/kernel-doc -v -none drivers/foo/bar.c 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ciIl formato della documentazione è verificato della procedura di generazione 8662306a36Sopenharmony_cidel kernel quando viene richiesto di effettuare dei controlli extra con GCC:: 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci make W=n 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ciDocumentare le funzioni 9162306a36Sopenharmony_ci------------------------ 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ciGeneralmente il formato di un commento kernel-doc per funzioni e 9462306a36Sopenharmony_cimacro simil-funzioni è il seguente:: 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ci /** 9762306a36Sopenharmony_ci * function_name() - Brief description of function. 9862306a36Sopenharmony_ci * @arg1: Describe the first argument. 9962306a36Sopenharmony_ci * @arg2: Describe the second argument. 10062306a36Sopenharmony_ci * One can provide multiple line descriptions 10162306a36Sopenharmony_ci * for arguments. 10262306a36Sopenharmony_ci * 10362306a36Sopenharmony_ci * A longer description, with more discussion of the function function_name() 10462306a36Sopenharmony_ci * that might be useful to those using or modifying it. Begins with an 10562306a36Sopenharmony_ci * empty comment line, and may include additional embedded empty 10662306a36Sopenharmony_ci * comment lines. 10762306a36Sopenharmony_ci * 10862306a36Sopenharmony_ci * The longer description may have multiple paragraphs. 10962306a36Sopenharmony_ci * 11062306a36Sopenharmony_ci * Context: Describes whether the function can sleep, what locks it takes, 11162306a36Sopenharmony_ci * releases, or expects to be held. It can extend over multiple 11262306a36Sopenharmony_ci * lines. 11362306a36Sopenharmony_ci * Return: Describe the return value of function_name. 11462306a36Sopenharmony_ci * 11562306a36Sopenharmony_ci * The return value description can also have multiple paragraphs, and should 11662306a36Sopenharmony_ci * be placed at the end of the comment block. 11762306a36Sopenharmony_ci */ 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_ciLa descrizione introduttiva (*brief description*) che segue il nome della 12062306a36Sopenharmony_cifunzione può continuare su righe successive e termina con la descrizione di 12162306a36Sopenharmony_ciun argomento, una linea di commento vuota, oppure la fine del commento. 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ciParametri delle funzioni 12462306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~ 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_ciOgni argomento di una funzione dovrebbe essere descritto in ordine, subito 12762306a36Sopenharmony_cidopo la descrizione introduttiva. Non lasciare righe vuote né fra la 12862306a36Sopenharmony_cidescrizione introduttiva e quella degli argomenti, né fra gli argomenti. 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ciOgni ``@argument:`` può estendersi su più righe. 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci.. note:: 13362306a36Sopenharmony_ci 13462306a36Sopenharmony_ci Se la descrizione di ``@argument:`` si estende su più righe, 13562306a36Sopenharmony_ci la continuazione dovrebbe iniziare alla stessa colonna della riga 13662306a36Sopenharmony_ci precedente:: 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_ci * @argument: some long description 13962306a36Sopenharmony_ci * that continues on next lines 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci or:: 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ci * @argument: 14462306a36Sopenharmony_ci * some long description 14562306a36Sopenharmony_ci * that continues on next lines 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_ciSe una funzione ha un numero variabile di argomento, la sua descrizione 14862306a36Sopenharmony_cidovrebbe essere scritta con la notazione kernel-doc:: 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_ci * @...: description 15162306a36Sopenharmony_ci 15262306a36Sopenharmony_ciContesto delle funzioni 15362306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~ 15462306a36Sopenharmony_ci 15562306a36Sopenharmony_ciIl contesto in cui le funzioni vengono chiamate viene descritto in una 15662306a36Sopenharmony_cisezione chiamata ``Context``. Questo dovrebbe informare sulla possibilità 15762306a36Sopenharmony_ciche una funzione dorma (*sleep*) o che possa essere chiamata in un contesto 15862306a36Sopenharmony_cid'interruzione, così come i *lock* che prende, rilascia e che si aspetta che 15962306a36Sopenharmony_civengano presi dal chiamante. 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ciEsempi:: 16262306a36Sopenharmony_ci 16362306a36Sopenharmony_ci * Context: Any context. 16462306a36Sopenharmony_ci * Context: Any context. Takes and releases the RCU lock. 16562306a36Sopenharmony_ci * Context: Any context. Expects <lock> to be held by caller. 16662306a36Sopenharmony_ci * Context: Process context. May sleep if @gfp flags permit. 16762306a36Sopenharmony_ci * Context: Process context. Takes and releases <mutex>. 16862306a36Sopenharmony_ci * Context: Softirq or process context. Takes and releases <lock>, BH-safe. 16962306a36Sopenharmony_ci * Context: Interrupt context. 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ciValore di ritorno 17262306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~ 17362306a36Sopenharmony_ci 17462306a36Sopenharmony_ciIl valore di ritorno, se c'è, viene descritto in una sezione dedicata di nome 17562306a36Sopenharmony_ci``Return``. 17662306a36Sopenharmony_ci 17762306a36Sopenharmony_ci.. note:: 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_ci #) La descrizione multiriga non riconosce il termine d'una riga, per cui 18062306a36Sopenharmony_ci se provate a formattare bene il vostro testo come nel seguente esempio:: 18162306a36Sopenharmony_ci 18262306a36Sopenharmony_ci * Return: 18362306a36Sopenharmony_ci * 0 - OK 18462306a36Sopenharmony_ci * -EINVAL - invalid argument 18562306a36Sopenharmony_ci * -ENOMEM - out of memory 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_ci le righe verranno unite e il risultato sarà:: 18862306a36Sopenharmony_ci 18962306a36Sopenharmony_ci Return: 0 - OK -EINVAL - invalid argument -ENOMEM - out of memory 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ci Quindi, se volete che le righe vengano effettivamente generate, dovete 19262306a36Sopenharmony_ci utilizzare una lista ReST, ad esempio:: 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_ci * Return: 19562306a36Sopenharmony_ci * * 0 - OK to runtime suspend the device 19662306a36Sopenharmony_ci * * -EBUSY - Device should not be runtime suspended 19762306a36Sopenharmony_ci 19862306a36Sopenharmony_ci #) Se il vostro testo ha delle righe che iniziano con una frase seguita dai 19962306a36Sopenharmony_ci due punti, allora ognuna di queste frasi verrà considerata come il nome 20062306a36Sopenharmony_ci di una nuova sezione, e probabilmente non produrrà gli effetti desiderati. 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_ciDocumentare strutture, unioni ed enumerazioni 20362306a36Sopenharmony_ci--------------------------------------------- 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_ciGeneralmente il formato di un commento kernel-doc per struct, union ed enum è:: 20662306a36Sopenharmony_ci 20762306a36Sopenharmony_ci /** 20862306a36Sopenharmony_ci * struct struct_name - Brief description. 20962306a36Sopenharmony_ci * @member1: Description of member1. 21062306a36Sopenharmony_ci * @member2: Description of member2. 21162306a36Sopenharmony_ci * One can provide multiple line descriptions 21262306a36Sopenharmony_ci * for members. 21362306a36Sopenharmony_ci * 21462306a36Sopenharmony_ci * Description of the structure. 21562306a36Sopenharmony_ci */ 21662306a36Sopenharmony_ci 21762306a36Sopenharmony_ciNell'esempio qui sopra, potete sostituire ``struct`` con ``union`` o ``enum`` 21862306a36Sopenharmony_ciper descrivere unioni ed enumerati. ``member`` viene usato per indicare i 21962306a36Sopenharmony_cimembri di strutture ed unioni, ma anche i valori di un tipo enumerato. 22062306a36Sopenharmony_ci 22162306a36Sopenharmony_ciLa descrizione introduttiva (*brief description*) che segue il nome della 22262306a36Sopenharmony_cifunzione può continuare su righe successive e termina con la descrizione di 22362306a36Sopenharmony_ciun argomento, una linea di commento vuota, oppure la fine del commento. 22462306a36Sopenharmony_ci 22562306a36Sopenharmony_ciMembri 22662306a36Sopenharmony_ci~~~~~~ 22762306a36Sopenharmony_ci 22862306a36Sopenharmony_ciI membri di strutture, unioni ed enumerati devo essere documentati come i 22962306a36Sopenharmony_ciparametri delle funzioni; seguono la descrizione introduttiva e possono 23062306a36Sopenharmony_ciestendersi su più righe. 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_ciAll'interno d'una struttura o d'un unione, potete utilizzare le etichette 23362306a36Sopenharmony_ci``private:`` e ``public:``. I campi che sono nell'area ``private:`` non 23462306a36Sopenharmony_civerranno inclusi nella documentazione finale. 23562306a36Sopenharmony_ci 23662306a36Sopenharmony_ciLe etichette ``private:`` e ``public:`` devono essere messe subito dopo 23762306a36Sopenharmony_ciil marcatore di un commento ``/*``. Opzionalmente, possono includere commenti 23862306a36Sopenharmony_cifra ``:`` e il marcatore di fine commento ``*/``. 23962306a36Sopenharmony_ci 24062306a36Sopenharmony_ciEsempio:: 24162306a36Sopenharmony_ci 24262306a36Sopenharmony_ci /** 24362306a36Sopenharmony_ci * struct my_struct - short description 24462306a36Sopenharmony_ci * @a: first member 24562306a36Sopenharmony_ci * @b: second member 24662306a36Sopenharmony_ci * @d: fourth member 24762306a36Sopenharmony_ci * 24862306a36Sopenharmony_ci * Longer description 24962306a36Sopenharmony_ci */ 25062306a36Sopenharmony_ci struct my_struct { 25162306a36Sopenharmony_ci int a; 25262306a36Sopenharmony_ci int b; 25362306a36Sopenharmony_ci /* private: internal use only */ 25462306a36Sopenharmony_ci int c; 25562306a36Sopenharmony_ci /* public: the next one is public */ 25662306a36Sopenharmony_ci int d; 25762306a36Sopenharmony_ci }; 25862306a36Sopenharmony_ci 25962306a36Sopenharmony_ciStrutture ed unioni annidate 26062306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_ciÈ possibile documentare strutture ed unioni annidate, ad esempio:: 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_ci /** 26562306a36Sopenharmony_ci * struct nested_foobar - a struct with nested unions and structs 26662306a36Sopenharmony_ci * @memb1: first member of anonymous union/anonymous struct 26762306a36Sopenharmony_ci * @memb2: second member of anonymous union/anonymous struct 26862306a36Sopenharmony_ci * @memb3: third member of anonymous union/anonymous struct 26962306a36Sopenharmony_ci * @memb4: fourth member of anonymous union/anonymous struct 27062306a36Sopenharmony_ci * @bar: non-anonymous union 27162306a36Sopenharmony_ci * @bar.st1: struct st1 inside @bar 27262306a36Sopenharmony_ci * @bar.st2: struct st2 inside @bar 27362306a36Sopenharmony_ci * @bar.st1.memb1: first member of struct st1 on union bar 27462306a36Sopenharmony_ci * @bar.st1.memb2: second member of struct st1 on union bar 27562306a36Sopenharmony_ci * @bar.st2.memb1: first member of struct st2 on union bar 27662306a36Sopenharmony_ci * @bar.st2.memb2: second member of struct st2 on union bar 27762306a36Sopenharmony_ci */ 27862306a36Sopenharmony_ci struct nested_foobar { 27962306a36Sopenharmony_ci /* Anonymous union/struct*/ 28062306a36Sopenharmony_ci union { 28162306a36Sopenharmony_ci struct { 28262306a36Sopenharmony_ci int memb1; 28362306a36Sopenharmony_ci int memb2; 28462306a36Sopenharmony_ci } 28562306a36Sopenharmony_ci struct { 28662306a36Sopenharmony_ci void *memb3; 28762306a36Sopenharmony_ci int memb4; 28862306a36Sopenharmony_ci } 28962306a36Sopenharmony_ci } 29062306a36Sopenharmony_ci union { 29162306a36Sopenharmony_ci struct { 29262306a36Sopenharmony_ci int memb1; 29362306a36Sopenharmony_ci int memb2; 29462306a36Sopenharmony_ci } st1; 29562306a36Sopenharmony_ci struct { 29662306a36Sopenharmony_ci void *memb1; 29762306a36Sopenharmony_ci int memb2; 29862306a36Sopenharmony_ci } st2; 29962306a36Sopenharmony_ci } bar; 30062306a36Sopenharmony_ci }; 30162306a36Sopenharmony_ci 30262306a36Sopenharmony_ci.. note:: 30362306a36Sopenharmony_ci 30462306a36Sopenharmony_ci #) Quando documentate una struttura od unione annidata, ad esempio 30562306a36Sopenharmony_ci di nome ``foo``, il suo campo ``bar`` dev'essere documentato 30662306a36Sopenharmony_ci usando ``@foo.bar:`` 30762306a36Sopenharmony_ci #) Quando la struttura od unione annidata è anonima, il suo campo 30862306a36Sopenharmony_ci ``bar`` dev'essere documentato usando ``@bar:`` 30962306a36Sopenharmony_ci 31062306a36Sopenharmony_ciCommenti in linea per la documentazione dei membri 31162306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 31262306a36Sopenharmony_ci 31362306a36Sopenharmony_ciI membri d'una struttura possono essere documentati in linea all'interno 31462306a36Sopenharmony_cidella definizione stessa. Ci sono due stili: una singola riga di commento 31562306a36Sopenharmony_ciche inizia con ``/**`` e finisce con ``*/``; commenti multi riga come 31662306a36Sopenharmony_ciqualsiasi altro commento kernel-doc:: 31762306a36Sopenharmony_ci 31862306a36Sopenharmony_ci /** 31962306a36Sopenharmony_ci * struct foo - Brief description. 32062306a36Sopenharmony_ci * @foo: The Foo member. 32162306a36Sopenharmony_ci */ 32262306a36Sopenharmony_ci struct foo { 32362306a36Sopenharmony_ci int foo; 32462306a36Sopenharmony_ci /** 32562306a36Sopenharmony_ci * @bar: The Bar member. 32662306a36Sopenharmony_ci */ 32762306a36Sopenharmony_ci int bar; 32862306a36Sopenharmony_ci /** 32962306a36Sopenharmony_ci * @baz: The Baz member. 33062306a36Sopenharmony_ci * 33162306a36Sopenharmony_ci * Here, the member description may contain several paragraphs. 33262306a36Sopenharmony_ci */ 33362306a36Sopenharmony_ci int baz; 33462306a36Sopenharmony_ci union { 33562306a36Sopenharmony_ci /** @foobar: Single line description. */ 33662306a36Sopenharmony_ci int foobar; 33762306a36Sopenharmony_ci }; 33862306a36Sopenharmony_ci /** @bar2: Description for struct @bar2 inside @foo */ 33962306a36Sopenharmony_ci struct { 34062306a36Sopenharmony_ci /** 34162306a36Sopenharmony_ci * @bar2.barbar: Description for @barbar inside @foo.bar2 34262306a36Sopenharmony_ci */ 34362306a36Sopenharmony_ci int barbar; 34462306a36Sopenharmony_ci } bar2; 34562306a36Sopenharmony_ci }; 34662306a36Sopenharmony_ci 34762306a36Sopenharmony_ci 34862306a36Sopenharmony_ciDocumentazione dei tipi di dato 34962306a36Sopenharmony_ci------------------------------- 35062306a36Sopenharmony_ciGeneralmente il formato di un commento kernel-doc per typedef è 35162306a36Sopenharmony_ciil seguente:: 35262306a36Sopenharmony_ci 35362306a36Sopenharmony_ci /** 35462306a36Sopenharmony_ci * typedef type_name - Brief description. 35562306a36Sopenharmony_ci * 35662306a36Sopenharmony_ci * Description of the type. 35762306a36Sopenharmony_ci */ 35862306a36Sopenharmony_ci 35962306a36Sopenharmony_ciAnche i tipi di dato per prototipi di funzione possono essere documentati:: 36062306a36Sopenharmony_ci 36162306a36Sopenharmony_ci /** 36262306a36Sopenharmony_ci * typedef type_name - Brief description. 36362306a36Sopenharmony_ci * @arg1: description of arg1 36462306a36Sopenharmony_ci * @arg2: description of arg2 36562306a36Sopenharmony_ci * 36662306a36Sopenharmony_ci * Description of the type. 36762306a36Sopenharmony_ci * 36862306a36Sopenharmony_ci * Context: Locking context. 36962306a36Sopenharmony_ci * Return: Meaning of the return value. 37062306a36Sopenharmony_ci */ 37162306a36Sopenharmony_ci typedef void (*type_name)(struct v4l2_ctrl *arg1, void *arg2); 37262306a36Sopenharmony_ci 37362306a36Sopenharmony_ciMarcatori e riferimenti 37462306a36Sopenharmony_ci----------------------- 37562306a36Sopenharmony_ci 37662306a36Sopenharmony_ciAll'interno dei commenti di tipo kernel-doc vengono riconosciuti i seguenti 37762306a36Sopenharmony_ci*pattern* che vengono convertiti in marcatori reStructuredText ed in riferimenti 37862306a36Sopenharmony_cidel `dominio Sphinx per il C`_. 37962306a36Sopenharmony_ci 38062306a36Sopenharmony_ci.. attention:: Questi sono riconosciuti **solo** all'interno di commenti 38162306a36Sopenharmony_ci kernel-doc, e **non** all'interno di documenti reStructuredText. 38262306a36Sopenharmony_ci 38362306a36Sopenharmony_ci``funcname()`` 38462306a36Sopenharmony_ci Riferimento ad una funzione. 38562306a36Sopenharmony_ci 38662306a36Sopenharmony_ci``@parameter`` 38762306a36Sopenharmony_ci Nome di un parametro di una funzione (nessun riferimento, solo formattazione). 38862306a36Sopenharmony_ci 38962306a36Sopenharmony_ci``%CONST`` 39062306a36Sopenharmony_ci Il nome di una costante (nessun riferimento, solo formattazione) 39162306a36Sopenharmony_ci 39262306a36Sopenharmony_ci````literal```` 39362306a36Sopenharmony_ci Un blocco di testo che deve essere riportato così com'è. La rappresentazione 39462306a36Sopenharmony_ci finale utilizzerà caratteri a ``spaziatura fissa``. 39562306a36Sopenharmony_ci 39662306a36Sopenharmony_ci Questo è utile se dovete utilizzare caratteri speciali che altrimenti 39762306a36Sopenharmony_ci potrebbero assumere un significato diverso in kernel-doc o in reStructuredText 39862306a36Sopenharmony_ci 39962306a36Sopenharmony_ci Questo è particolarmente utile se dovete scrivere qualcosa come ``%ph`` 40062306a36Sopenharmony_ci all'interno della descrizione di una funzione. 40162306a36Sopenharmony_ci 40262306a36Sopenharmony_ci``$ENVVAR`` 40362306a36Sopenharmony_ci Il nome di una variabile d'ambiente (nessun riferimento, solo formattazione). 40462306a36Sopenharmony_ci 40562306a36Sopenharmony_ci``&struct name`` 40662306a36Sopenharmony_ci Riferimento ad una struttura. 40762306a36Sopenharmony_ci 40862306a36Sopenharmony_ci``&enum name`` 40962306a36Sopenharmony_ci Riferimento ad un'enumerazione. 41062306a36Sopenharmony_ci 41162306a36Sopenharmony_ci``&typedef name`` 41262306a36Sopenharmony_ci Riferimento ad un tipo di dato. 41362306a36Sopenharmony_ci 41462306a36Sopenharmony_ci``&struct_name->member`` or ``&struct_name.member`` 41562306a36Sopenharmony_ci Riferimento ad un membro di una struttura o di un'unione. Il riferimento sarà 41662306a36Sopenharmony_ci la struttura o l'unione, non il memembro. 41762306a36Sopenharmony_ci 41862306a36Sopenharmony_ci``&name`` 41962306a36Sopenharmony_ci Un generico riferimento ad un tipo. Usate, preferibilmente, il riferimento 42062306a36Sopenharmony_ci completo come descritto sopra. Questo è dedicato ai commenti obsoleti. 42162306a36Sopenharmony_ci 42262306a36Sopenharmony_ciRiferimenti usando reStructuredText 42362306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 42462306a36Sopenharmony_ci 42562306a36Sopenharmony_ciNei documenti reStructuredText non serve alcuna sintassi speciale per 42662306a36Sopenharmony_cifare riferimento a funzioni e tipi definiti nei commenti 42762306a36Sopenharmony_cikernel-doc. Sarà sufficiente terminare i nomi di funzione con ``()``, 42862306a36Sopenharmony_cie scrivere ``struct``, ``union``, ``enum``, o ``typedef`` prima di un 42962306a36Sopenharmony_citipo. Per esempio:: 43062306a36Sopenharmony_ci 43162306a36Sopenharmony_ci See foo() 43262306a36Sopenharmony_ci See struct foo. 43362306a36Sopenharmony_ci See union bar. 43462306a36Sopenharmony_ci See enum baz. 43562306a36Sopenharmony_ci See typedef meh. 43662306a36Sopenharmony_ci 43762306a36Sopenharmony_ciTuttavia, la personalizzazione dei collegamenti è possibile solo con 43862306a36Sopenharmony_cila seguente sintassi:: 43962306a36Sopenharmony_ci 44062306a36Sopenharmony_ci See :c:func:`my custom link text for function foo <foo>`. 44162306a36Sopenharmony_ci See :c:type:`my custom link text for struct bar <bar>`. 44262306a36Sopenharmony_ci 44362306a36Sopenharmony_ci 44462306a36Sopenharmony_ciCommenti per una documentazione generale 44562306a36Sopenharmony_ci---------------------------------------- 44662306a36Sopenharmony_ci 44762306a36Sopenharmony_ciAl fine d'avere il codice ed i commenti nello stesso file, potete includere 44862306a36Sopenharmony_cidei blocchi di documentazione kernel-doc con un formato libero invece 44962306a36Sopenharmony_ciche nel formato specifico per funzioni, strutture, unioni, enumerati o tipi 45062306a36Sopenharmony_cidi dato. Per esempio, questo tipo di commento potrebbe essere usato per la 45162306a36Sopenharmony_cispiegazione delle operazioni di un driver o di una libreria 45262306a36Sopenharmony_ci 45362306a36Sopenharmony_ciQuesto s'ottiene utilizzando la parola chiave ``DOC:`` a cui viene associato 45462306a36Sopenharmony_ciun titolo. 45562306a36Sopenharmony_ci 45662306a36Sopenharmony_ciGeneralmente il formato di un commento generico o di visione d'insieme è 45762306a36Sopenharmony_ciil seguente:: 45862306a36Sopenharmony_ci 45962306a36Sopenharmony_ci /** 46062306a36Sopenharmony_ci * DOC: Theory of Operation 46162306a36Sopenharmony_ci * 46262306a36Sopenharmony_ci * The whizbang foobar is a dilly of a gizmo. It can do whatever you 46362306a36Sopenharmony_ci * want it to do, at any time. It reads your mind. Here's how it works. 46462306a36Sopenharmony_ci * 46562306a36Sopenharmony_ci * foo bar splat 46662306a36Sopenharmony_ci * 46762306a36Sopenharmony_ci * The only drawback to this gizmo is that is can sometimes damage 46862306a36Sopenharmony_ci * hardware, software, or its subject(s). 46962306a36Sopenharmony_ci */ 47062306a36Sopenharmony_ci 47162306a36Sopenharmony_ciIl titolo che segue ``DOC:`` funziona da intestazione all'interno del file 47262306a36Sopenharmony_cisorgente, ma anche come identificatore per l'estrazione di questi commenti di 47362306a36Sopenharmony_cidocumentazione. Quindi, il titolo dev'essere unico all'interno del file. 47462306a36Sopenharmony_ci 47562306a36Sopenharmony_ci======================================= 47662306a36Sopenharmony_ciIncludere i commenti di tipo kernel-doc 47762306a36Sopenharmony_ci======================================= 47862306a36Sopenharmony_ci 47962306a36Sopenharmony_ciI commenti di documentazione possono essere inclusi in un qualsiasi documento 48062306a36Sopenharmony_cidi tipo reStructuredText mediante l'apposita direttiva nell'estensione 48162306a36Sopenharmony_cikernel-doc per Sphinx. 48262306a36Sopenharmony_ci 48362306a36Sopenharmony_ciLe direttive kernel-doc sono nel formato:: 48462306a36Sopenharmony_ci 48562306a36Sopenharmony_ci .. kernel-doc:: source 48662306a36Sopenharmony_ci :option: 48762306a36Sopenharmony_ci 48862306a36Sopenharmony_ciIl campo *source* è il percorso ad un file sorgente, relativo alla cartella 48962306a36Sopenharmony_ciprincipale dei sorgenti del kernel. La direttiva supporta le seguenti opzioni: 49062306a36Sopenharmony_ci 49162306a36Sopenharmony_ciexport: *[source-pattern ...]* 49262306a36Sopenharmony_ci Include la documentazione per tutte le funzioni presenti nel file sorgente 49362306a36Sopenharmony_ci (*source*) che sono state esportate utilizzando ``EXPORT_SYMBOL`` o 49462306a36Sopenharmony_ci ``EXPORT_SYMBOL_GPL`` in *source* o in qualsiasi altro *source-pattern* 49562306a36Sopenharmony_ci specificato. 49662306a36Sopenharmony_ci 49762306a36Sopenharmony_ci Il campo *source-patter* è utile quando i commenti kernel-doc sono stati 49862306a36Sopenharmony_ci scritti nei file d'intestazione, mentre ``EXPORT_SYMBOL`` e 49962306a36Sopenharmony_ci ``EXPORT_SYMBOL_GPL`` si trovano vicino alla definizione delle funzioni. 50062306a36Sopenharmony_ci 50162306a36Sopenharmony_ci Esempi:: 50262306a36Sopenharmony_ci 50362306a36Sopenharmony_ci .. kernel-doc:: lib/bitmap.c 50462306a36Sopenharmony_ci :export: 50562306a36Sopenharmony_ci 50662306a36Sopenharmony_ci .. kernel-doc:: include/net/mac80211.h 50762306a36Sopenharmony_ci :export: net/mac80211/*.c 50862306a36Sopenharmony_ci 50962306a36Sopenharmony_ciinternal: *[source-pattern ...]* 51062306a36Sopenharmony_ci Include la documentazione per tutte le funzioni ed i tipi presenti nel file 51162306a36Sopenharmony_ci sorgente (*source*) che **non** sono stati esportati utilizzando 51262306a36Sopenharmony_ci ``EXPORT_SYMBOL`` o ``EXPORT_SYMBOL_GPL`` né in *source* né in qualsiasi 51362306a36Sopenharmony_ci altro *source-pattern* specificato. 51462306a36Sopenharmony_ci 51562306a36Sopenharmony_ci Esempio:: 51662306a36Sopenharmony_ci 51762306a36Sopenharmony_ci .. kernel-doc:: drivers/gpu/drm/i915/intel_audio.c 51862306a36Sopenharmony_ci :internal: 51962306a36Sopenharmony_ci 52062306a36Sopenharmony_ciidentifiers: *[ function/type ...]* 52162306a36Sopenharmony_ci Include la documentazione per ogni *function* e *type* in *source*. 52262306a36Sopenharmony_ci Se non vengono esplicitamente specificate le funzioni da includere, allora 52362306a36Sopenharmony_ci verranno incluse tutte quelle disponibili in *source*. 52462306a36Sopenharmony_ci 52562306a36Sopenharmony_ci Esempi:: 52662306a36Sopenharmony_ci 52762306a36Sopenharmony_ci .. kernel-doc:: lib/bitmap.c 52862306a36Sopenharmony_ci :identifiers: bitmap_parselist bitmap_parselist_user 52962306a36Sopenharmony_ci 53062306a36Sopenharmony_ci .. kernel-doc:: lib/idr.c 53162306a36Sopenharmony_ci :identifiers: 53262306a36Sopenharmony_ci 53362306a36Sopenharmony_cifunctions: *[ function ...]* 53462306a36Sopenharmony_ci Questo è uno pseudonimo, deprecato, per la direttiva 'identifiers'. 53562306a36Sopenharmony_ci 53662306a36Sopenharmony_cidoc: *title* 53762306a36Sopenharmony_ci Include la documentazione del paragrafo ``DOC:`` identificato dal titolo 53862306a36Sopenharmony_ci (*title*) all'interno del file sorgente (*source*). Gli spazi in *title* sono 53962306a36Sopenharmony_ci permessi; non virgolettate *title*. Il campo *title* è utilizzato per 54062306a36Sopenharmony_ci identificare un paragrafo e per questo non viene incluso nella documentazione 54162306a36Sopenharmony_ci finale. Verificate d'avere l'intestazione appropriata nei documenti 54262306a36Sopenharmony_ci reStructuredText. 54362306a36Sopenharmony_ci 54462306a36Sopenharmony_ci Esempio:: 54562306a36Sopenharmony_ci 54662306a36Sopenharmony_ci .. kernel-doc:: drivers/gpu/drm/i915/intel_audio.c 54762306a36Sopenharmony_ci :doc: High Definition Audio over HDMI and Display Port 54862306a36Sopenharmony_ci 54962306a36Sopenharmony_ciSenza alcuna opzione, la direttiva kernel-doc include tutti i commenti di 55062306a36Sopenharmony_cidocumentazione presenti nel file sorgente (*source*). 55162306a36Sopenharmony_ci 55262306a36Sopenharmony_ciL'estensione kernel-doc fa parte dei sorgenti del kernel, la si può trovare 55362306a36Sopenharmony_ciin ``Documentation/sphinx/kerneldoc.py``. Internamente, viene utilizzato 55462306a36Sopenharmony_cilo script ``scripts/kernel-doc`` per estrarre i commenti di documentazione 55562306a36Sopenharmony_cidai file sorgenti. 55662306a36Sopenharmony_ci 55762306a36Sopenharmony_ciCome utilizzare kernel-doc per generare pagine man 55862306a36Sopenharmony_ci-------------------------------------------------- 55962306a36Sopenharmony_ci 56062306a36Sopenharmony_ciSe volete utilizzare kernel-doc solo per generare delle pagine man, potete 56162306a36Sopenharmony_cifarlo direttamente dai sorgenti del kernel:: 56262306a36Sopenharmony_ci 56362306a36Sopenharmony_ci $ scripts/kernel-doc -man $(git grep -l '/\*\*' -- :^Documentation :^tools) | scripts/split-man.pl /tmp/man 564