doc:it_IT: align Italian documentation
Translation for the following patches commit0aa78b105f
("Documentation/changes: Raise minimum supported binutils version to 2.23") commit7d71788735
("Documentation: include sign off for reverts") commit905705a8fd
("docs: programming-languages: refresh blurb on clang support") commit5ff4aa70bf
("docs: submitting-patches: use :doc: for references") commit030f066f67
("docs: submitting-patches: describe preserving review/test tags") commit68e4cd17e2
("docs: deprecated.rst: Add zero-length and one-element arrays") commit5429ef62bc
("compiler/gcc: Raise minimum GCC version for kernel builds to 4.8") commit5b5bbb8cc5
("docs: process: Add an example for creating a fixes tag") commit858e684565
("docs: dt: convert submitting-patches.txt to ReST format") commitcca73e4946
("docs: Correct the release date of 5.2 stable") commitc170f2eb96
("docs: Document cross-referencing between documentation pages") commit7c8b9e3000
("kernel-doc: Update "cross-referencing from rST" section to use automarkup") commit27def953b6
("docs: deprecated.rst: Expand str*cpy() replacement notes") commit17dca05023
("docs: deprecated.rst: Update zero-length/one-element arrays section") commit3519c4d6e0
("Documentation: add minimum clang/llvm version") commit0bddd227f3
("Documentation: update for gcc 4.9 requirement") commit9f364b605f
("submitting-patches.rst: presume git will be used") commit4ebdf7be21
("Documentation/maintainer: rehome sign-off process") commit7433ff33e8
("Documentation/process: expand plain-text advice") commiteb45fb2fb1
("docs: process: Add cross-link to security-bugs") commitbdc48fa11e
("checkpatch/coding-style: deprecate 80-column warning") commitf67281a72b
("Documentation: process: step 2: Link to email list fixed") Signed-off-by: Federico Vaga <federico.vaga@vaga.pv.it> Link: https://lore.kernel.org/r/20201114083342.13935-1-federico.vaga@vaga.pv.it Signed-off-by: Jonathan Corbet <corbet@lwn.net>
This commit is contained in:
parent
992082d1dc
commit
ac77114270
|
@ -419,26 +419,24 @@ del `dominio Sphinx per il C`_.
|
||||||
Riferimenti usando reStructuredText
|
Riferimenti usando reStructuredText
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Per fare riferimento a funzioni e tipi di dato definiti nei commenti kernel-doc
|
Nei documenti reStructuredText non serve alcuna sintassi speciale per
|
||||||
all'interno dei documenti reStructuredText, utilizzate i riferimenti dal
|
fare riferimento a funzioni e tipi definiti nei commenti
|
||||||
`dominio Sphinx per il C`_. Per esempio::
|
kernel-doc. Sarà sufficiente terminare i nomi di funzione con ``()``,
|
||||||
|
e scrivere ``struct``, ``union``, ``enum``, o ``typedef`` prima di un
|
||||||
|
tipo. Per esempio::
|
||||||
|
|
||||||
See function :c:func:`foo` and struct/union/enum/typedef :c:type:`bar`.
|
See foo()
|
||||||
|
See struct foo.
|
||||||
|
See union bar.
|
||||||
|
See enum baz.
|
||||||
|
See typedef meh.
|
||||||
|
|
||||||
Nonostante il riferimento ai tipi di dato funzioni col solo nome,
|
Tuttavia, la personalizzazione dei collegamenti è possibile solo con
|
||||||
ovvero senza specificare struct/union/enum/typedef, potreste preferire il
|
la seguente sintassi::
|
||||||
seguente::
|
|
||||||
|
|
||||||
See :c:type:`struct foo <foo>`.
|
See :c:func:`my custom link text for function foo <foo>`.
|
||||||
See :c:type:`union bar <bar>`.
|
See :c:type:`my custom link text for struct 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
|
Commenti per una documentazione generale
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
|
|
|
@ -364,6 +364,26 @@ Che verrà rappresentata nel seguente modo:
|
||||||
|
|
||||||
- column 3
|
- column 3
|
||||||
|
|
||||||
|
Riferimenti incrociati
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
Per fare dei riferimenti incrociati da una pagina ad un'altra
|
||||||
|
specificando il percorso a partire dalla cartella *Documentation*.
|
||||||
|
Per esempio, se volete aggiungere un riferimento a questa pagina
|
||||||
|
(l'estensione .rst è opzionale)::
|
||||||
|
|
||||||
|
See Documentation/translations/it_IT/doc-guide/sphinx.rst.
|
||||||
|
|
||||||
|
Se preferite usare un percorso relative allora vi serve la direttiva
|
||||||
|
Sphinx ``doc``. Per esempio, se volete aggiungere un riferimento a
|
||||||
|
questa pagina dalla stessa cartella::
|
||||||
|
|
||||||
|
See :doc:`sphinx`.
|
||||||
|
|
||||||
|
Per maggiori informazioni su come aggiungere riferimenti incrociati a
|
||||||
|
commenti kernel-doc di funzioni o tipi, leggete
|
||||||
|
Documentation/translations/it_IT/doc-guide/sphinx.rst.
|
||||||
|
|
||||||
.. _it_sphinx_kfigure:
|
.. _it_sphinx_kfigure:
|
||||||
|
|
||||||
Figure ed immagini
|
Figure ed immagini
|
||||||
|
|
|
@ -123,7 +123,7 @@ iniziale, i kernel ricevono aggiornamenti per più di un ciclo di sviluppo.
|
||||||
Quindi, per esempio, la storia del kernel 5.2 appare così (anno 2019):
|
Quindi, per esempio, la storia del kernel 5.2 appare così (anno 2019):
|
||||||
|
|
||||||
============== ===============================
|
============== ===============================
|
||||||
15 settembre 5.2 rilascio stabile FIXME settembre è sbagliato
|
7 luglio 5.2 rilascio stabile
|
||||||
14 luglio 5.2.1
|
14 luglio 5.2.1
|
||||||
21 luglio 5.2.2
|
21 luglio 5.2.2
|
||||||
26 luglio 5.2.3
|
26 luglio 5.2.3
|
||||||
|
@ -434,7 +434,7 @@ l'elenco principale lo si trova sul sito:
|
||||||
http://vger.kernel.org/vger-lists.html
|
http://vger.kernel.org/vger-lists.html
|
||||||
|
|
||||||
Esistono liste gestite altrove; un certo numero di queste sono in
|
Esistono liste gestite altrove; un certo numero di queste sono in
|
||||||
lists.redhat.com.
|
redhat.com/mailman/listinfo.
|
||||||
|
|
||||||
La lista di discussione principale per lo sviluppo del kernel è, ovviamente,
|
La lista di discussione principale per lo sviluppo del kernel è, ovviamente,
|
||||||
linux-kernel. Questa lista è un luogo ostile dove trovarsi; i volumi possono
|
linux-kernel. Questa lista è un luogo ostile dove trovarsi; i volumi possono
|
||||||
|
|
|
@ -32,9 +32,10 @@ PC Card, per esempio, probabilmente non dovreste preoccuparvi di pcmciautils.
|
||||||
====================== ================= ========================================
|
====================== ================= ========================================
|
||||||
Programma Versione minima Comando per verificare la versione
|
Programma Versione minima Comando per verificare la versione
|
||||||
====================== ================= ========================================
|
====================== ================= ========================================
|
||||||
GNU C 4.6 gcc --version
|
GNU C 4.9 gcc --version
|
||||||
|
Clang/LLVM (optional) 10.0.1 clang --version
|
||||||
GNU make 3.81 make --version
|
GNU make 3.81 make --version
|
||||||
binutils 2.21 ld -v
|
binutils 2.23 ld -v
|
||||||
flex 2.5.35 flex --version
|
flex 2.5.35 flex --version
|
||||||
bison 2.0 bison --version
|
bison 2.0 bison --version
|
||||||
util-linux 2.10o fdformat --version
|
util-linux 2.10o fdformat --version
|
||||||
|
@ -71,6 +72,16 @@ GCC
|
||||||
La versione necessaria di gcc potrebbe variare a seconda del tipo di CPU nel
|
La versione necessaria di gcc potrebbe variare a seconda del tipo di CPU nel
|
||||||
vostro calcolatore.
|
vostro calcolatore.
|
||||||
|
|
||||||
|
Clang/LLVM (opzionale)
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
L'ultima versione di clang e *LLVM utils* (secondo `releases.llvm.org
|
||||||
|
<https://releases.llvm.org>`_) sono supportati per la generazione del
|
||||||
|
kernel. Non garantiamo che anche i rilasci più vecchi funzionino, inoltre
|
||||||
|
potremmo rimuovere gli espedienti che abbiamo implementato per farli
|
||||||
|
funzionare. Per maggiori informazioni
|
||||||
|
:ref:`Building Linux with Clang/LLVM <kbuild_llvm>`.
|
||||||
|
|
||||||
Make
|
Make
|
||||||
----
|
----
|
||||||
|
|
||||||
|
@ -79,7 +90,7 @@ Per compilare il kernel vi servirà GNU make 3.81 o successivo.
|
||||||
Binutils
|
Binutils
|
||||||
--------
|
--------
|
||||||
|
|
||||||
Per generare il kernel è necessario avere Binutils 2.21 o superiore.
|
Per generare il kernel è necessario avere Binutils 2.23 o superiore.
|
||||||
|
|
||||||
pkg-config
|
pkg-config
|
||||||
----------
|
----------
|
||||||
|
@ -338,6 +349,11 @@ gcc
|
||||||
|
|
||||||
- <ftp://ftp.gnu.org/gnu/gcc/>
|
- <ftp://ftp.gnu.org/gnu/gcc/>
|
||||||
|
|
||||||
|
Clang/LLVM
|
||||||
|
----------
|
||||||
|
|
||||||
|
- :ref:`Getting LLVM <getting_llvm>`.
|
||||||
|
|
||||||
Make
|
Make
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
|
@ -92,16 +92,22 @@ delle righe.
|
||||||
Lo stile del codice riguarda la leggibilità e la manutenibilità utilizzando
|
Lo stile del codice riguarda la leggibilità e la manutenibilità utilizzando
|
||||||
strumenti comuni.
|
strumenti comuni.
|
||||||
|
|
||||||
Il limite delle righe è di 80 colonne e questo e un limite fortemente
|
Come limite di riga si preferiscono le 80 colonne.
|
||||||
desiderato.
|
|
||||||
|
|
||||||
Espressioni più lunghe di 80 colonne saranno spezzettate in pezzi più piccoli,
|
Espressioni più lunghe di 80 colonne dovrebbero essere spezzettate in
|
||||||
a meno che eccedere le 80 colonne non aiuti ad aumentare la leggibilità senza
|
pezzi più piccoli, a meno che eccedere le 80 colonne non aiuti ad
|
||||||
nascondere informazioni. I pezzi derivati sono sostanzialmente più corti degli
|
aumentare la leggibilità senza nascondere informazioni.
|
||||||
originali e vengono posizionati più a destra. Lo stesso si applica, nei file
|
|
||||||
d'intestazione, alle funzioni con una lista di argomenti molto lunga. Tuttavia,
|
I nuovi pezzi derivati sono sostanzialmente più corti degli originali
|
||||||
non spezzettate mai le stringhe visibili agli utenti come i messaggi di
|
e vengono posizionati più a destra. Uno stile molto comune è quello di
|
||||||
printk, questo perché inibireste la possibilità d'utilizzare grep per cercarle.
|
allineare i nuovi pezzi alla parentesi aperta di una funzione.
|
||||||
|
|
||||||
|
Lo stesso si applica, nei file d'intestazione, alle funzioni con una
|
||||||
|
lista di argomenti molto lunga.
|
||||||
|
|
||||||
|
Tuttavia, non spezzettate mai le stringhe visibili agli utenti come i
|
||||||
|
messaggi di printk, questo perché inibireste la possibilità
|
||||||
|
d'utilizzare grep per cercarle.
|
||||||
|
|
||||||
3) Posizionamento di parentesi graffe e spazi
|
3) Posizionamento di parentesi graffe e spazi
|
||||||
---------------------------------------------
|
---------------------------------------------
|
||||||
|
|
|
@ -95,6 +95,11 @@ Invece, usate la seguente funzione::
|
||||||
|
|
||||||
header = kzalloc(struct_size(header, item, count), GFP_KERNEL);
|
header = kzalloc(struct_size(header, item, count), GFP_KERNEL);
|
||||||
|
|
||||||
|
.. note:: Se per caso state usando struct_size() su una struttura dati che
|
||||||
|
in coda contiene un array di lunghezza zero o uno, allora siete
|
||||||
|
invitati a riorganizzare il vostro codice usando il
|
||||||
|
`flexible array member <#zero-length-and-one-element-arrays>`_.
|
||||||
|
|
||||||
Per maggiori dettagli fate riferimento a array_size(),
|
Per maggiori dettagli fate riferimento a array_size(),
|
||||||
array3_size(), e struct_size(), così come la famiglia di
|
array3_size(), e struct_size(), così come la famiglia di
|
||||||
funzioni check_add_overflow() e check_mul_overflow().
|
funzioni check_add_overflow() e check_mul_overflow().
|
||||||
|
@ -116,7 +121,11 @@ di destinazione. Questo può portare ad un overflow oltre i limiti del
|
||||||
buffer e generare svariati tipi di malfunzionamenti. Nonostante l'opzione
|
buffer e generare svariati tipi di malfunzionamenti. Nonostante l'opzione
|
||||||
`CONFIG_FORTIFY_SOURCE=y` e svariate opzioni del compilatore aiutano
|
`CONFIG_FORTIFY_SOURCE=y` e svariate opzioni del compilatore aiutano
|
||||||
a ridurne il rischio, non c'è alcuna buona ragione per continuare ad usare
|
a ridurne il rischio, non c'è alcuna buona ragione per continuare ad usare
|
||||||
questa funzione. La versione sicura da usare è strscpy().
|
questa funzione. La versione sicura da usare è strscpy(), tuttavia va
|
||||||
|
prestata attenzione a tutti quei casi dove viene usato il valore di
|
||||||
|
ritorno di strcpy(). La funzione strscpy() non ritorna un puntatore
|
||||||
|
alla destinazione, ma un contatore dei byte non NUL copiati (oppure
|
||||||
|
un errno negativo se la stringa è stata troncata).
|
||||||
|
|
||||||
strncpy() su stringe terminate con NUL
|
strncpy() su stringe terminate con NUL
|
||||||
--------------------------------------
|
--------------------------------------
|
||||||
|
@ -127,8 +136,12 @@ causati, appunto, dalla mancanza del terminatore. Questa estende la
|
||||||
terminazione nel buffer di destinazione quando la stringa d'origine è più
|
terminazione nel buffer di destinazione quando la stringa d'origine è più
|
||||||
corta; questo potrebbe portare ad una penalizzazione delle prestazioni per
|
corta; questo potrebbe portare ad una penalizzazione delle prestazioni per
|
||||||
chi usa solo stringe terminate. La versione sicura da usare è
|
chi usa solo stringe terminate. La versione sicura da usare è
|
||||||
strscpy(). (chi usa strscpy() e necessita di estendere la
|
strscpy(), tuttavia va prestata attenzione a tutti quei casi dove
|
||||||
terminazione con NUL deve aggiungere una chiamata a memset())
|
viene usato il valore di ritorno di strncpy(). La funzione strscpy()
|
||||||
|
non ritorna un puntatore alla destinazione, ma un contatore dei byte
|
||||||
|
non NUL copiati (oppure un errno negativo se la stringa è stata
|
||||||
|
troncata). Tutti i casi che necessitano di estendere la
|
||||||
|
terminazione con NUL dovrebbero usare strscpy_pad().
|
||||||
|
|
||||||
Se il chiamate no usa stringhe terminate con NUL, allore strncpy()
|
Se il chiamate no usa stringhe terminate con NUL, allore strncpy()
|
||||||
può continuare ad essere usata, ma i buffer di destinazione devono essere
|
può continuare ad essere usata, ma i buffer di destinazione devono essere
|
||||||
|
@ -140,7 +153,10 @@ strlcpy()
|
||||||
La funzione strlcpy(), per prima cosa, legge interamente il buffer di
|
La funzione strlcpy(), per prima cosa, legge interamente il buffer di
|
||||||
origine, magari leggendo più di quanto verrà effettivamente copiato. Questo
|
origine, magari leggendo più di quanto verrà effettivamente copiato. Questo
|
||||||
è inefficiente e può portare a overflow di lettura quando la stringa non è
|
è inefficiente e può portare a overflow di lettura quando la stringa non è
|
||||||
terminata con NUL. La versione sicura da usare è strscpy().
|
terminata con NUL. La versione sicura da usare è strscpy(), tuttavia
|
||||||
|
va prestata attenzione a tutti quei casi dove viene usato il valore di
|
||||||
|
ritorno di strlcpy(), dato che strscpy() ritorna un valore di errno
|
||||||
|
negativo quanto la stringa viene troncata.
|
||||||
|
|
||||||
Segnaposto %p nella stringa di formato
|
Segnaposto %p nella stringa di formato
|
||||||
--------------------------------------
|
--------------------------------------
|
||||||
|
@ -227,3 +243,126 @@ modi:
|
||||||
* ``continue;``
|
* ``continue;``
|
||||||
* ``goto <label>;``
|
* ``goto <label>;``
|
||||||
* ``return [expression];``
|
* ``return [expression];``
|
||||||
|
|
||||||
|
Array di lunghezza zero o con un solo elemento
|
||||||
|
----------------------------------------------
|
||||||
|
All'interno del kernel ricorre spesso la necessita di avere membri
|
||||||
|
di dimensione variabile all'interno di una struttura dati. In questi
|
||||||
|
casi il codice del kernel dovrebbe usare sempre i `"flexible array
|
||||||
|
member" <https://en.wikipedia.org/wiki/Flexible_array_member>`_. La
|
||||||
|
tecnica degli array a lunghezza nulla o di un solo elemento non
|
||||||
|
dovrebbe essere più usata.
|
||||||
|
|
||||||
|
Nel codice C più vecchio, la dichiarazione di un membro di dimensione
|
||||||
|
variabile in coda ad una struttura dati veniva fatto dichiarando un
|
||||||
|
array di un solo elemento posizionato alla fine della struttura dati::
|
||||||
|
|
||||||
|
struct something {
|
||||||
|
size_t count;
|
||||||
|
struct foo items[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
Questo ha portato ad un calcolo di sizeof() traballante (dovrebbe
|
||||||
|
rimuovere la dimensione del singolo elemento in coda per calcolare la
|
||||||
|
dimensione esatta dell' "intestazione"). Per evitare questi problemi è
|
||||||
|
stata introdotta un' `estensione a GNU C
|
||||||
|
<https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html>`_ che
|
||||||
|
permettesse la dichiarazione di array a lungezza zero::
|
||||||
|
|
||||||
|
struct something {
|
||||||
|
size_t count;
|
||||||
|
struct foo items[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
Ma questo ha portato nuovi problemi, e non ha risolto alcuni dei
|
||||||
|
problemi che affliggono entrambe le tecniche: per esempio
|
||||||
|
l'impossibilità di riconoscere se un array di quel tipo viene usato
|
||||||
|
nel mezzo di una struttura dati e _non_ alla fine (potrebbe accadere
|
||||||
|
sia direttamente, sia indirettamente quando si usano le unioni o le
|
||||||
|
strutture di strutture).
|
||||||
|
|
||||||
|
Lo standard C99 introduce i "flexible array members". Questi array non
|
||||||
|
hanno una dimensione nella loro dichiarazione::
|
||||||
|
|
||||||
|
struct something {
|
||||||
|
size_t count;
|
||||||
|
struct foo items[];
|
||||||
|
};
|
||||||
|
|
||||||
|
Questo è il modo con cui ci si aspetta che vengano dichiarati gli
|
||||||
|
elementi di lunghezza variabile in coda alle strutture dati. Permette
|
||||||
|
al compilatore di produrre errori quando gli array flessibili non si
|
||||||
|
trovano alla fine della struttura dati, il che permette di prevenire
|
||||||
|
alcuni tipi di bachi dovuti a `comportamenti inaspettati
|
||||||
|
<https://git.kernel.org/linus/76497732932f15e7323dc805e8ea8dc11bb587cf>`_.
|
||||||
|
Inoltre, permette al compilatore di analizzare correttamente le
|
||||||
|
dimensioni degli array (attraverso sizeof(), `CONFIG_FORTIFY_SOURCE`,
|
||||||
|
e `CONFIG_UBSAN_BOUNDS`). Per esempio, non esiste alcun meccanismo in
|
||||||
|
grado di avvisarci che il seguente uso di sizeof() dia sempre come
|
||||||
|
zero come risultato::
|
||||||
|
|
||||||
|
struct something {
|
||||||
|
size_t count;
|
||||||
|
struct foo items[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct something *instance;
|
||||||
|
|
||||||
|
instance = kmalloc(struct_size(instance, items, count), GFP_KERNEL);
|
||||||
|
instance->count = count;
|
||||||
|
|
||||||
|
size = sizeof(instance->items) * instance->count;
|
||||||
|
memcpy(instance->items, source, size);
|
||||||
|
|
||||||
|
Il valore di ``size`` nell'ultima riga sarà ``zero``, quando uno
|
||||||
|
invece si aspetterebbe che il suo valore sia la dimensione totale in
|
||||||
|
byte dell'allocazione dynamica che abbiamo appena fatto per l'array
|
||||||
|
``items``. Qui un paio di esempi reali del problema: `collegamento 1
|
||||||
|
<https://git.kernel.org/linus/f2cd32a443da694ac4e28fbf4ac6f9d5cc63a539>`_,
|
||||||
|
`collegamento 2
|
||||||
|
<https://git.kernel.org/linus/ab91c2a89f86be2898cee208d492816ec238b2cf>`_.
|
||||||
|
Invece, `i flexible array members hanno un tipo incompleto, e quindi
|
||||||
|
sizeof() non può essere applicato
|
||||||
|
<https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html>`_; dunque ogni
|
||||||
|
uso scorretto di questo operatore verrà identificato immediatamente
|
||||||
|
durante la compilazione.
|
||||||
|
|
||||||
|
Per quanto riguarda gli array di un solo elemento, bisogna essere
|
||||||
|
consapevoli che `questi array occupano almeno quanto lo spazio di un
|
||||||
|
singolo oggetti dello stesso tipo
|
||||||
|
<https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html>`_, e quindi
|
||||||
|
contribuiscono al calcolo della dimensione della struttura che li
|
||||||
|
contiene. In questo caso è facile commettere errori quando si vuole
|
||||||
|
calcolare la dimensione totale della memoria totale da allocare per
|
||||||
|
una struttura dati::
|
||||||
|
|
||||||
|
struct something {
|
||||||
|
size_t count;
|
||||||
|
struct foo items[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct something *instance;
|
||||||
|
|
||||||
|
instance = kmalloc(struct_size(instance, items, count - 1), GFP_KERNEL);
|
||||||
|
instance->count = count;
|
||||||
|
|
||||||
|
size = sizeof(instance->items) * instance->count;
|
||||||
|
memcpy(instance->items, source, size);
|
||||||
|
|
||||||
|
In questo esempio ci siamo dovuti ricordare di usare ``count - 1`` in
|
||||||
|
struct_size(), altrimenti avremmo --inavvertitamente-- allocato
|
||||||
|
memoria per un oggetti ``items`` in più. Il modo più pulito e meno
|
||||||
|
propenso agli errori è quello di usare i `flexible array member`, in
|
||||||
|
combinazione con struct_size() e flex_array_size()::
|
||||||
|
|
||||||
|
struct something {
|
||||||
|
size_t count;
|
||||||
|
struct foo items[];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct something *instance;
|
||||||
|
|
||||||
|
instance = kmalloc(struct_size(instance, items, count), GFP_KERNEL);
|
||||||
|
instance->count = count;
|
||||||
|
|
||||||
|
memcpy(instance->items, source, flex_array_size(instance, items, instance->count));
|
||||||
|
|
|
@ -32,6 +32,11 @@ impostato come ``text/plain``. Tuttavia, generalmente gli allegati non sono
|
||||||
ben apprezzati perché rende più difficile citare porzioni di patch durante il
|
ben apprezzati perché rende più difficile citare porzioni di patch durante il
|
||||||
processo di revisione.
|
processo di revisione.
|
||||||
|
|
||||||
|
Inoltre, è vivamente raccomandato l'uso di puro testo nel corpo del
|
||||||
|
messaggio, sia per la patch che per qualsiasi altro messaggio. Il sito
|
||||||
|
https://useplaintext.email/ può esservi d'aiuto per configurare il
|
||||||
|
vostro programma di posta elettronica.
|
||||||
|
|
||||||
I programmi di posta elettronica che vengono usati per inviare le patch per il
|
I programmi di posta elettronica che vengono usati per inviare le patch per il
|
||||||
kernel Linux dovrebbero inviarle senza alterazioni. Per esempio, non
|
kernel Linux dovrebbero inviarle senza alterazioni. Per esempio, non
|
||||||
dovrebbero modificare o rimuovere tabulazioni o spazi, nemmeno all'inizio o
|
dovrebbero modificare o rimuovere tabulazioni o spazi, nemmeno all'inizio o
|
||||||
|
|
|
@ -11,13 +11,15 @@ Linguaggio di programmazione
|
||||||
Il kernel è scritto nel linguaggio di programmazione C [it-c-language]_.
|
Il kernel è scritto nel linguaggio di programmazione C [it-c-language]_.
|
||||||
Più precisamente, il kernel viene compilato con ``gcc`` [it-gcc]_ usando
|
Più precisamente, il kernel viene compilato con ``gcc`` [it-gcc]_ usando
|
||||||
l'opzione ``-std=gnu89`` [it-gcc-c-dialect-options]_: il dialetto GNU
|
l'opzione ``-std=gnu89`` [it-gcc-c-dialect-options]_: il dialetto GNU
|
||||||
dello standard ISO C90 (con l'aggiunta di alcune funzionalità da C99)
|
dello standard ISO C90 (con l'aggiunta di alcune funzionalità da C99).
|
||||||
|
Linux supporta anche ``clang`` [it-clang]_, leggete la documentazione
|
||||||
|
:ref:`Building Linux with Clang/LLVM <kbuild_llvm>`.
|
||||||
|
|
||||||
Questo dialetto contiene diverse estensioni al linguaggio [it-gnu-extensions]_,
|
Questo dialetto contiene diverse estensioni al linguaggio [it-gnu-extensions]_,
|
||||||
e molte di queste vengono usate sistematicamente dal kernel.
|
e molte di queste vengono usate sistematicamente dal kernel.
|
||||||
|
|
||||||
Il kernel offre un certo livello di supporto per la compilazione con ``clang``
|
Il kernel offre un certo livello di supporto per la compilazione con
|
||||||
[it-clang]_ e ``icc`` [it-icc]_ su diverse architetture, tuttavia in questo momento
|
``icc`` [it-icc]_ su diverse architetture, tuttavia in questo momento
|
||||||
il supporto non è completo e richiede delle patch aggiuntive.
|
il supporto non è completo e richiede delle patch aggiuntive.
|
||||||
|
|
||||||
Attributi
|
Attributi
|
||||||
|
|
|
@ -16,21 +16,19 @@ vostre patch accettate.
|
||||||
|
|
||||||
Questo documento contiene un vasto numero di suggerimenti concisi. Per
|
Questo documento contiene un vasto numero di suggerimenti concisi. Per
|
||||||
maggiori dettagli su come funziona il processo di sviluppo del kernel leggete
|
maggiori dettagli su come funziona il processo di sviluppo del kernel leggete
|
||||||
:ref:`Documentation/translations/it_IT/process <it_development_process_main>`.
|
:doc:`development-process`.
|
||||||
Leggete anche :ref:`Documentation/translations/it_IT/process/submit-checklist.rst <it_submitchecklist>`
|
Leggete anche :doc:`submit-checklist` per una lista di punti da
|
||||||
per una lista di punti da verificare prima di inviare del codice. Se state
|
verificare prima di inviare del codice. Se state inviando un driver,
|
||||||
inviando un driver, allora leggete anche :ref:`Documentation/translations/it_IT/process/submitting-drivers.rst <it_submittingdrivers>`;
|
allora leggete anche :doc:`submitting-drivers`; per delle patch
|
||||||
per delle patch relative alle associazioni per Device Tree leggete
|
relative alle associazioni per Device Tree leggete
|
||||||
Documentation/devicetree/bindings/submitting-patches.rst.
|
:doc:`submitting-patches`.
|
||||||
|
|
||||||
Molti di questi passi descrivono il comportamento di base del sistema di
|
Questa documentazione assume che sappiate usare ``git`` per preparare le patch.
|
||||||
controllo di versione ``git``; se utilizzate ``git`` per preparare le vostre
|
Se non siete pratici di ``git``, allora è bene che lo impariate;
|
||||||
patch molto del lavoro più ripetitivo lo troverete già fatto per voi, tuttavia
|
renderà la vostra vita di sviluppatore del kernel molto più semplice.
|
||||||
dovete preparare e documentare un certo numero di patch. Generalmente, l'uso
|
|
||||||
di ``git`` renderà la vostra vita di sviluppatore del kernel più facile.
|
|
||||||
|
|
||||||
0) Ottenere i sorgenti attuali
|
Ottenere i sorgenti attuali
|
||||||
------------------------------
|
---------------------------
|
||||||
|
|
||||||
Se non avete un repositorio coi sorgenti del kernel più recenti, allora usate
|
Se non avete un repositorio coi sorgenti del kernel più recenti, allora usate
|
||||||
``git`` per ottenerli. Vorrete iniziare col repositorio principale che può
|
``git`` per ottenerli. Vorrete iniziare col repositorio principale che può
|
||||||
|
@ -45,69 +43,10 @@ Guardate l'elemento **T:** per un determinato sottosistema nel file MAINTANERS
|
||||||
che troverete nei sorgenti, o semplicemente chiedete al manutentore nel caso
|
che troverete nei sorgenti, o semplicemente chiedete al manutentore nel caso
|
||||||
in cui i sorgenti da usare non siano elencati il quel file.
|
in cui i sorgenti da usare non siano elencati il quel file.
|
||||||
|
|
||||||
Esiste ancora la possibilità di scaricare un rilascio del kernel come archivio
|
|
||||||
tar (come descritto in una delle prossime sezioni), ma questa è la via più
|
|
||||||
complicata per sviluppare per il kernel.
|
|
||||||
|
|
||||||
1) ``diff -up``
|
|
||||||
---------------
|
|
||||||
|
|
||||||
Se dovete produrre le vostre patch a mano, usate ``diff -up`` o ``diff -uprN``
|
|
||||||
per crearle. Git produce di base le patch in questo formato; se state
|
|
||||||
usando ``git``, potete saltare interamente questa sezione.
|
|
||||||
|
|
||||||
Tutte le modifiche al kernel Linux avvengono mediate patch, come descritte
|
|
||||||
in :manpage:`diff(1)`. Quando create la vostra patch, assicuratevi di
|
|
||||||
crearla nel formato "unified diff", come l'argomento ``-u`` di
|
|
||||||
:manpage:`diff(1)`.
|
|
||||||
Inoltre, per favore usate l'argomento ``-p`` per mostrare la funzione C
|
|
||||||
alla quale si riferiscono le diverse modifiche - questo rende il risultato
|
|
||||||
di ``diff`` molto più facile da leggere. Le patch dovrebbero essere basate
|
|
||||||
sulla radice dei sorgenti del kernel, e non sulle sue sottocartelle.
|
|
||||||
|
|
||||||
Per creare una patch per un singolo file, spesso è sufficiente fare::
|
|
||||||
|
|
||||||
SRCTREE=linux
|
|
||||||
MYFILE=drivers/net/mydriver.c
|
|
||||||
|
|
||||||
cd $SRCTREE
|
|
||||||
cp $MYFILE $MYFILE.orig
|
|
||||||
vi $MYFILE # make your change
|
|
||||||
cd ..
|
|
||||||
diff -up $SRCTREE/$MYFILE{.orig,} > /tmp/patch
|
|
||||||
|
|
||||||
Per creare una patch per molteplici file, dovreste spacchettare i sorgenti
|
|
||||||
"vergini", o comunque non modificati, e fare un ``diff`` coi vostri.
|
|
||||||
Per esempio::
|
|
||||||
|
|
||||||
MYSRC=/devel/linux
|
|
||||||
|
|
||||||
tar xvfz linux-3.19.tar.gz
|
|
||||||
mv linux-3.19 linux-3.19-vanilla
|
|
||||||
diff -uprN -X linux-3.19-vanilla/Documentation/dontdiff \
|
|
||||||
linux-3.19-vanilla $MYSRC > /tmp/patch
|
|
||||||
|
|
||||||
``dontdiff`` è una lista di file che sono generati durante il processo di
|
|
||||||
compilazione del kernel; questi dovrebbero essere ignorati in qualsiasi
|
|
||||||
patch generata con :manpage:`diff(1)`.
|
|
||||||
|
|
||||||
Assicuratevi che la vostra patch non includa file che non ne fanno veramente
|
|
||||||
parte. Al fine di verificarne la correttezza, assicuratevi anche di
|
|
||||||
revisionare la vostra patch -dopo- averla generata con :manpage:`diff(1)`.
|
|
||||||
|
|
||||||
Se le vostre modifiche producono molte differenze, allora dovrete dividerle
|
|
||||||
in patch indipendenti che modificano le cose in passi logici; leggete
|
|
||||||
:ref:`split_changes`. Questo faciliterà la revisione da parte degli altri
|
|
||||||
sviluppatori, il che è molto importante se volete che la patch venga accettata.
|
|
||||||
|
|
||||||
Se state utilizzando ``git``, ``git rebase -i`` può aiutarvi nel procedimento.
|
|
||||||
Se non usate ``git``, un'alternativa popolare è ``quilt``
|
|
||||||
<http://savannah.nongnu.org/projects/quilt>.
|
|
||||||
|
|
||||||
.. _it_describe_changes:
|
.. _it_describe_changes:
|
||||||
|
|
||||||
2) Descrivete le vostre modifiche
|
Descrivete le vostre modifiche
|
||||||
---------------------------------
|
------------------------------
|
||||||
|
|
||||||
Descrivete il vostro problema. Esiste sempre un problema che via ha spinto
|
Descrivete il vostro problema. Esiste sempre un problema che via ha spinto
|
||||||
ha fare il vostro lavoro, che sia la correzione di un baco da una riga o una
|
ha fare il vostro lavoro, che sia la correzione di un baco da una riga o una
|
||||||
|
@ -208,10 +147,15 @@ precedente::
|
||||||
[pretty]
|
[pretty]
|
||||||
fixes = Fixes: %h (\"%s\")
|
fixes = Fixes: %h (\"%s\")
|
||||||
|
|
||||||
|
Un esempio::
|
||||||
|
|
||||||
|
$ git log -1 --pretty=fixes 54a4f0239f2e
|
||||||
|
Fixes: 54a4f0239f2e ("KVM: MMU: make kvm_mmu_zap_page() return the number of pages it actually freed")
|
||||||
|
|
||||||
.. _it_split_changes:
|
.. _it_split_changes:
|
||||||
|
|
||||||
3) Separate le vostre modifiche
|
Separate le vostre modifiche
|
||||||
-------------------------------
|
----------------------------
|
||||||
|
|
||||||
Separate ogni **cambiamento logico** in patch distinte.
|
Separate ogni **cambiamento logico** in patch distinte.
|
||||||
|
|
||||||
|
@ -312,7 +256,8 @@ sfruttato, inviatela a security@kernel.org. Per bachi importanti, un breve
|
||||||
embargo potrebbe essere preso in considerazione per dare il tempo alle
|
embargo potrebbe essere preso in considerazione per dare il tempo alle
|
||||||
distribuzioni di prendere la patch e renderla disponibile ai loro utenti;
|
distribuzioni di prendere la patch e renderla disponibile ai loro utenti;
|
||||||
in questo caso, ovviamente, la patch non dovrebbe essere inviata su alcuna
|
in questo caso, ovviamente, la patch non dovrebbe essere inviata su alcuna
|
||||||
lista di discussione pubblica.
|
lista di discussione pubblica. Leggete anche
|
||||||
|
:doc:`/admin-guide/security-bugs`.
|
||||||
|
|
||||||
Patch che correggono bachi importanti su un kernel già rilasciato, dovrebbero
|
Patch che correggono bachi importanti su un kernel già rilasciato, dovrebbero
|
||||||
essere inviate ai manutentori dei kernel stabili aggiungendo la seguente riga::
|
essere inviate ai manutentori dei kernel stabili aggiungendo la seguente riga::
|
||||||
|
@ -354,8 +299,8 @@ Le patch banali devono rientrare in una delle seguenti categorie:
|
||||||
"patch monkey" in modalità ritrasmissione)
|
"patch monkey" in modalità ritrasmissione)
|
||||||
|
|
||||||
|
|
||||||
6) Niente: MIME, links, compressione, allegati. Solo puro testo
|
Niente: MIME, links, compressione, allegati. Solo puro testo
|
||||||
----------------------------------------------------------------
|
-------------------------------------------------------------
|
||||||
|
|
||||||
Linus e gli altri sviluppatori del kernel devono poter commentare
|
Linus e gli altri sviluppatori del kernel devono poter commentare
|
||||||
le modifiche che sottomettete. Per uno sviluppatore è importante
|
le modifiche che sottomettete. Per uno sviluppatore è importante
|
||||||
|
@ -364,7 +309,11 @@ programmi di posta elettronica, cosicché sia possibile commentare
|
||||||
una porzione specifica del vostro codice.
|
una porzione specifica del vostro codice.
|
||||||
|
|
||||||
Per questa ragione tutte le patch devono essere inviate via e-mail
|
Per questa ragione tutte le patch devono essere inviate via e-mail
|
||||||
come testo.
|
come testo. Il modo più facile, e quello raccomandato, è con ``git
|
||||||
|
send-email``. Al sito https://git-send-email.io è disponibile una
|
||||||
|
guida interattiva sull'uso di ``git send-email``.
|
||||||
|
|
||||||
|
Se decidete di non usare ``git send-email``:
|
||||||
|
|
||||||
.. warning::
|
.. warning::
|
||||||
|
|
||||||
|
@ -381,28 +330,20 @@ così la possibilità che il vostro allegato-MIME venga accettato.
|
||||||
Eccezione: se il vostro servizio di posta storpia le patch, allora qualcuno
|
Eccezione: se il vostro servizio di posta storpia le patch, allora qualcuno
|
||||||
potrebbe chiedervi di rinviarle come allegato MIME.
|
potrebbe chiedervi di rinviarle come allegato MIME.
|
||||||
|
|
||||||
Leggete :ref:`Documentation/translations/it_IT/process/email-clients.rst <it_email_clients>`
|
Leggete :doc:`/translations/it_IT/process/email-clients`
|
||||||
per dei suggerimenti sulla configurazione del programmi di posta elettronica
|
per dei suggerimenti sulla configurazione del programmi di posta elettronica
|
||||||
per l'invio di patch intatte.
|
per l'invio di patch intatte.
|
||||||
|
|
||||||
7) Dimensione delle e-mail
|
Rispondere ai commenti di revisione
|
||||||
--------------------------
|
-----------------------------------
|
||||||
|
|
||||||
Le grosse modifiche non sono adatte ad una lista di discussione, e nemmeno
|
In risposta alla vostra email, quasi certamente i revisori vi
|
||||||
per alcuni manutentori. Se la vostra patch, non compressa, eccede i 300 kB
|
invieranno dei commenti su come migliorare la vostra patch. Dovete
|
||||||
di spazio, allora caricatela in una spazio accessibile su internet fornendo
|
rispondere a questi commenti; ignorare i revisori è un ottimo modo per
|
||||||
l'URL (collegamento) ad essa. Ma notate che se la vostra patch eccede i 300 kB
|
essere ignorati. Riscontri o domande che non conducono ad una
|
||||||
è quasi certo che necessiti comunque di essere spezzettata.
|
modifica del codice quasi certamente dovrebbero portare ad un commento
|
||||||
|
nel changelog cosicché il prossimo revisore potrà meglio comprendere
|
||||||
8) Rispondere ai commenti di revisione
|
cosa stia accadendo.
|
||||||
--------------------------------------
|
|
||||||
|
|
||||||
Quasi certamente i revisori vi invieranno dei commenti su come migliorare
|
|
||||||
la vostra patch. Dovete rispondere a questi commenti; ignorare i revisori
|
|
||||||
è un ottimo modo per essere ignorati. Riscontri o domande che non conducono
|
|
||||||
ad una modifica del codice quasi certamente dovrebbero portare ad un commento
|
|
||||||
nel changelog cosicché il prossimo revisore potrà meglio comprendere cosa stia
|
|
||||||
accadendo.
|
|
||||||
|
|
||||||
Assicuratevi di dire ai revisori quali cambiamenti state facendo e di
|
Assicuratevi di dire ai revisori quali cambiamenti state facendo e di
|
||||||
ringraziarli per il loro tempo. Revisionare codice è un lavoro faticoso e che
|
ringraziarli per il loro tempo. Revisionare codice è un lavoro faticoso e che
|
||||||
|
@ -410,8 +351,12 @@ richiede molto tempo, e a volte i revisori diventano burberi. Tuttavia, anche
|
||||||
in questo caso, rispondete con educazione e concentratevi sul problema che
|
in questo caso, rispondete con educazione e concentratevi sul problema che
|
||||||
hanno evidenziato.
|
hanno evidenziato.
|
||||||
|
|
||||||
9) Non scoraggiatevi - o impazientitevi
|
Leggete :doc:`/translations/it_IT/process/email-clients` per
|
||||||
---------------------------------------
|
le raccomandazioni sui programmi di posta elettronica e l'etichetta da usare
|
||||||
|
sulle liste di discussione.
|
||||||
|
|
||||||
|
Non scoraggiatevi - o impazientitevi
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
Dopo che avete inviato le vostre modifiche, siate pazienti e aspettate.
|
Dopo che avete inviato le vostre modifiche, siate pazienti e aspettate.
|
||||||
I revisori sono persone occupate e potrebbero non ricevere la vostra patch
|
I revisori sono persone occupate e potrebbero non ricevere la vostra patch
|
||||||
|
@ -424,17 +369,19 @@ aver inviato le patch correttamente. Aspettate almeno una settimana prima di
|
||||||
rinviare le modifiche o sollecitare i revisori - probabilmente anche di più
|
rinviare le modifiche o sollecitare i revisori - probabilmente anche di più
|
||||||
durante la finestra d'integrazione.
|
durante la finestra d'integrazione.
|
||||||
|
|
||||||
10) Aggiungete PATCH nell'oggetto
|
Aggiungete PATCH nell'oggetto
|
||||||
---------------------------------
|
-----------------------------
|
||||||
|
|
||||||
Dato l'alto volume di e-mail per Linus, e la lista linux-kernel, è prassi
|
Dato l'alto volume di e-mail per Linus, e la lista linux-kernel, è prassi
|
||||||
prefiggere il vostro oggetto con [PATCH]. Questo permette a Linus e agli
|
prefiggere il vostro oggetto con [PATCH]. Questo permette a Linus e agli
|
||||||
altri sviluppatori del kernel di distinguere facilmente le patch dalle altre
|
altri sviluppatori del kernel di distinguere facilmente le patch dalle altre
|
||||||
discussioni.
|
discussioni.
|
||||||
|
|
||||||
|
``git send-email`` lo fa automaticamente.
|
||||||
|
|
||||||
11) Firmate il vostro lavoro - Il certificato d'origine dello sviluppatore
|
|
||||||
--------------------------------------------------------------------------
|
Firmate il vostro lavoro - Il certificato d'origine dello sviluppatore
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Per migliorare la tracciabilità su "chi ha fatto cosa", specialmente per
|
Per migliorare la tracciabilità su "chi ha fatto cosa", specialmente per
|
||||||
quelle patch che per raggiungere lo stadio finale passano attraverso
|
quelle patch che per raggiungere lo stadio finale passano attraverso
|
||||||
|
@ -477,65 +424,17 @@ poi dovete solo aggiungere una riga che dice::
|
||||||
Signed-off-by: Random J Developer <random@developer.example.org>
|
Signed-off-by: Random J Developer <random@developer.example.org>
|
||||||
|
|
||||||
usando il vostro vero nome (spiacenti, non si accettano pseudonimi o
|
usando il vostro vero nome (spiacenti, non si accettano pseudonimi o
|
||||||
contributi anonimi).
|
contributi anonimi). Questo verrà fatto automaticamente se usate
|
||||||
|
``git commit -s``. Anche il ripristino di uno stato precedente dovrebbe
|
||||||
|
includere "Signed-off-by", se usate ``git revert -s`` questo verrà
|
||||||
|
fatto automaticamente.
|
||||||
|
|
||||||
Alcune persone aggiungono delle etichette alla fine. Per ora queste verranno
|
Alcune persone aggiungono delle etichette alla fine. Per ora queste verranno
|
||||||
ignorate, ma potete farlo per meglio identificare procedure aziendali interne o
|
ignorate, ma potete farlo per meglio identificare procedure aziendali interne o
|
||||||
per aggiungere dettagli circa la firma.
|
per aggiungere dettagli circa la firma.
|
||||||
|
|
||||||
Se siete un manutentore di un sottosistema o di un ramo, qualche volta dovrete
|
Quando utilizzare Acked-by:, Cc:, e Co-developed-by:
|
||||||
modificare leggermente le patch che avete ricevuto al fine di poterle
|
----------------------------------------------------
|
||||||
integrare; questo perché il codice non è esattamente lo stesso nei vostri
|
|
||||||
sorgenti e in quelli dei vostri contributori. Se rispettate rigidamente la
|
|
||||||
regola (c), dovreste chiedere al mittente di rifare la patch, ma questo è
|
|
||||||
controproducente e una totale perdita di tempo ed energia. La regola (b)
|
|
||||||
vi permette di correggere il codice, ma poi diventa davvero maleducato cambiare
|
|
||||||
la patch di qualcuno e addossargli la responsabilità per i vostri bachi.
|
|
||||||
Per risolvere questo problema dovreste aggiungere una riga, fra l'ultimo
|
|
||||||
Signed-off-by e il vostro, che spiega la vostra modifica. Nonostante non ci
|
|
||||||
sia nulla di obbligatorio, un modo efficace è quello di indicare il vostro
|
|
||||||
nome o indirizzo email fra parentesi quadre, seguito da una breve descrizione;
|
|
||||||
questo renderà abbastanza visibile chi è responsabile per le modifiche
|
|
||||||
dell'ultimo minuto. Per esempio::
|
|
||||||
|
|
||||||
Signed-off-by: Random J Developer <random@developer.example.org>
|
|
||||||
[lucky@maintainer.example.org: struct foo moved from foo.c to foo.h]
|
|
||||||
Signed-off-by: Lucky K Maintainer <lucky@maintainer.example.org>
|
|
||||||
|
|
||||||
Questa pratica è particolarmente utile se siete i manutentori di un ramo
|
|
||||||
stabile ma al contempo volete dare credito agli autori, tracciare e integrare
|
|
||||||
le modifiche, e proteggere i mittenti dalle lamentele. Notate che in nessuna
|
|
||||||
circostanza è permessa la modifica dell'identità dell'autore (l'intestazione
|
|
||||||
From), dato che è quella che appare nei changelog.
|
|
||||||
|
|
||||||
Un appunto speciale per chi porta il codice su vecchie versioni. Sembra che
|
|
||||||
sia comune l'utile pratica di inserire un'indicazione circa l'origine della
|
|
||||||
patch all'inizio del messaggio di commit (appena dopo la riga dell'oggetto)
|
|
||||||
al fine di migliorare la tracciabilità. Per esempio, questo è quello che si
|
|
||||||
vede nel rilascio stabile 3.x-stable::
|
|
||||||
|
|
||||||
Date: Tue Oct 7 07:26:38 2014 -0400
|
|
||||||
|
|
||||||
libata: Un-break ATA blacklist
|
|
||||||
|
|
||||||
commit 1c40279960bcd7d52dbdf1d466b20d24b99176c8 upstream.
|
|
||||||
|
|
||||||
E qui quello che potrebbe vedersi su un kernel più vecchio dove la patch è
|
|
||||||
stata applicata::
|
|
||||||
|
|
||||||
Date: Tue May 13 22:12:27 2008 +0200
|
|
||||||
|
|
||||||
wireless, airo: waitbusy() won't delay
|
|
||||||
|
|
||||||
[backport of 2.6 commit b7acbdfbd1f277c1eb23f344f899cfa4cd0bf36a]
|
|
||||||
|
|
||||||
Qualunque sia il formato, questa informazione fornisce un importante aiuto
|
|
||||||
alle persone che vogliono seguire i vostri sorgenti, e quelle che cercano
|
|
||||||
dei bachi.
|
|
||||||
|
|
||||||
|
|
||||||
12) Quando utilizzare Acked-by:, Cc:, e Co-developed-by:
|
|
||||||
--------------------------------------------------------
|
|
||||||
|
|
||||||
L'etichetta Signed-off-by: indica che il firmatario è stato coinvolto nello
|
L'etichetta Signed-off-by: indica che il firmatario è stato coinvolto nello
|
||||||
sviluppo della patch, o che era nel suo percorso di consegna.
|
sviluppo della patch, o che era nel suo percorso di consegna.
|
||||||
|
@ -604,8 +503,8 @@ Esempio di una patch sottomessa dall'autore Co-developed-by:::
|
||||||
Co-developed-by: Submitting Co-Author <sub@coauthor.example.org>
|
Co-developed-by: Submitting Co-Author <sub@coauthor.example.org>
|
||||||
Signed-off-by: Submitting Co-Author <sub@coauthor.example.org>
|
Signed-off-by: Submitting Co-Author <sub@coauthor.example.org>
|
||||||
|
|
||||||
13) Utilizzare Reported-by:, Tested-by:, Reviewed-by:, Suggested-by: e Fixes:
|
Utilizzare Reported-by:, Tested-by:, Reviewed-by:, Suggested-by: e Fixes:
|
||||||
-----------------------------------------------------------------------------
|
-------------------------------------------------------------------------
|
||||||
|
|
||||||
L'etichetta Reported-by da credito alle persone che trovano e riportano i bachi
|
L'etichetta Reported-by da credito alle persone che trovano e riportano i bachi
|
||||||
e si spera che questo possa ispirarli ad aiutarci nuovamente in futuro.
|
e si spera che questo possa ispirarli ad aiutarci nuovamente in futuro.
|
||||||
|
@ -654,6 +553,13 @@ revisori conosciuti per la loro conoscenza sulla materia in oggetto e per la
|
||||||
loro serietà nella revisione, accrescerà le probabilità che la vostra patch
|
loro serietà nella revisione, accrescerà le probabilità che la vostra patch
|
||||||
venga integrate nel kernel.
|
venga integrate nel kernel.
|
||||||
|
|
||||||
|
Quando si riceve una email sulla lista di discussione da un tester o
|
||||||
|
un revisore, le etichette Tested-by o Reviewd-by devono essere
|
||||||
|
aggiunte dall'autore quando invierà nuovamente la patch. Tuttavia, se
|
||||||
|
la patch è cambiata in modo significativo, queste etichette potrebbero
|
||||||
|
non avere più senso e quindi andrebbero rimosse. Solitamente si tiene traccia
|
||||||
|
della rimozione nel changelog della patch (subito dopo il separatore '---').
|
||||||
|
|
||||||
L'etichetta Suggested-by: indica che l'idea della patch è stata suggerita
|
L'etichetta Suggested-by: indica che l'idea della patch è stata suggerita
|
||||||
dalla persona nominata e le da credito. Tenete a mente che questa etichetta
|
dalla persona nominata e le da credito. Tenete a mente che questa etichetta
|
||||||
non dovrebbe essere aggiunta senza un permesso esplicito, specialmente se
|
non dovrebbe essere aggiunta senza un permesso esplicito, specialmente se
|
||||||
|
@ -669,8 +575,8 @@ Questo è il modo suggerito per indicare che un baco è stato corretto nella
|
||||||
patch. Per maggiori dettagli leggete :ref:`it_describe_changes`
|
patch. Per maggiori dettagli leggete :ref:`it_describe_changes`
|
||||||
|
|
||||||
|
|
||||||
14) Il formato canonico delle patch
|
Il formato canonico delle patch
|
||||||
-----------------------------------
|
-------------------------------
|
||||||
|
|
||||||
Questa sezione descrive il formato che dovrebbe essere usato per le patch.
|
Questa sezione descrive il formato che dovrebbe essere usato per le patch.
|
||||||
Notate che se state usando un repositorio ``git`` per salvare le vostre patch
|
Notate che se state usando un repositorio ``git`` per salvare le vostre patch
|
||||||
|
@ -788,8 +694,8 @@ Maggiori dettagli sul formato delle patch nei riferimenti qui di seguito.
|
||||||
|
|
||||||
.. _it_explicit_in_reply_to:
|
.. _it_explicit_in_reply_to:
|
||||||
|
|
||||||
15) Usare esplicitamente In-Reply-To nell'intestazione
|
Usare esplicitamente In-Reply-To nell'intestazione
|
||||||
------------------------------------------------------
|
--------------------------------------------------
|
||||||
|
|
||||||
Aggiungere manualmente In-Reply-To: nell'intestazione dell'e-mail
|
Aggiungere manualmente In-Reply-To: nell'intestazione dell'e-mail
|
||||||
potrebbe essere d'aiuto per associare una patch ad una discussione
|
potrebbe essere d'aiuto per associare una patch ad una discussione
|
||||||
|
@ -802,65 +708,6 @@ giungla di riferimenti all'interno dei programmi di posta. Se un collegamento
|
||||||
ad una versione precedente di una serie di patch (per esempio, potete usarlo
|
ad una versione precedente di una serie di patch (per esempio, potete usarlo
|
||||||
per l'email introduttiva alla serie).
|
per l'email introduttiva alla serie).
|
||||||
|
|
||||||
16) Inviare richieste ``git pull``
|
|
||||||
----------------------------------
|
|
||||||
|
|
||||||
Se avete una serie di patch, potrebbe essere più conveniente per un manutentore
|
|
||||||
tirarle dentro al repositorio del sottosistema attraverso l'operazione
|
|
||||||
``git pull``. Comunque, tenete presente che prendere patch da uno sviluppatore
|
|
||||||
in questo modo richiede un livello di fiducia più alto rispetto a prenderle da
|
|
||||||
una lista di discussione. Di conseguenza, molti manutentori sono riluttanti
|
|
||||||
ad accettare richieste di *pull*, specialmente dagli sviluppatori nuovi e
|
|
||||||
quindi sconosciuti. Se siete in dubbio, potete fare una richiesta di *pull*
|
|
||||||
come messaggio introduttivo ad una normale pubblicazione di patch, così
|
|
||||||
il manutentore avrà la possibilità di scegliere come integrarle.
|
|
||||||
|
|
||||||
Una richiesta di *pull* dovrebbe avere nell'oggetto [GIT] o [PULL].
|
|
||||||
La richiesta stessa dovrebbe includere il nome del repositorio e quello del
|
|
||||||
ramo su una singola riga; dovrebbe essere più o meno così::
|
|
||||||
|
|
||||||
Please pull from
|
|
||||||
|
|
||||||
git://jdelvare.pck.nerim.net/jdelvare-2.6 i2c-for-linus
|
|
||||||
|
|
||||||
to get these changes:
|
|
||||||
|
|
||||||
Una richiesta di *pull* dovrebbe includere anche un messaggio generico
|
|
||||||
che dica cos'è incluso, una lista delle patch usando ``git shortlog``, e una
|
|
||||||
panoramica sugli effetti della serie di patch con ``diffstat``. Il modo più
|
|
||||||
semplice per ottenere tutte queste informazioni è, ovviamente, quello di
|
|
||||||
lasciar fare tutto a ``git`` con il comando ``git request-pull``.
|
|
||||||
|
|
||||||
Alcuni manutentori (incluso Linus) vogliono vedere le richieste di *pull*
|
|
||||||
da commit firmati con GPG; questo fornisce una maggiore garanzia sul fatto
|
|
||||||
che siate stati proprio voi a fare la richiesta. In assenza di tale etichetta
|
|
||||||
firmata Linus, in particolare, non prenderà alcuna patch da siti pubblici come
|
|
||||||
GitHub.
|
|
||||||
|
|
||||||
Il primo passo verso la creazione di questa etichetta firmata è quello di
|
|
||||||
creare una chiave GNUPG ed averla fatta firmare da uno o più sviluppatori
|
|
||||||
principali del kernel. Questo potrebbe essere difficile per i nuovi
|
|
||||||
sviluppatori, ma non ci sono altre vie. Andare alle conferenze potrebbe
|
|
||||||
essere un buon modo per trovare sviluppatori che possano firmare la vostra
|
|
||||||
chiave.
|
|
||||||
|
|
||||||
Una volta che avete preparato la vostra serie di patch in ``git``, e volete che
|
|
||||||
qualcuno le prenda, create una etichetta firmata col comando ``git tag -s``.
|
|
||||||
Questo creerà una nuova etichetta che identifica l'ultimo commit della serie
|
|
||||||
contenente una firma creata con la vostra chiave privata. Avrete anche
|
|
||||||
l'opportunità di aggiungere un messaggio di changelog all'etichetta; questo è
|
|
||||||
il posto ideale per descrivere gli effetti della richiesta di *pull*.
|
|
||||||
|
|
||||||
Se i sorgenti da cui il manutentore prenderà le patch non sono gli stessi del
|
|
||||||
repositorio su cui state lavorando, allora non dimenticatevi di caricare
|
|
||||||
l'etichetta firmata anche sui sorgenti pubblici.
|
|
||||||
|
|
||||||
Quando generate una richiesta di *pull*, usate l'etichetta firmata come
|
|
||||||
obiettivo. Un comando come il seguente farà il suo dovere::
|
|
||||||
|
|
||||||
git request-pull master git://my.public.tree/linux.git my-signed-tag
|
|
||||||
|
|
||||||
|
|
||||||
Riferimenti
|
Riferimenti
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue