1 .. include:: ../disclaimer-ita.rst
3 .. note:: Per leggere la documentazione originale in inglese:
4 :ref:`Documentation/doc-guide/index.rst <doc_guide>`
9 Il kernel Linux usa `Sphinx`_ per la generazione della documentazione a partire
10 dai file `reStructuredText`_ che si trovano nella cartella ``Documentation``.
11 Per generare la documentazione in HTML o PDF, usate comandi ``make htmldocs`` o
12 ``make pdfdocs``. La documentazione così generata sarà disponibile nella
13 cartella ``Documentation/output``.
15 .. _Sphinx: http://www.sphinx-doc.org/
16 .. _reStructuredText: http://docutils.sourceforge.net/rst.html
18 I file reStructuredText possono contenere delle direttive che permettono di
19 includere i commenti di documentazione, o di tipo kernel-doc, dai file
21 Solitamente questi commenti sono utilizzati per descrivere le funzioni, i tipi
22 e l'architettura del codice. I commenti di tipo kernel-doc hanno una struttura
23 e formato speciale, ma a parte questo vengono processati come reStructuredText.
25 Inoltre, ci sono migliaia di altri documenti in formato testo sparsi nella
26 cartella ``Documentation``. Alcuni di questi verranno probabilmente convertiti,
27 nel tempo, in formato reStructuredText, ma la maggior parte di questi rimarranno
30 .. _it_sphinx_install:
35 I marcatori ReST utilizzati nei file in Documentation/ sono pensati per essere
36 processati da ``Sphinx`` nella versione 1.3 o superiore. Se desiderate produrre
37 un documento PDF è raccomandato l'utilizzo di una versione superiore alle 1.4.6.
39 Esiste uno script che verifica i requisiti Sphinx. Per ulteriori dettagli
40 consultate :ref:`it_sphinx-pre-install`.
42 La maggior parte delle distribuzioni Linux forniscono Sphinx, ma l'insieme dei
43 programmi e librerie è fragile e non è raro che dopo un aggiornamento di
44 Sphinx, o qualche altro pacchetto Python, la documentazione non venga più
45 generata correttamente.
47 Un modo per evitare questo genere di problemi è quello di utilizzare una
48 versione diversa da quella fornita dalla vostra distribuzione. Per fare questo,
49 vi raccomandiamo di installare Sphinx dentro ad un ambiente virtuale usando
50 ``virtualenv-3`` o ``virtualenv`` a seconda di come Python 3 è stato
51 pacchettizzato dalla vostra distribuzione.
55 #) Le versioni di Sphinx inferiori alla 1.5 non funzionano bene
56 con il pacchetto Python docutils versione 0.13.1 o superiore.
57 Se volete usare queste versioni, allora dovere eseguire
58 ``pip install 'docutils==0.12'``.
60 #) Viene raccomandato l'uso del tema RTD per la documentazione in HTML.
61 A seconda della versione di Sphinx, potrebbe essere necessaria
62 l'installazione tramite il comando ``pip install sphinx_rtd_theme``.
64 #) Alcune pagine ReST contengono delle formule matematiche. A causa del
65 modo in cui Sphinx funziona, queste espressioni sono scritte
66 utilizzando LaTeX. Per una corretta interpretazione, è necessario aver
67 installato texlive con i pacchetti amdfonts e amsmath.
69 Riassumendo, se volete installare la versione 1.4.9 di Sphinx dovete eseguire::
71 $ virtualenv sphinx_1.4
72 $ . sphinx_1.4/bin/activate
73 (sphinx_1.4) $ pip install -r Documentation/sphinx/requirements.txt
75 Dopo aver eseguito ``. sphinx_1.4/bin/activate``, il prompt cambierà per
76 indicare che state usando il nuovo ambiente. Se aprite un nuova sessione,
77 prima di generare la documentazione, dovrete rieseguire questo comando per
78 rientrare nell'ambiente virtuale.
80 Generazione d'immagini
81 ----------------------
83 Il meccanismo che genera la documentazione del kernel contiene un'estensione
84 capace di gestire immagini in formato Graphviz e SVG (per maggior informazioni
85 vedere :ref:`it_sphinx_kfigure`).
87 Per far si che questo funzioni, dovete installare entrambe i pacchetti
88 Graphviz e ImageMagick. Il sistema di generazione della documentazione è in
89 grado di procedere anche se questi pacchetti non sono installati, ma il
90 risultato, ovviamente, non includerà le immagini.
92 Generazione in PDF e LaTeX
93 --------------------------
95 Al momento, la generazione di questi documenti è supportata solo dalle
96 versioni di Sphinx superiori alla 1.4.
98 Per la generazione di PDF e LaTeX, avrete bisogno anche del pacchetto
99 ``XeLaTeX`` nella versione 3.14159265
101 Per alcune distribuzioni Linux potrebbe essere necessario installare
102 anche una serie di pacchetti ``texlive`` in modo da fornire il supporto
103 minimo per il funzionamento di ``XeLaTeX``.
105 .. _it_sphinx-pre-install:
107 Verificare le dipendenze Sphinx
108 -------------------------------
110 Esiste uno script che permette di verificare automaticamente le dipendenze di
111 Sphinx. Se lo script riesce a riconoscere la vostra distribuzione, allora
112 sarà in grado di darvi dei suggerimenti su come procedere per completare
115 $ ./scripts/sphinx-pre-install
116 Checking if the needed tools for Fedora release 26 (Twenty Six) are available
117 Warning: better to also install "texlive-luatex85".
120 sudo dnf install -y texlive-luatex85
121 /usr/bin/virtualenv sphinx_1.4
122 . sphinx_1.4/bin/activate
123 pip install -r Documentation/sphinx/requirements.txt
125 Can't build as 1 mandatory dependency is missing at ./scripts/sphinx-pre-install line 468.
127 L'impostazione predefinita prevede il controllo dei requisiti per la generazione
128 di documenti html e PDF, includendo anche il supporto per le immagini, le
129 espressioni matematiche e LaTeX; inoltre, presume che venga utilizzato un
130 ambiente virtuale per Python. I requisiti per generare i documenti html
131 sono considerati obbligatori, gli altri sono opzionali.
133 Questo script ha i seguenti parametri:
136 Disabilita i controlli per la generazione di PDF;
139 Utilizza l'ambiente predefinito dal sistema operativo invece che
140 l'ambiente virtuale per Python;
143 Generazione della documentazione Sphinx
144 =======================================
146 Per generare la documentazione in formato HTML o PDF si eseguono i rispettivi
147 comandi ``make htmldocs`` o ``make pdfdocs``. Esistono anche altri formati
148 in cui è possibile generare la documentazione; per maggiori informazioni
149 potere eseguire il comando ``make help``.
150 La documentazione così generata sarà disponibile nella sottocartella
151 ``Documentation/output``.
153 Ovviamente, per generare la documentazione, Sphinx (``sphinx-build``)
154 dev'essere installato. Se disponibile, il tema *Read the Docs* per Sphinx
155 verrà utilizzato per ottenere una documentazione HTML più gradevole.
156 Per la documentazione in formato PDF, invece, avrete bisogno di ``XeLaTeX`
157 e di ``convert(1)`` disponibile in ImageMagick (https://www.imagemagick.org).
158 Tipicamente, tutti questi pacchetti sono disponibili e pacchettizzati nelle
161 Per poter passare ulteriori opzioni a Sphinx potete utilizzare la variabile
162 make ``SPHINXOPTS``. Per esempio, se volete che Sphinx sia più verboso durante
163 la generazione potete usare il seguente comando ``make SPHINXOPTS=-v htmldocs``.
165 Potete eliminare la documentazione generata tramite il comando
168 Scrivere la documentazione
169 ==========================
171 Aggiungere nuova documentazione è semplice:
173 1. aggiungete un file ``.rst`` nella sottocartella ``Documentation``
174 2. aggiungete un riferimento ad esso nell'indice (`TOC tree`_) in
175 ``Documentation/index.rst``.
177 .. _TOC tree: http://www.sphinx-doc.org/en/stable/markup/toctree.html
179 Questo, di solito, è sufficiente per la documentazione più semplice (come
180 quella che state leggendo ora), ma per una documentazione più elaborata è
181 consigliato creare una sottocartella dedicata (o, quando possibile, utilizzarne
182 una già esistente). Per esempio, il sottosistema grafico è documentato nella
183 sottocartella ``Documentation/gpu``; questa documentazione è divisa in
184 diversi file ``.rst`` ed un indice ``index.rst`` (con un ``toctree``
185 dedicato) a cui si fa riferimento nell'indice principale.
187 Consultate la documentazione di `Sphinx`_ e `reStructuredText`_ per maggiori
188 informazione circa le loro potenzialità. In particolare, il
189 `manuale introduttivo a reStructuredText`_ di Sphinx è un buon punto da
190 cui cominciare. Esistono, inoltre, anche alcuni
191 `costruttori specifici per Sphinx`_.
193 .. _`manuale introduttivo a reStructuredText`: http://www.sphinx-doc.org/en/stable/rest.html
194 .. _`costruttori specifici per Sphinx`: http://www.sphinx-doc.org/en/stable/markup/index.html
196 Guide linea per la documentazione del kernel
197 --------------------------------------------
199 In questa sezione troverete alcune linee guida specifiche per la documentazione
202 * Non esagerate con i costrutti di reStructuredText. Mantenete la
203 documentazione semplice. La maggior parte della documentazione dovrebbe
204 essere testo semplice con una strutturazione minima che permetta la
205 conversione in diversi formati.
207 * Mantenete la strutturazione il più fedele possibile all'originale quando
208 convertite un documento in formato reStructuredText.
210 * Aggiornate i contenuti quando convertite della documentazione, non limitatevi
211 solo alla formattazione.
213 * Mantenete la decorazione dei livelli di intestazione come segue:
215 1. ``=`` con una linea superiore per il titolo del documento::
221 2. ``=`` per i capitoli::
226 3. ``-`` per le sezioni::
231 4. ``~`` per le sottosezioni::
236 Sebbene RST non forzi alcun ordine specifico (*Piuttosto che imporre
237 un numero ed un ordine fisso di decorazioni, l'ordine utilizzato sarà
238 quello incontrato*), avere uniformità dei livelli principali rende più
239 semplice la lettura dei documenti.
241 * Per inserire blocchi di testo con caratteri a dimensione fissa (codici di
242 esempio, casi d'uso, eccetera): utilizzate ``::`` quando non è necessario
243 evidenziare la sintassi, specialmente per piccoli frammenti; invece,
244 utilizzate ``.. code-block:: <language>`` per blocchi di più lunghi che
245 potranno beneficiare dell'avere la sintassi evidenziata.
251 Il **Dominio Sphinx C** (denominato c) è adatto alla documentazione delle API C.
252 Per esempio, un prototipo di una funzione:
256 .. c:function:: int ioctl( int fd, int request )
258 Il dominio C per kernel-doc ha delle funzionalità aggiuntive. Per esempio,
259 potete assegnare un nuovo nome di riferimento ad una funzione con un nome
260 molto comune come ``open`` o ``ioctl``:
264 .. c:function:: int ioctl( int fd, int request )
265 :name: VIDIOC_LOG_STATUS
267 Il nome della funzione (per esempio ioctl) rimane nel testo ma il nome del suo
268 riferimento cambia da ``ioctl`` a ``VIDIOC_LOG_STATUS``. Anche la voce
269 nell'indice cambia in ``VIDIOC_LOG_STATUS`` e si potrà quindi fare riferimento
270 a questa funzione scrivendo:
274 :c:func:`VIDIOC_LOG_STATUS`
280 Raccomandiamo l'uso delle tabelle in formato lista (*list table*). Le tabelle
281 in formato lista sono liste di liste. In confronto all'ASCII-art potrebbero
282 non apparire di facile lettura nei file in formato testo. Il loro vantaggio è
283 che sono facili da creare o modificare e che la differenza di una modifica è
284 molto più significativa perché limitata alle modifiche del contenuto.
286 La ``flat-table`` è anch'essa una lista di liste simile alle ``list-table``
287 ma con delle funzionalità aggiuntive:
289 * column-span: col ruolo ``cspan`` una cella può essere estesa attraverso
292 * raw-span: col ruolo ``rspan`` una cella può essere estesa attraverso
295 * auto-span: la cella più a destra viene estesa verso destra per compensare
296 la mancanza di celle. Con l'opzione ``:fill-cells:`` questo comportamento
297 può essere cambiato da *auto-span* ad *auto-fill*, il quale inserisce
298 automaticamente celle (vuote) invece che estendere l'ultima.
302 * ``:header-rows:`` [int] conta le righe di intestazione
303 * ``:stub-columns:`` [int] conta le colonne di stub
304 * ``:widths:`` [[int] [int] ... ] larghezza delle colonne
305 * ``:fill-cells:`` invece di estendere automaticamente una cella su quelle
306 mancanti, ne crea di vuote.
310 * ``:cspan:`` [int] colonne successive (*morecols*)
311 * ``:rspan:`` [int] righe successive (*morerows*)
313 L'esempio successivo mostra come usare questo marcatore. Il primo livello della
314 nostra lista di liste è la *riga*. In una *riga* è possibile inserire solamente
315 la lista di celle che compongono la *riga* stessa. Fanno eccezione i *commenti*
316 ( ``..`` ) ed i *collegamenti* (per esempio, un riferimento a
317 ``:ref:`last row <last row>``` / :ref:`last row <it last row>`)
321 .. flat-table:: table title
331 - field 1.2 with autospan
335 - :rspan:`1` :cspan:`1` field 2.2 - 3.3
341 Che verrà rappresentata nel seguente modo:
343 .. flat-table:: table title
353 - field 1.2 with autospan
357 - :rspan:`1` :cspan:`1` field 2.2 - 3.3
363 .. _it_sphinx_kfigure:
368 Se volete aggiungere un'immagine, utilizzate le direttive ``kernel-figure``
369 e ``kernel-image``. Per esempio, per inserire una figura di un'immagine in
372 .. kernel-figure:: ../../../doc-guide/svg_image.svg
373 :alt: una semplice immagine SVG
375 Una semplice immagine SVG
377 .. _it_svg_image_example:
379 .. kernel-figure:: ../../../doc-guide/svg_image.svg
380 :alt: una semplice immagine SVG
382 Una semplice immagine SVG
384 Le direttive del kernel per figure ed immagini supportano il formato **DOT**,
385 per maggiori informazioni
387 * DOT: http://graphviz.org/pdf/dotguide.pdf
388 * Graphviz: http://www.graphviz.org/content/dot-language
390 Un piccolo esempio (:ref:`it_hello_dot_file`)::
392 .. kernel-figure:: ../../../doc-guide/hello.dot
397 .. _it_hello_dot_file:
399 .. kernel-figure:: ../../../doc-guide/hello.dot
404 Tramite la direttiva ``kernel-render`` è possibile aggiungere codice specifico;
405 ad esempio nel formato **DOT** di Graphviz.::
407 .. kernel-render:: DOT
409 :caption: Codice **DOT** (Graphviz) integrato
415 La rappresentazione dipenderà dei programmi installati. Se avete Graphviz
416 installato, vedrete un'immagine vettoriale. In caso contrario, il codice grezzo
417 verrà rappresentato come *blocco testuale* (:ref:`it_hello_dot_render`).
419 .. _it_hello_dot_render:
421 .. kernel-render:: DOT
423 :caption: Codice **DOT** (Graphviz) integrato
429 La direttiva *render* ha tutte le opzioni della direttiva *figure*, con
430 l'aggiunta dell'opzione ``caption``. Se ``caption`` ha un valore allora
431 un nodo *figure* viene aggiunto. Altrimenti verrà aggiunto un nodo *image*.
432 L'opzione ``caption`` è necessaria in caso si vogliano aggiungere dei
433 riferimenti (:ref:`it_hello_svg_render`).
435 Per la scrittura di codice **SVG**::
437 .. kernel-render:: SVG
438 :caption: Integrare codice **SVG**
441 <?xml version="1.0" encoding="UTF-8"?>
442 <svg xmlns="http://www.w3.org/2000/svg" version="1.1" ...>
446 .. _it_hello_svg_render:
448 .. kernel-render:: SVG
449 :caption: Integrare codice **SVG**
452 <?xml version="1.0" encoding="UTF-8"?>
453 <svg xmlns="http://www.w3.org/2000/svg"
454 version="1.1" baseProfile="full" width="70px" height="40px" viewBox="0 0 700 400">
455 <line x1="180" y1="370" x2="500" y2="50" stroke="black" stroke-width="15px"/>
456 <polygon points="585 0 525 25 585 50" transform="rotate(135 525 25)"/>