18c2ecf20Sopenharmony_ci.. include:: ../disclaimer-ita.rst 28c2ecf20Sopenharmony_ci 38c2ecf20Sopenharmony_ci.. note:: Per leggere la documentazione originale in inglese: 48c2ecf20Sopenharmony_ci :ref:`Documentation/doc-guide/index.rst <doc_guide>` 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci.. _it_kernel_doc: 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ciScrivere i commenti in kernel-doc 98c2ecf20Sopenharmony_ci================================= 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ciNei file sorgenti del kernel Linux potrete trovare commenti di documentazione 128c2ecf20Sopenharmony_cistrutturanti secondo il formato kernel-doc. Essi possono descrivere funzioni, 138c2ecf20Sopenharmony_citipi di dati, e l'architettura del codice. 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci.. note:: Il formato kernel-doc può sembrare simile a gtk-doc o Doxygen ma 168c2ecf20Sopenharmony_ci in realtà è molto differente per ragioni storiche. I sorgenti del kernel 178c2ecf20Sopenharmony_ci contengono decine di migliaia di commenti kernel-doc. Siete pregati 188c2ecf20Sopenharmony_ci d'attenervi allo stile qui descritto. 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ciLa struttura kernel-doc è estratta a partire dai commenti; da questi viene 218c2ecf20Sopenharmony_cigenerato il `dominio Sphinx per il C`_ con un'adeguata descrizione per le 228c2ecf20Sopenharmony_cifunzioni ed i tipi di dato con i loro relativi collegamenti. Le descrizioni 238c2ecf20Sopenharmony_civengono filtrare per cercare i riferimenti ed i marcatori. 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_ciVedere di seguito per maggiori dettagli. 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_ci.. _`dominio Sphinx per il C`: http://www.sphinx-doc.org/en/stable/domains.html 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ciTutte le funzioni esportate verso i moduli esterni utilizzando 308c2ecf20Sopenharmony_ci``EXPORT_SYMBOL`` o ``EXPORT_SYMBOL_GPL`` dovrebbero avere un commento 318c2ecf20Sopenharmony_cikernel-doc. Quando l'intenzione è di utilizzarle nei moduli, anche le funzioni 328c2ecf20Sopenharmony_cie le strutture dati nei file d'intestazione dovrebbero avere dei commenti 338c2ecf20Sopenharmony_cikernel-doc. 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ciÈ considerata una buona pratica quella di fornire una documentazione formattata 368c2ecf20Sopenharmony_cisecondo kernel-doc per le funzioni che sono visibili da altri file del kernel 378c2ecf20Sopenharmony_ci(ovvero, che non siano dichiarate utilizzando ``static``). Raccomandiamo, 388c2ecf20Sopenharmony_ciinoltre, di fornire una documentazione kernel-doc anche per procedure private 398c2ecf20Sopenharmony_ci(ovvero, dichiarate "static") al fine di fornire una struttura più coerente 408c2ecf20Sopenharmony_cidei sorgenti. Quest'ultima raccomandazione ha una priorità più bassa ed è a 418c2ecf20Sopenharmony_cidiscrezione dal manutentore (MAINTAINER) del file sorgente. 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ciSicuramente la documentazione formattata con kernel-doc è necessaria per 468c2ecf20Sopenharmony_cile funzioni che sono esportate verso i moduli esterni utilizzando 478c2ecf20Sopenharmony_ci``EXPORT_SYMBOL`` o ``EXPORT_SYMBOL_GPL``. 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_ciCerchiamo anche di fornire una documentazione formattata secondo kernel-doc 508c2ecf20Sopenharmony_ciper le funzioni che sono visibili da altri file del kernel (ovvero, che non 518c2ecf20Sopenharmony_cisiano dichiarate utilizzando "static") 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ciRaccomandiamo, inoltre, di fornire una documentazione formattata con kernel-doc 548c2ecf20Sopenharmony_cianche per procedure private (ovvero, dichiarate "static") al fine di fornire 558c2ecf20Sopenharmony_ciuna struttura più coerente dei sorgenti. Questa raccomandazione ha una priorità 568c2ecf20Sopenharmony_cipiù bassa ed è a discrezione dal manutentore (MAINTAINER) del file sorgente. 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_ciLe strutture dati visibili nei file di intestazione dovrebbero essere anch'esse 598c2ecf20Sopenharmony_cidocumentate utilizzando commenti formattati con kernel-doc. 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ciCome formattare i commenti kernel-doc 628c2ecf20Sopenharmony_ci------------------------------------- 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_ciI commenti kernel-doc iniziano con il marcatore ``/**``. Il programma 658c2ecf20Sopenharmony_ci``kernel-doc`` estrarrà i commenti marchiati in questo modo. Il resto 668c2ecf20Sopenharmony_cidel commento è formattato come un normale commento multilinea, ovvero 678c2ecf20Sopenharmony_cicon un asterisco all'inizio d'ogni riga e che si conclude con ``*/`` 688c2ecf20Sopenharmony_cisu una riga separata. 698c2ecf20Sopenharmony_ci 708c2ecf20Sopenharmony_ciI commenti kernel-doc di funzioni e tipi dovrebbero essere posizionati 718c2ecf20Sopenharmony_ciappena sopra la funzione od il tipo che descrivono. Questo allo scopo di 728c2ecf20Sopenharmony_ciaumentare la probabilità che chi cambia il codice si ricordi di aggiornare 738c2ecf20Sopenharmony_cianche la documentazione. I commenti kernel-doc di tipo più generale possono 748c2ecf20Sopenharmony_ciessere posizionati ovunque nel file. 758c2ecf20Sopenharmony_ci 768c2ecf20Sopenharmony_ciAl fine di verificare che i commenti siano formattati correttamente, potete 778c2ecf20Sopenharmony_cieseguire il programma ``kernel-doc`` con un livello di verbosità alto e senza 788c2ecf20Sopenharmony_ciche questo produca alcuna documentazione. Per esempio:: 798c2ecf20Sopenharmony_ci 808c2ecf20Sopenharmony_ci scripts/kernel-doc -v -none drivers/foo/bar.c 818c2ecf20Sopenharmony_ci 828c2ecf20Sopenharmony_ciIl formato della documentazione è verificato della procedura di generazione 838c2ecf20Sopenharmony_cidel kernel quando viene richiesto di effettuare dei controlli extra con GCC:: 848c2ecf20Sopenharmony_ci 858c2ecf20Sopenharmony_ci make W=n 868c2ecf20Sopenharmony_ci 878c2ecf20Sopenharmony_ciDocumentare le funzioni 888c2ecf20Sopenharmony_ci------------------------ 898c2ecf20Sopenharmony_ci 908c2ecf20Sopenharmony_ciGeneralmente il formato di un commento kernel-doc per funzioni e 918c2ecf20Sopenharmony_cimacro simil-funzioni è il seguente:: 928c2ecf20Sopenharmony_ci 938c2ecf20Sopenharmony_ci /** 948c2ecf20Sopenharmony_ci * function_name() - Brief description of function. 958c2ecf20Sopenharmony_ci * @arg1: Describe the first argument. 968c2ecf20Sopenharmony_ci * @arg2: Describe the second argument. 978c2ecf20Sopenharmony_ci * One can provide multiple line descriptions 988c2ecf20Sopenharmony_ci * for arguments. 998c2ecf20Sopenharmony_ci * 1008c2ecf20Sopenharmony_ci * A longer description, with more discussion of the function function_name() 1018c2ecf20Sopenharmony_ci * that might be useful to those using or modifying it. Begins with an 1028c2ecf20Sopenharmony_ci * empty comment line, and may include additional embedded empty 1038c2ecf20Sopenharmony_ci * comment lines. 1048c2ecf20Sopenharmony_ci * 1058c2ecf20Sopenharmony_ci * The longer description may have multiple paragraphs. 1068c2ecf20Sopenharmony_ci * 1078c2ecf20Sopenharmony_ci * Context: Describes whether the function can sleep, what locks it takes, 1088c2ecf20Sopenharmony_ci * releases, or expects to be held. It can extend over multiple 1098c2ecf20Sopenharmony_ci * lines. 1108c2ecf20Sopenharmony_ci * Return: Describe the return value of function_name. 1118c2ecf20Sopenharmony_ci * 1128c2ecf20Sopenharmony_ci * The return value description can also have multiple paragraphs, and should 1138c2ecf20Sopenharmony_ci * be placed at the end of the comment block. 1148c2ecf20Sopenharmony_ci */ 1158c2ecf20Sopenharmony_ci 1168c2ecf20Sopenharmony_ciLa descrizione introduttiva (*brief description*) che segue il nome della 1178c2ecf20Sopenharmony_cifunzione può continuare su righe successive e termina con la descrizione di 1188c2ecf20Sopenharmony_ciun argomento, una linea di commento vuota, oppure la fine del commento. 1198c2ecf20Sopenharmony_ci 1208c2ecf20Sopenharmony_ciParametri delle funzioni 1218c2ecf20Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~ 1228c2ecf20Sopenharmony_ci 1238c2ecf20Sopenharmony_ciOgni argomento di una funzione dovrebbe essere descritto in ordine, subito 1248c2ecf20Sopenharmony_cidopo la descrizione introduttiva. Non lasciare righe vuote né fra la 1258c2ecf20Sopenharmony_cidescrizione introduttiva e quella degli argomenti, né fra gli argomenti. 1268c2ecf20Sopenharmony_ci 1278c2ecf20Sopenharmony_ciOgni ``@argument:`` può estendersi su più righe. 1288c2ecf20Sopenharmony_ci 1298c2ecf20Sopenharmony_ci.. note:: 1308c2ecf20Sopenharmony_ci 1318c2ecf20Sopenharmony_ci Se la descrizione di ``@argument:`` si estende su più righe, 1328c2ecf20Sopenharmony_ci la continuazione dovrebbe iniziare alla stessa colonna della riga 1338c2ecf20Sopenharmony_ci precedente:: 1348c2ecf20Sopenharmony_ci 1358c2ecf20Sopenharmony_ci * @argument: some long description 1368c2ecf20Sopenharmony_ci * that continues on next lines 1378c2ecf20Sopenharmony_ci 1388c2ecf20Sopenharmony_ci or:: 1398c2ecf20Sopenharmony_ci 1408c2ecf20Sopenharmony_ci * @argument: 1418c2ecf20Sopenharmony_ci * some long description 1428c2ecf20Sopenharmony_ci * that continues on next lines 1438c2ecf20Sopenharmony_ci 1448c2ecf20Sopenharmony_ciSe una funzione ha un numero variabile di argomento, la sua descrizione 1458c2ecf20Sopenharmony_cidovrebbe essere scritta con la notazione kernel-doc:: 1468c2ecf20Sopenharmony_ci 1478c2ecf20Sopenharmony_ci * @...: description 1488c2ecf20Sopenharmony_ci 1498c2ecf20Sopenharmony_ciContesto delle funzioni 1508c2ecf20Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~ 1518c2ecf20Sopenharmony_ci 1528c2ecf20Sopenharmony_ciIl contesto in cui le funzioni vengono chiamate viene descritto in una 1538c2ecf20Sopenharmony_cisezione chiamata ``Context``. Questo dovrebbe informare sulla possibilità 1548c2ecf20Sopenharmony_ciche una funzione dorma (*sleep*) o che possa essere chiamata in un contesto 1558c2ecf20Sopenharmony_cid'interruzione, così come i *lock* che prende, rilascia e che si aspetta che 1568c2ecf20Sopenharmony_civengano presi dal chiamante. 1578c2ecf20Sopenharmony_ci 1588c2ecf20Sopenharmony_ciEsempi:: 1598c2ecf20Sopenharmony_ci 1608c2ecf20Sopenharmony_ci * Context: Any context. 1618c2ecf20Sopenharmony_ci * Context: Any context. Takes and releases the RCU lock. 1628c2ecf20Sopenharmony_ci * Context: Any context. Expects <lock> to be held by caller. 1638c2ecf20Sopenharmony_ci * Context: Process context. May sleep if @gfp flags permit. 1648c2ecf20Sopenharmony_ci * Context: Process context. Takes and releases <mutex>. 1658c2ecf20Sopenharmony_ci * Context: Softirq or process context. Takes and releases <lock>, BH-safe. 1668c2ecf20Sopenharmony_ci * Context: Interrupt context. 1678c2ecf20Sopenharmony_ci 1688c2ecf20Sopenharmony_ciValore di ritorno 1698c2ecf20Sopenharmony_ci~~~~~~~~~~~~~~~~~ 1708c2ecf20Sopenharmony_ci 1718c2ecf20Sopenharmony_ciIl valore di ritorno, se c'è, viene descritto in una sezione dedicata di nome 1728c2ecf20Sopenharmony_ci``Return``. 1738c2ecf20Sopenharmony_ci 1748c2ecf20Sopenharmony_ci.. note:: 1758c2ecf20Sopenharmony_ci 1768c2ecf20Sopenharmony_ci #) La descrizione multiriga non riconosce il termine d'una riga, per cui 1778c2ecf20Sopenharmony_ci se provate a formattare bene il vostro testo come nel seguente esempio:: 1788c2ecf20Sopenharmony_ci 1798c2ecf20Sopenharmony_ci * Return: 1808c2ecf20Sopenharmony_ci * 0 - OK 1818c2ecf20Sopenharmony_ci * -EINVAL - invalid argument 1828c2ecf20Sopenharmony_ci * -ENOMEM - out of memory 1838c2ecf20Sopenharmony_ci 1848c2ecf20Sopenharmony_ci le righe verranno unite e il risultato sarà:: 1858c2ecf20Sopenharmony_ci 1868c2ecf20Sopenharmony_ci Return: 0 - OK -EINVAL - invalid argument -ENOMEM - out of memory 1878c2ecf20Sopenharmony_ci 1888c2ecf20Sopenharmony_ci Quindi, se volete che le righe vengano effettivamente generate, dovete 1898c2ecf20Sopenharmony_ci utilizzare una lista ReST, ad esempio:: 1908c2ecf20Sopenharmony_ci 1918c2ecf20Sopenharmony_ci * Return: 1928c2ecf20Sopenharmony_ci * * 0 - OK to runtime suspend the device 1938c2ecf20Sopenharmony_ci * * -EBUSY - Device should not be runtime suspended 1948c2ecf20Sopenharmony_ci 1958c2ecf20Sopenharmony_ci #) Se il vostro testo ha delle righe che iniziano con una frase seguita dai 1968c2ecf20Sopenharmony_ci due punti, allora ognuna di queste frasi verrà considerata come il nome 1978c2ecf20Sopenharmony_ci di una nuova sezione, e probabilmente non produrrà gli effetti desiderati. 1988c2ecf20Sopenharmony_ci 1998c2ecf20Sopenharmony_ciDocumentare strutture, unioni ed enumerazioni 2008c2ecf20Sopenharmony_ci--------------------------------------------- 2018c2ecf20Sopenharmony_ci 2028c2ecf20Sopenharmony_ciGeneralmente il formato di un commento kernel-doc per struct, union ed enum è:: 2038c2ecf20Sopenharmony_ci 2048c2ecf20Sopenharmony_ci /** 2058c2ecf20Sopenharmony_ci * struct struct_name - Brief description. 2068c2ecf20Sopenharmony_ci * @member1: Description of member1. 2078c2ecf20Sopenharmony_ci * @member2: Description of member2. 2088c2ecf20Sopenharmony_ci * One can provide multiple line descriptions 2098c2ecf20Sopenharmony_ci * for members. 2108c2ecf20Sopenharmony_ci * 2118c2ecf20Sopenharmony_ci * Description of the structure. 2128c2ecf20Sopenharmony_ci */ 2138c2ecf20Sopenharmony_ci 2148c2ecf20Sopenharmony_ciNell'esempio qui sopra, potete sostituire ``struct`` con ``union`` o ``enum`` 2158c2ecf20Sopenharmony_ciper descrivere unioni ed enumerati. ``member`` viene usato per indicare i 2168c2ecf20Sopenharmony_cimembri di strutture ed unioni, ma anche i valori di un tipo enumerato. 2178c2ecf20Sopenharmony_ci 2188c2ecf20Sopenharmony_ciLa descrizione introduttiva (*brief description*) che segue il nome della 2198c2ecf20Sopenharmony_cifunzione può continuare su righe successive e termina con la descrizione di 2208c2ecf20Sopenharmony_ciun argomento, una linea di commento vuota, oppure la fine del commento. 2218c2ecf20Sopenharmony_ci 2228c2ecf20Sopenharmony_ciMembri 2238c2ecf20Sopenharmony_ci~~~~~~ 2248c2ecf20Sopenharmony_ci 2258c2ecf20Sopenharmony_ciI membri di strutture, unioni ed enumerati devo essere documentati come i 2268c2ecf20Sopenharmony_ciparametri delle funzioni; seguono la descrizione introduttiva e possono 2278c2ecf20Sopenharmony_ciestendersi su più righe. 2288c2ecf20Sopenharmony_ci 2298c2ecf20Sopenharmony_ciAll'interno d'una struttura o d'un unione, potete utilizzare le etichette 2308c2ecf20Sopenharmony_ci``private:`` e ``public:``. I campi che sono nell'area ``private:`` non 2318c2ecf20Sopenharmony_civerranno inclusi nella documentazione finale. 2328c2ecf20Sopenharmony_ci 2338c2ecf20Sopenharmony_ciLe etichette ``private:`` e ``public:`` devono essere messe subito dopo 2348c2ecf20Sopenharmony_ciil marcatore di un commento ``/*``. Opzionalmente, possono includere commenti 2358c2ecf20Sopenharmony_cifra ``:`` e il marcatore di fine commento ``*/``. 2368c2ecf20Sopenharmony_ci 2378c2ecf20Sopenharmony_ciEsempio:: 2388c2ecf20Sopenharmony_ci 2398c2ecf20Sopenharmony_ci /** 2408c2ecf20Sopenharmony_ci * struct my_struct - short description 2418c2ecf20Sopenharmony_ci * @a: first member 2428c2ecf20Sopenharmony_ci * @b: second member 2438c2ecf20Sopenharmony_ci * @d: fourth member 2448c2ecf20Sopenharmony_ci * 2458c2ecf20Sopenharmony_ci * Longer description 2468c2ecf20Sopenharmony_ci */ 2478c2ecf20Sopenharmony_ci struct my_struct { 2488c2ecf20Sopenharmony_ci int a; 2498c2ecf20Sopenharmony_ci int b; 2508c2ecf20Sopenharmony_ci /* private: internal use only */ 2518c2ecf20Sopenharmony_ci int c; 2528c2ecf20Sopenharmony_ci /* public: the next one is public */ 2538c2ecf20Sopenharmony_ci int d; 2548c2ecf20Sopenharmony_ci }; 2558c2ecf20Sopenharmony_ci 2568c2ecf20Sopenharmony_ciStrutture ed unioni annidate 2578c2ecf20Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2588c2ecf20Sopenharmony_ci 2598c2ecf20Sopenharmony_ciÈ possibile documentare strutture ed unioni annidate, ad esempio:: 2608c2ecf20Sopenharmony_ci 2618c2ecf20Sopenharmony_ci /** 2628c2ecf20Sopenharmony_ci * struct nested_foobar - a struct with nested unions and structs 2638c2ecf20Sopenharmony_ci * @memb1: first member of anonymous union/anonymous struct 2648c2ecf20Sopenharmony_ci * @memb2: second member of anonymous union/anonymous struct 2658c2ecf20Sopenharmony_ci * @memb3: third member of anonymous union/anonymous struct 2668c2ecf20Sopenharmony_ci * @memb4: fourth member of anonymous union/anonymous struct 2678c2ecf20Sopenharmony_ci * @bar: non-anonymous union 2688c2ecf20Sopenharmony_ci * @bar.st1: struct st1 inside @bar 2698c2ecf20Sopenharmony_ci * @bar.st2: struct st2 inside @bar 2708c2ecf20Sopenharmony_ci * @bar.st1.memb1: first member of struct st1 on union bar 2718c2ecf20Sopenharmony_ci * @bar.st1.memb2: second member of struct st1 on union bar 2728c2ecf20Sopenharmony_ci * @bar.st2.memb1: first member of struct st2 on union bar 2738c2ecf20Sopenharmony_ci * @bar.st2.memb2: second member of struct st2 on union bar 2748c2ecf20Sopenharmony_ci */ 2758c2ecf20Sopenharmony_ci struct nested_foobar { 2768c2ecf20Sopenharmony_ci /* Anonymous union/struct*/ 2778c2ecf20Sopenharmony_ci union { 2788c2ecf20Sopenharmony_ci struct { 2798c2ecf20Sopenharmony_ci int memb1; 2808c2ecf20Sopenharmony_ci int memb2; 2818c2ecf20Sopenharmony_ci } 2828c2ecf20Sopenharmony_ci struct { 2838c2ecf20Sopenharmony_ci void *memb3; 2848c2ecf20Sopenharmony_ci int memb4; 2858c2ecf20Sopenharmony_ci } 2868c2ecf20Sopenharmony_ci } 2878c2ecf20Sopenharmony_ci union { 2888c2ecf20Sopenharmony_ci struct { 2898c2ecf20Sopenharmony_ci int memb1; 2908c2ecf20Sopenharmony_ci int memb2; 2918c2ecf20Sopenharmony_ci } st1; 2928c2ecf20Sopenharmony_ci struct { 2938c2ecf20Sopenharmony_ci void *memb1; 2948c2ecf20Sopenharmony_ci int memb2; 2958c2ecf20Sopenharmony_ci } st2; 2968c2ecf20Sopenharmony_ci } bar; 2978c2ecf20Sopenharmony_ci }; 2988c2ecf20Sopenharmony_ci 2998c2ecf20Sopenharmony_ci.. note:: 3008c2ecf20Sopenharmony_ci 3018c2ecf20Sopenharmony_ci #) Quando documentate una struttura od unione annidata, ad esempio 3028c2ecf20Sopenharmony_ci di nome ``foo``, il suo campo ``bar`` dev'essere documentato 3038c2ecf20Sopenharmony_ci usando ``@foo.bar:`` 3048c2ecf20Sopenharmony_ci #) Quando la struttura od unione annidata è anonima, il suo campo 3058c2ecf20Sopenharmony_ci ``bar`` dev'essere documentato usando ``@bar:`` 3068c2ecf20Sopenharmony_ci 3078c2ecf20Sopenharmony_ciCommenti in linea per la documentazione dei membri 3088c2ecf20Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3098c2ecf20Sopenharmony_ci 3108c2ecf20Sopenharmony_ciI membri d'una struttura possono essere documentati in linea all'interno 3118c2ecf20Sopenharmony_cidella definizione stessa. Ci sono due stili: una singola riga di commento 3128c2ecf20Sopenharmony_ciche inizia con ``/**`` e finisce con ``*/``; commenti multi riga come 3138c2ecf20Sopenharmony_ciqualsiasi altro commento kernel-doc:: 3148c2ecf20Sopenharmony_ci 3158c2ecf20Sopenharmony_ci /** 3168c2ecf20Sopenharmony_ci * struct foo - Brief description. 3178c2ecf20Sopenharmony_ci * @foo: The Foo member. 3188c2ecf20Sopenharmony_ci */ 3198c2ecf20Sopenharmony_ci struct foo { 3208c2ecf20Sopenharmony_ci int foo; 3218c2ecf20Sopenharmony_ci /** 3228c2ecf20Sopenharmony_ci * @bar: The Bar member. 3238c2ecf20Sopenharmony_ci */ 3248c2ecf20Sopenharmony_ci int bar; 3258c2ecf20Sopenharmony_ci /** 3268c2ecf20Sopenharmony_ci * @baz: The Baz member. 3278c2ecf20Sopenharmony_ci * 3288c2ecf20Sopenharmony_ci * Here, the member description may contain several paragraphs. 3298c2ecf20Sopenharmony_ci */ 3308c2ecf20Sopenharmony_ci int baz; 3318c2ecf20Sopenharmony_ci union { 3328c2ecf20Sopenharmony_ci /** @foobar: Single line description. */ 3338c2ecf20Sopenharmony_ci int foobar; 3348c2ecf20Sopenharmony_ci }; 3358c2ecf20Sopenharmony_ci /** @bar2: Description for struct @bar2 inside @foo */ 3368c2ecf20Sopenharmony_ci struct { 3378c2ecf20Sopenharmony_ci /** 3388c2ecf20Sopenharmony_ci * @bar2.barbar: Description for @barbar inside @foo.bar2 3398c2ecf20Sopenharmony_ci */ 3408c2ecf20Sopenharmony_ci int barbar; 3418c2ecf20Sopenharmony_ci } bar2; 3428c2ecf20Sopenharmony_ci }; 3438c2ecf20Sopenharmony_ci 3448c2ecf20Sopenharmony_ci 3458c2ecf20Sopenharmony_ciDocumentazione dei tipi di dato 3468c2ecf20Sopenharmony_ci------------------------------- 3478c2ecf20Sopenharmony_ciGeneralmente il formato di un commento kernel-doc per typedef è 3488c2ecf20Sopenharmony_ciil seguente:: 3498c2ecf20Sopenharmony_ci 3508c2ecf20Sopenharmony_ci /** 3518c2ecf20Sopenharmony_ci * typedef type_name - Brief description. 3528c2ecf20Sopenharmony_ci * 3538c2ecf20Sopenharmony_ci * Description of the type. 3548c2ecf20Sopenharmony_ci */ 3558c2ecf20Sopenharmony_ci 3568c2ecf20Sopenharmony_ciAnche i tipi di dato per prototipi di funzione possono essere documentati:: 3578c2ecf20Sopenharmony_ci 3588c2ecf20Sopenharmony_ci /** 3598c2ecf20Sopenharmony_ci * typedef type_name - Brief description. 3608c2ecf20Sopenharmony_ci * @arg1: description of arg1 3618c2ecf20Sopenharmony_ci * @arg2: description of arg2 3628c2ecf20Sopenharmony_ci * 3638c2ecf20Sopenharmony_ci * Description of the type. 3648c2ecf20Sopenharmony_ci * 3658c2ecf20Sopenharmony_ci * Context: Locking context. 3668c2ecf20Sopenharmony_ci * Return: Meaning of the return value. 3678c2ecf20Sopenharmony_ci */ 3688c2ecf20Sopenharmony_ci typedef void (*type_name)(struct v4l2_ctrl *arg1, void *arg2); 3698c2ecf20Sopenharmony_ci 3708c2ecf20Sopenharmony_ciMarcatori e riferimenti 3718c2ecf20Sopenharmony_ci----------------------- 3728c2ecf20Sopenharmony_ci 3738c2ecf20Sopenharmony_ciAll'interno dei commenti di tipo kernel-doc vengono riconosciuti i seguenti 3748c2ecf20Sopenharmony_ci*pattern* che vengono convertiti in marcatori reStructuredText ed in riferimenti 3758c2ecf20Sopenharmony_cidel `dominio Sphinx per il C`_. 3768c2ecf20Sopenharmony_ci 3778c2ecf20Sopenharmony_ci.. attention:: Questi sono riconosciuti **solo** all'interno di commenti 3788c2ecf20Sopenharmony_ci kernel-doc, e **non** all'interno di documenti reStructuredText. 3798c2ecf20Sopenharmony_ci 3808c2ecf20Sopenharmony_ci``funcname()`` 3818c2ecf20Sopenharmony_ci Riferimento ad una funzione. 3828c2ecf20Sopenharmony_ci 3838c2ecf20Sopenharmony_ci``@parameter`` 3848c2ecf20Sopenharmony_ci Nome di un parametro di una funzione (nessun riferimento, solo formattazione). 3858c2ecf20Sopenharmony_ci 3868c2ecf20Sopenharmony_ci``%CONST`` 3878c2ecf20Sopenharmony_ci Il nome di una costante (nessun riferimento, solo formattazione) 3888c2ecf20Sopenharmony_ci 3898c2ecf20Sopenharmony_ci````literal```` 3908c2ecf20Sopenharmony_ci Un blocco di testo che deve essere riportato così com'è. La rappresentazione 3918c2ecf20Sopenharmony_ci finale utilizzerà caratteri a ``spaziatura fissa``. 3928c2ecf20Sopenharmony_ci 3938c2ecf20Sopenharmony_ci Questo è utile se dovete utilizzare caratteri speciali che altrimenti 3948c2ecf20Sopenharmony_ci potrebbero assumere un significato diverso in kernel-doc o in reStructuredText 3958c2ecf20Sopenharmony_ci 3968c2ecf20Sopenharmony_ci Questo è particolarmente utile se dovete scrivere qualcosa come ``%ph`` 3978c2ecf20Sopenharmony_ci all'interno della descrizione di una funzione. 3988c2ecf20Sopenharmony_ci 3998c2ecf20Sopenharmony_ci``$ENVVAR`` 4008c2ecf20Sopenharmony_ci Il nome di una variabile d'ambiente (nessun riferimento, solo formattazione). 4018c2ecf20Sopenharmony_ci 4028c2ecf20Sopenharmony_ci``&struct name`` 4038c2ecf20Sopenharmony_ci Riferimento ad una struttura. 4048c2ecf20Sopenharmony_ci 4058c2ecf20Sopenharmony_ci``&enum name`` 4068c2ecf20Sopenharmony_ci Riferimento ad un'enumerazione. 4078c2ecf20Sopenharmony_ci 4088c2ecf20Sopenharmony_ci``&typedef name`` 4098c2ecf20Sopenharmony_ci Riferimento ad un tipo di dato. 4108c2ecf20Sopenharmony_ci 4118c2ecf20Sopenharmony_ci``&struct_name->member`` or ``&struct_name.member`` 4128c2ecf20Sopenharmony_ci Riferimento ad un membro di una struttura o di un'unione. Il riferimento sarà 4138c2ecf20Sopenharmony_ci la struttura o l'unione, non il memembro. 4148c2ecf20Sopenharmony_ci 4158c2ecf20Sopenharmony_ci``&name`` 4168c2ecf20Sopenharmony_ci Un generico riferimento ad un tipo. Usate, preferibilmente, il riferimento 4178c2ecf20Sopenharmony_ci completo come descritto sopra. Questo è dedicato ai commenti obsoleti. 4188c2ecf20Sopenharmony_ci 4198c2ecf20Sopenharmony_ciRiferimenti usando reStructuredText 4208c2ecf20Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4218c2ecf20Sopenharmony_ci 4228c2ecf20Sopenharmony_ciPer fare riferimento a funzioni e tipi di dato definiti nei commenti kernel-doc 4238c2ecf20Sopenharmony_ciall'interno dei documenti reStructuredText, utilizzate i riferimenti dal 4248c2ecf20Sopenharmony_ci`dominio Sphinx per il C`_. Per esempio:: 4258c2ecf20Sopenharmony_ci 4268c2ecf20Sopenharmony_ci See function :c:func:`foo` and struct/union/enum/typedef :c:type:`bar`. 4278c2ecf20Sopenharmony_ci 4288c2ecf20Sopenharmony_ciNonostante il riferimento ai tipi di dato funzioni col solo nome, 4298c2ecf20Sopenharmony_ciovvero senza specificare struct/union/enum/typedef, potreste preferire il 4308c2ecf20Sopenharmony_ciseguente:: 4318c2ecf20Sopenharmony_ci 4328c2ecf20Sopenharmony_ci See :c:type:`struct foo <foo>`. 4338c2ecf20Sopenharmony_ci See :c:type:`union bar <bar>`. 4348c2ecf20Sopenharmony_ci See :c:type:`enum baz <baz>`. 4358c2ecf20Sopenharmony_ci See :c:type:`typedef meh <meh>`. 4368c2ecf20Sopenharmony_ci 4378c2ecf20Sopenharmony_ciQuesto produce dei collegamenti migliori, ed è in linea con il modo in cui 4388c2ecf20Sopenharmony_cikernel-doc gestisce i riferimenti. 4398c2ecf20Sopenharmony_ci 4408c2ecf20Sopenharmony_ciPer maggiori informazioni, siete pregati di consultare la documentazione 4418c2ecf20Sopenharmony_cidel `dominio Sphinx per il C`_. 4428c2ecf20Sopenharmony_ci 4438c2ecf20Sopenharmony_ciCommenti per una documentazione generale 4448c2ecf20Sopenharmony_ci---------------------------------------- 4458c2ecf20Sopenharmony_ci 4468c2ecf20Sopenharmony_ciAl fine d'avere il codice ed i commenti nello stesso file, potete includere 4478c2ecf20Sopenharmony_cidei blocchi di documentazione kernel-doc con un formato libero invece 4488c2ecf20Sopenharmony_ciche nel formato specifico per funzioni, strutture, unioni, enumerati o tipi 4498c2ecf20Sopenharmony_cidi dato. Per esempio, questo tipo di commento potrebbe essere usato per la 4508c2ecf20Sopenharmony_cispiegazione delle operazioni di un driver o di una libreria 4518c2ecf20Sopenharmony_ci 4528c2ecf20Sopenharmony_ciQuesto s'ottiene utilizzando la parola chiave ``DOC:`` a cui viene associato 4538c2ecf20Sopenharmony_ciun titolo. 4548c2ecf20Sopenharmony_ci 4558c2ecf20Sopenharmony_ciGeneralmente il formato di un commento generico o di visione d'insieme è 4568c2ecf20Sopenharmony_ciil seguente:: 4578c2ecf20Sopenharmony_ci 4588c2ecf20Sopenharmony_ci /** 4598c2ecf20Sopenharmony_ci * DOC: Theory of Operation 4608c2ecf20Sopenharmony_ci * 4618c2ecf20Sopenharmony_ci * The whizbang foobar is a dilly of a gizmo. It can do whatever you 4628c2ecf20Sopenharmony_ci * want it to do, at any time. It reads your mind. Here's how it works. 4638c2ecf20Sopenharmony_ci * 4648c2ecf20Sopenharmony_ci * foo bar splat 4658c2ecf20Sopenharmony_ci * 4668c2ecf20Sopenharmony_ci * The only drawback to this gizmo is that is can sometimes damage 4678c2ecf20Sopenharmony_ci * hardware, software, or its subject(s). 4688c2ecf20Sopenharmony_ci */ 4698c2ecf20Sopenharmony_ci 4708c2ecf20Sopenharmony_ciIl titolo che segue ``DOC:`` funziona da intestazione all'interno del file 4718c2ecf20Sopenharmony_cisorgente, ma anche come identificatore per l'estrazione di questi commenti di 4728c2ecf20Sopenharmony_cidocumentazione. Quindi, il titolo dev'essere unico all'interno del file. 4738c2ecf20Sopenharmony_ci 4748c2ecf20Sopenharmony_ciIncludere i commenti di tipo kernel-doc 4758c2ecf20Sopenharmony_ci======================================= 4768c2ecf20Sopenharmony_ci 4778c2ecf20Sopenharmony_ciI commenti di documentazione possono essere inclusi in un qualsiasi documento 4788c2ecf20Sopenharmony_cidi tipo reStructuredText mediante l'apposita direttiva nell'estensione 4798c2ecf20Sopenharmony_cikernel-doc per Sphinx. 4808c2ecf20Sopenharmony_ci 4818c2ecf20Sopenharmony_ciLe direttive kernel-doc sono nel formato:: 4828c2ecf20Sopenharmony_ci 4838c2ecf20Sopenharmony_ci .. kernel-doc:: source 4848c2ecf20Sopenharmony_ci :option: 4858c2ecf20Sopenharmony_ci 4868c2ecf20Sopenharmony_ciIl campo *source* è il percorso ad un file sorgente, relativo alla cartella 4878c2ecf20Sopenharmony_ciprincipale dei sorgenti del kernel. La direttiva supporta le seguenti opzioni: 4888c2ecf20Sopenharmony_ci 4898c2ecf20Sopenharmony_ciexport: *[source-pattern ...]* 4908c2ecf20Sopenharmony_ci Include la documentazione per tutte le funzioni presenti nel file sorgente 4918c2ecf20Sopenharmony_ci (*source*) che sono state esportate utilizzando ``EXPORT_SYMBOL`` o 4928c2ecf20Sopenharmony_ci ``EXPORT_SYMBOL_GPL`` in *source* o in qualsiasi altro *source-pattern* 4938c2ecf20Sopenharmony_ci specificato. 4948c2ecf20Sopenharmony_ci 4958c2ecf20Sopenharmony_ci Il campo *source-patter* è utile quando i commenti kernel-doc sono stati 4968c2ecf20Sopenharmony_ci scritti nei file d'intestazione, mentre ``EXPORT_SYMBOL`` e 4978c2ecf20Sopenharmony_ci ``EXPORT_SYMBOL_GPL`` si trovano vicino alla definizione delle funzioni. 4988c2ecf20Sopenharmony_ci 4998c2ecf20Sopenharmony_ci Esempi:: 5008c2ecf20Sopenharmony_ci 5018c2ecf20Sopenharmony_ci .. kernel-doc:: lib/bitmap.c 5028c2ecf20Sopenharmony_ci :export: 5038c2ecf20Sopenharmony_ci 5048c2ecf20Sopenharmony_ci .. kernel-doc:: include/net/mac80211.h 5058c2ecf20Sopenharmony_ci :export: net/mac80211/*.c 5068c2ecf20Sopenharmony_ci 5078c2ecf20Sopenharmony_ciinternal: *[source-pattern ...]* 5088c2ecf20Sopenharmony_ci Include la documentazione per tutte le funzioni ed i tipi presenti nel file 5098c2ecf20Sopenharmony_ci sorgente (*source*) che **non** sono stati esportati utilizzando 5108c2ecf20Sopenharmony_ci ``EXPORT_SYMBOL`` o ``EXPORT_SYMBOL_GPL`` né in *source* né in qualsiasi 5118c2ecf20Sopenharmony_ci altro *source-pattern* specificato. 5128c2ecf20Sopenharmony_ci 5138c2ecf20Sopenharmony_ci Esempio:: 5148c2ecf20Sopenharmony_ci 5158c2ecf20Sopenharmony_ci .. kernel-doc:: drivers/gpu/drm/i915/intel_audio.c 5168c2ecf20Sopenharmony_ci :internal: 5178c2ecf20Sopenharmony_ci 5188c2ecf20Sopenharmony_ciidentifiers: *[ function/type ...]* 5198c2ecf20Sopenharmony_ci Include la documentazione per ogni *function* e *type* in *source*. 5208c2ecf20Sopenharmony_ci Se non vengono esplicitamente specificate le funzioni da includere, allora 5218c2ecf20Sopenharmony_ci verranno incluse tutte quelle disponibili in *source*. 5228c2ecf20Sopenharmony_ci 5238c2ecf20Sopenharmony_ci Esempi:: 5248c2ecf20Sopenharmony_ci 5258c2ecf20Sopenharmony_ci .. kernel-doc:: lib/bitmap.c 5268c2ecf20Sopenharmony_ci :identifiers: bitmap_parselist bitmap_parselist_user 5278c2ecf20Sopenharmony_ci 5288c2ecf20Sopenharmony_ci .. kernel-doc:: lib/idr.c 5298c2ecf20Sopenharmony_ci :identifiers: 5308c2ecf20Sopenharmony_ci 5318c2ecf20Sopenharmony_cifunctions: *[ function ...]* 5328c2ecf20Sopenharmony_ci Questo è uno pseudonimo, deprecato, per la direttiva 'identifiers'. 5338c2ecf20Sopenharmony_ci 5348c2ecf20Sopenharmony_cidoc: *title* 5358c2ecf20Sopenharmony_ci Include la documentazione del paragrafo ``DOC:`` identificato dal titolo 5368c2ecf20Sopenharmony_ci (*title*) all'interno del file sorgente (*source*). Gli spazi in *title* sono 5378c2ecf20Sopenharmony_ci permessi; non virgolettate *title*. Il campo *title* è utilizzato per 5388c2ecf20Sopenharmony_ci identificare un paragrafo e per questo non viene incluso nella documentazione 5398c2ecf20Sopenharmony_ci finale. Verificate d'avere l'intestazione appropriata nei documenti 5408c2ecf20Sopenharmony_ci reStructuredText. 5418c2ecf20Sopenharmony_ci 5428c2ecf20Sopenharmony_ci Esempio:: 5438c2ecf20Sopenharmony_ci 5448c2ecf20Sopenharmony_ci .. kernel-doc:: drivers/gpu/drm/i915/intel_audio.c 5458c2ecf20Sopenharmony_ci :doc: High Definition Audio over HDMI and Display Port 5468c2ecf20Sopenharmony_ci 5478c2ecf20Sopenharmony_ciSenza alcuna opzione, la direttiva kernel-doc include tutti i commenti di 5488c2ecf20Sopenharmony_cidocumentazione presenti nel file sorgente (*source*). 5498c2ecf20Sopenharmony_ci 5508c2ecf20Sopenharmony_ciL'estensione kernel-doc fa parte dei sorgenti del kernel, la si può trovare 5518c2ecf20Sopenharmony_ciin ``Documentation/sphinx/kerneldoc.py``. Internamente, viene utilizzato 5528c2ecf20Sopenharmony_cilo script ``scripts/kernel-doc`` per estrarre i commenti di documentazione 5538c2ecf20Sopenharmony_cidai file sorgenti. 5548c2ecf20Sopenharmony_ci 5558c2ecf20Sopenharmony_ciCome utilizzare kernel-doc per generare pagine man 5568c2ecf20Sopenharmony_ci-------------------------------------------------- 5578c2ecf20Sopenharmony_ci 5588c2ecf20Sopenharmony_ciSe volete utilizzare kernel-doc solo per generare delle pagine man, potete 5598c2ecf20Sopenharmony_cifarlo direttamente dai sorgenti del kernel:: 5608c2ecf20Sopenharmony_ci 5618c2ecf20Sopenharmony_ci $ scripts/kernel-doc -man $(git grep -l '/\*\*' -- :^Documentation :^tools) | scripts/split-man.pl /tmp/man 562