Lines Matching +full:non +full:- +full:l
1 .. include:: ../disclaimer-ita.rst
4 :ref:`Documentation/kernel-hacking/hacking.rst <kernel_hacking_hack>`
6 :Original: :ref:`Documentation/kernel-hacking/hacking.rst <kernel_hacking_hack>`
12 L'inaffidabile guida all'hacking del kernel Linux
27 Prima di leggere questa guida, sappiate che non ho mai voluto scriverla,
29 qualcosa di simile, e quindi questa era l'unica via. Spero che possa
38 - non associata ad alcun processo, servendo un'interruzione hardware;
40 - non associata ad alcun processo, servendo un softirq o tasklet;
42 - in esecuzione nello spazio kernel, associata ad un processo
45 - in esecuzione di un processo nello spazio utente;
48 l'un l'altro, ma a parte questo esiste una gerarchia rigida: ognuno di questi
58 ---------------
63 vostro processo. Potete sospendere l'esecuzione chiamando :c:func:`schedule()`.
81 ---------------------------------
86 garantisce che questi gestori non vengano mai interrotti: se una stessa
91 programmare una 'interruzione software' per l'esecuzione e quindi terminare.
102 ---------------------------------------------------
111 cosiddetti 'bottom half' (BH), i quali non traevano alcun vantaggio da questi
112 sistemi. Non appena abbandonammo i computer raffazzonati con fiammiferi e
122 processore, spesso diventa estenuante l'averci a che fare. Per questa ragione,
131 Il nome 'tasklet' è ingannevole: non hanno niente a che fare
148 non possa essere fatto nello spazio utente?
151 Il contesto della FPU non è salvato; anche se siete in contesto utente
152 lo stato dell'FPU probabilmente non corrisponde a quello del processo
156 cattiva idea; usate l'aritmetica a virgola fissa.
160 maggior parte delle architetture a 32-bit; è di 14K per la maggior
161 parte di quelle a 64-bit; e spesso è condiviso con le interruzioni,
162 per cui non si può usare.
167 Quindi mantenetelo tale. Il vostro codice dovrebbe essere a 64-bit ed
174 ioctl: non scrivere nuove chiamate di sistema
184 Primo, nella maggior parte dei casi non volete creare nuove chiamate di
186 Create un dispositivo a caratteri ed implementate l'appropriata chiamata ioctl.
187 Questo meccanismo è molto più flessibile delle chiamate di sistema: esso non
193 considerate l'implementazione di un'interfaccia :c:func:`sysfs()`.
197 ``include/uapi/asm-generic/errno-base.h``,
198 ``include/uapi/asm-generic/errno.h`` e ``include/linux/errno.h``), altrimenti
203 di sistema con l'errore ``-ERESTARTSYS``. La chiamata di sistema ritornerà
205 di sistema riprenderà (a meno che l'utente non l'abbia disabilitata). Quindi,
206 dovreste essere pronti per continuare l'esecuzione, per esempio nel mezzo
212 return -ERESTARTSYS;
217 un sistema multi-processo senza diritto di prelazione).
223 UNIX è "fornite meccanismi e non politiche"
228 Non è permesso invocare una procedura che potrebbe dormire, fanno eccezione
231 - Siete in un contesto utente.
233 - Non trattenete alcun spinlock.
235 - Avete abilitato le interruzioni (in realtà, Andy Kleen dice che
236 lo schedulatore le abiliterà per voi, ma probabilmente questo non è quello
240 le più comuni sono quelle per l'accesso allo spazio utente (\*_user) e
241 quelle per l'allocazione della memoria senza l'opzione ``GFP_ATOMIC``
243 Dovreste sempre compilare il kernel con l'opzione ``CONFIG_DEBUG_ATOMIC_SLEEP``
253 ------------------
275 :c:func:`printk()` utilizza un buffer interno di 1K e non s'accorge di
286 sopra alla funzione printf: "Printf non dovrebbe essere usata per il
290 ---------------------------------------------------------------------------------------------------
298 Un puntatore nello spazio utente non dovrebbe mai essere dereferenziato: i dati
300 ``-EFAULT`` oppure 0.
311 dopo anno. --RR]
313 Le funzioni potrebbero dormire implicitamente. Queste non dovrebbero mai essere
314 invocate fuori dal contesto utente (non ha senso), con le interruzioni
318 -------------------------------------
330 Potrebbe dormire per librarare della memoria. L'opzione fornisce il modo
335 Non dorme. Meno affidabile di ``GFP_KERNEL``, ma può essere usata in un
341 inferiore ai 16MB. Se non sapete cos'è allora non vi serve.
347 Dovreste correggerlo. Sbrigatevi, non cincischiate.
350 considerate l'uso di :c:func:`__get_free_pages()` (``include/linux/gfp.h``).
351 Accetta un argomento che definisce l'ordine (0 per per la dimensione di una
357 dello spazio kernel. Questo è un blocco di memoria fisica non contiguo, ma
358 la MMU vi darà l'impressione che lo sia (quindi, sarà contiguo solo dal punto
359 di vista dei processori, non dal punto di vista dei driver dei dispositivi
362 memoria fisica contigua, avete un problema: Linux non ha un buon supporto per
364 rende l'operazione difficile. Il modo migliore per allocare un simile blocco
369 l'uso di una cache slab disponibile in ``include/linux/slab.h``.
372 -------------------
380 Nel contesto d'interruzione in suo valore **non è NULL**.
383 -------------------------------------
388 per brevi pause. Non usate grandi valori perché rischiate d'avere un
389 overflow - in questo contesto la funzione :c:func:`mdelay()` è utile,
393 -----------------------------------------------------------------------------------------------
405 ad un tipo, e ritorna il valore convertito. L'altra variante per
406 la famiglia di conversioni "in-situ", come :c:func:`cpu_to_be32s()`,
410 --------------------------------------------------------
423 --------------------------------------------------------
432 Lo scopo è di prevenire l'esecuzione di softirq e tasklet sul processore
436 ----------------------------
440 :c:func:`get_cpu()` nega il diritto di prelazione (quindi non potete essere
442 del processore attuale, fra 0 e ``NR_CPUS``. Da notare che non è detto
446 Se sapete che non dovete essere interrotti da altri processi (per esempio,
452 ------------------------------------
456 Dopo l'avvio, il kernel libera una sezione speciale; le funzioni marcate
459 questa memoria dopo l'inizializzazione. ``__exit`` viene utilizzato per
461 la detta funzione verrà eliminata quando il file che la contiene non è
462 compilato come modulo. Guardate l'header file per informazioni. Da notare che
463 non ha senso avere una funzione marcata come ``__init`` e al tempo stesso
465 :c:func:`EXPORT_SYMBOL_GPL()` - non funzionerà.
469 ----------------------------------------------
474 caricabili dinamicamente). L'utilizzo delle macro :c:func:`module_init()`
476 sia come modulo, sia come parte del kernel, senza l'ausilio di #ifdef.
480 tale), o in fase di avvio : se il file non è stato compilato come modulo la
483 chiamata durante l'avvio.
486 fallimento del caricamento (sfortunatamente, questo non ha effetto se il
492 -----------------------
500 zero. Questa funzione può anche dormire, ma non può fallire: tutto dev'essere
503 Da notare che questa macro è opzionale: se non presente, il modulo non sarà
504 removibile (a meno che non usiate 'rmmod -f' ).
508 -------------------------------------------------
513 rimozione (in aggiunta, un modulo non può essere rimosso se un altro modulo
517 non fosse presente. Altrimenti, potete accedere al modulo in sicurezza, e
539 -------------
546 -----------
553 espressione è vera, altrimenti ``-ERESTARTSYS`` se è stato ricevuto un segnale.
557 -------------------------------
561 ``TASK_EXCLUSIVE``, in questo caso i rimanenti non verranno svegliati.
580 e quindi non dovrebbero essere usate a sproposito.
595 big-endian quindi è meglio evitarlo.
601 a meno che un simbolo non venga dichiarato con visibilita limitata ad un
608 -------------------------
616 -----------------------------
624 funzione esportata è considerata interna, e non una vera e propria interfaccia.
630 ----------------------------
636 Documentation/translations/it_IT/core-api/symbol-namespaces.rst.
639 --------------------------------
645 Documentation/translations/it_IT/core-api/symbol-namespaces.rst.
651 ------------------------------------------------------
654 le liste concatenate, ma questa è stata la vincente. Se non avete particolari
660 ---------------------------------
664 (eg. ``-EFAULT``) nei casi fallimentari. Questo potrebbe essere controintuitivo
673 -----------------------
676 delle strutture nei kernel in sviluppo; questo non è solo per tenere
678 non può più essere chiamata con le funzioni attive, o fa controlli aggiuntivi,
679 o non fa più controlli che venivano fatti in precedenza). Solitamente a questo
685 ------------------------------------------
687 Il metodo preferito per l'inizializzazione delle strutture è quello
702 --------------
705 che alcune delle più complesse non sono ben supportate, per via dello scarso
707 leggete la sezione "C Extensions" nella pagina info di GCC - Sì, davvero
711 - Funzioni inline
713 - Istruzioni in espressioni (ie. il costrutto ({ and }) ).
715 - Dichiarate attributi di una funzione / variabile / tipo
718 - typeof
720 - Array con lunghezza zero
722 - Macro varargs
724 - Aritmentica sui puntatori void
726 - Inizializzatori non costanti
728 - Istruzioni assembler (non al di fuori di 'arch/' e 'include/asm/')
730 - Nomi delle funzioni come stringhe (__func__).
732 - __builtin_constant_p()
735 da gcc è orribile ed anche peggio: le divisioni e le moltiplicazioni non
737 di GCC non sono incluse nell'ambiente del kernel.
740 ---
743 il kernel non fornisce il necessario ambiente di runtime e gli header file
744 non sono stati verificati. Rimane comunque possibile, ma non consigliato.
748 -----
750 Viene generalmente considerato più pulito l'uso delle macro negli header file
752 l'istruzione di pre-processore \`#if' all'interno del codice sorgente.
757 Al fine d'avere le vostre cose in ordine per l'inclusione ufficiale, o
760 - Trovare chi è responsabile del codice che state modificando. Guardare in cima
771 - Solitamente vorrete un'opzione di configurazione per la vostra modifica
774 nel file ``Documentation/kbuild/kconfig-language.rst``.
777 utenti esperti sia agli utente che non sanno nulla del vostro lavoro.
780 dite N) (oppure, occasionalmente, \`Y'); questo è per le persone che non
783 - Modificate il file ``Makefile``: le variabili CONFIG sono esportate qui,
785 "obj-$(CONFIG_xxx) += xxx.o". La sintassi è documentata nel file
788 - Aggiungete voi stessi in ``CREDITS`` se credete di aver fatto qualcosa di
795 - Infine, non dimenticatevi di leggere
796 ``Documentation/process/submitting-patches.rst``.
818 * This should be a per-architecture thing, to allow different
823 #define IS_ERR(ptr) ((unsigned long)(ptr) > (unsigned long)(-1000))
837 * At least we *know* we can't spell, and use a spell-checker.
846 /* Tested on SS-5, SS-10. Probably someone at Sun applied a spell-checker. */
864 le correzioni dei miei errori, l'aggiunta di contenuti, eccetera.
865 Philipp Rumpf per l'ortografia e per aver reso più chiaro il testo, e