Utente:Clamiax/BlogEntry: 2009 July 28 11:01:13 CEST

Da Wiki di NetBSD Italia.

(Differenze fra le revisioni)
(Creata pagina con '== Guardare i commit e' istruttivo == Proprio cosi'. Sono stato illuminato grazie a due banali commit effettuati su ''NetBSD Changes''. In genere utilizzo i commit piu' impor…')
m (Guardare i commit e' istruttivo)
Riga 16: Riga 16:
Innanzi tutto appare chiaro che se bisogna caricare un
Innanzi tutto appare chiaro che se bisogna caricare un
supporto dalla radice del kernel (la cosiddetta ''root'') basta includere una chiamata a config_rootfound()
supporto dalla radice del kernel (la cosiddetta ''root'') basta includere una chiamata a config_rootfound()
-
direttamente in {{cvsweb|src/sys/kern/init_main.c}}, possibilmente all'interno di un #ifdef NOMESUPPORTO,
+
direttamente in {{cvsweb|src/sys/kern/init_main.c}}, possibilmente all'interno di un ''#ifdef NOMESUPPORTO'',
come nel seguente codice (rimosso nel commit #1.396), facendo in modo che il kernel carichi tale supporto
come nel seguente codice (rimosso nel commit #1.396), facendo in modo che il kernel carichi tale supporto
integrato come se fosse uno pseudo-device (non disattivabile dal file di configurazione del kernel in fase
integrato come se fosse uno pseudo-device (non disattivabile dal file di configurazione del kernel in fase

Versione delle 09:39, 28 lug 2009

Guardare i commit e' istruttivo

Proprio cosi'. Sono stato illuminato grazie a due banali commit effettuati su NetBSD Changes. In genere utilizzo i commit piu' importanti per allestire delle notizie tecniche sul wiki (vedi in basso). In effetti, anche solo questo e' sufficiente per incrementare lievemente le mie competenze relative ai sorgenti del sistema, a come vengono gestiti e quali file toccare in alcune occasioni; di certo non tutte visto che i campi applicativi e le possibili modifiche sono pressoche' infinite. Tuttavia, piu' passa il tempo e piu' ci si fa' un'idea piu' o meno chiara della situazione all'interno di src. Tra l'altro, quando ci sono piu' commit relativi alla stessa modifica, ci si rende chiaramente conto di cosa bisogna toccare quando si mettono le mani a quella categoria di sorgenti ed eventualmente come funziona quel supporto specifico. Mi piace definire questo sistema come kernel watching learning (KWL).

Oggi ad esempio, motivo che mi ha spinto a bloggare, ho appreso due concetti banali se vogliamo, ma comunque indispensabili in alcuni casi.

Innanzi tutto appare chiaro che se bisogna caricare un supporto dalla radice del kernel (la cosiddetta root) basta includere una chiamata a config_rootfound() direttamente in src/sys/kern/init_main.c, possibilmente all'interno di un #ifdef NOMESUPPORTO, come nel seguente codice (rimosso nel commit #1.396), facendo in modo che il kernel carichi tale supporto integrato come se fosse uno pseudo-device (non disattivabile dal file di configurazione del kernel in fase di compilazione). Inoltre, sembra conseguenziale il fatto che ogni chiamata a config_rootfound() puo' essere rimpiazzata da uno pseudo-device, allegerendo cosi' la radice del kernel; probabilmente e' per questo che dopo il commit #1.396, non c'e' piu' alcuna chiamata a tale funzione in init_main.c.

Un altro dato meno importante ma altrettanto utile e' relativo al commit #1.317) che mostra chiaramente come aggiungere un nuovo supporto PCI al kernel:

# Marvell Serial-ATA Host Controller
attach  mvsata at pci with mvsata_pci
file    dev/pci/mvsata_pci.c            mvsata_pci

Naturalmente il file mvsata_pci.c dev'essere presente altrimenti non solo non avrebbe senso il commit ma ci sarebbe anche un errore in fase di compilazione a causa del file mancante. Qualora si decidesse di includere un nuovo supporto ata(4), bastera' includere il file sorgente con un nome rilevante nella directory dev/ata/ ed aggiungere (almeno) le direttive attach e file all'interno del file dev/ata/files.ata. La logica vale per qualsiasi altro tipo di supporto. Grandioso! Chi avrebbe mai pensato che un kernel, per quanto complesso, avesse delle caratteristiche cosi' semplici? Ovviamente questo non basta ad essere kernel hackers ma avere una buona infarinatura, una visione generale, puo' semplificare la vita nella risoluzione dei problemi e magari, un giorno, nella scrittura del nostro primo supporto per il kernel.

Happy commit! :-)

Notizie tecniche

Commit relativi

Strumenti personali