Newsgroup: it.comp.os.linux.sys
Titolo: Qualche chiarimento tecnico su qualche aspetto del kernel

Mi interessava avere qualche conferma e qualche chiarimento riguardo al
kernel Linux:
1) Da quuanto ne so, in generale, a differenza di quanto avviene con
programmi e librerie, che possono tipicamente (a meno che usino
funzionalità specifiche non presenti in versioni precedenti) girare
indipendentemente dalla versione del kernel, un modulo del kernel, in
particolare un driver per supportare un certo hardware (ad esempio una
scheda video) deve essere compilato per una specifica versione (almeno
major version) del kernel, e questo rende un pelino meno agevole per le
terze parti preparare driver in versione binaria per Linux. Giusto?
2) Mi interesserebbe sapere a cosa è dovuto, tecnicamente, questo, e
se si sta pensando di modificare questa cosa, o altro.
3) Il kernel Linux è ompilabile da chiunque, grazie ai vari
programmini di configurazione che tutti conosciamo, etc. sarebbe
possibile in qualche modo, andare oltre questo comportamento, partendo
magari da questi programmini solo per selezionare la porzione di
sorgenti che effettivamente ci interessa, e determinare quali di questi
debbano essere linkati direttamente, e quali debbano generare moduli,
per poi eliminare tutto quello che non abbiamo scelto, e studiare
singolarmente i sorgenti, e compilare quanto ottenuto manualmente?
Spero di essere stato sufficientemente chiaro in questo punto... :-P
Grazie!

 Spero di essere stato sufficientemente chiaro in questo punto... :-P
No, sinceramente non ho capito molto :(
-- 
Francesco Romani -- Ikitt 
'In fact, users don't read /anything/'                       -- Joel Spolsky
void *a, *b; a != b;   -- violates patent #437822  [
http://snipurl.com/ar6e
]

 e compilare quanto ottenuto manualmente?
Certo, ma a che pro ?

 se si sta pensando di modificare questa cosa, o altro.
Ciao Marco (sei il Marco Iannacone che conosco?)
Comunque i motivi tecnici sono tanti, un esempio:
----------- Kernel -----------
struct bidet
{
        struct list_node node;
        int acqua_fredda;
        int scarico;
};
void registra_bidet(struct bidet *bidet)
{
        list_add(&bidets, &bidet->node);
}
----------- Modulo esterno -----
#include <linux/bidet.h>
int init_module()
{
        struct bidet bidet = {
                .acqua_fredda = 123,
                .scarico = -1,
        };
        registra_bidet(&bidet);
}
---------------------------------
Ora, gli sviluppatori del kernel decidono di aggiungere un campo acqua_calda
prima di acqua_fredda. Tu cerchi di inserire il modulo compilato per il
kernel vecchio nel kernel nuovo, succede che alla posizione di acqua_calda
ci trova il valore di acqua_fredda, la struttura non ha la dimensione che
dovrebbe e così via... un pastrocchio.
Se invece ricompili il modulo, va tutto bene perché la sintassi GCC per
inizializzare i campi (.scarico = -1) non ti obbliga neanche a modificare
il sorgente.
Altri motivi sono:
- Molte funzioni sono compilate inline, se cambiano nel kernel devi
ricompilare il modulo, altrimenti rimangono dentro le versioni vecchie.
- Altre funzionalità vengono compilate o meno in base al tipo di kernel
(smp/up, preemptable/non preemptable), vedi spinlock & co.
Ciao,
-- 
Daniele Orlandi

 Spero di essere stato sufficientemente chiaro in questo punto... :-P
No, su questo punto sei decisamente criptico.
Comunque saprai già che puoi compilare dei driver nel kernel e come
modulo. Dovresti fare uno script per togliere ciò che non è in .config,
ma credo che nessuno oltre a te su questo pianeta abbia bisogno di farlo,
perciò dovrai farlo da solo.
ciao
gl :)

No, sinceramente non ho capito molto :(
Mi interessava la possibilità (più che altro mi interessa
potenzialmente, non è che abbia qualcosa di specifico in mente...) di
selezionare ad esempio alcune "features" da avere integrate nel kernel,
più altre da avere comee moduli, e poi fare qualche operazione più o
meno automatica per rimuovere tutti i sorgenti che non andranno a far
parte della compilazione, rimanendo con i soli effettivamente
"selezionati", potendo eventualmente anche poi compilare "a mano".

Studiare più agevoltemente solo determinate parti del kernel, poter
fare modifiche/aggiunte solo a determinate parti del kernel, potendo
poi compilare il tutto, o anche... ottenere un kernel partendo dal
kernel Linux. Insomma... un fork...

il sorgente.
Ecco, stavo giusto per chiederti cosa fosse quella forma per
inizializzare i campi della struct, ma da questo ho capito che è una
feature fuori dallo standard ISO, e specifica
di GCC. Il kernel Linux quindi continua ad appoggiarsi a features
specifiche di GCC per molte cose, vero?
Comunque, grazie mille per la spiegazione! :-)

perciò dovrai farlo da solo.
Spero di essermi poi spiegato un po' meglio più sopra.
sostanzialmente comunque le motivazioni per cui mi era venute in mente
una eventuale possibilità erano quelle che ho indicato poco fa in una
risposta più sopra, nello stesso thread.

 Insomma... un fork...
Beh, tanti auguri. ;-)
-- 
Chaos A.D.		|	Raging crowd
Tanks on the streets	|	Burning cars
Confronting police	|	Bloodshed starts
Bleeding the Plebs	|	Who'll be alive?

 sopra, nello stesso thread.
fare un fork di linux è uno sforzo inutile.
non raggiungerai mai un numero di sviluppatori pari a quello del kernel
linux, pertanto il progetto si baserà sul tuo sforzo e quello di pochi
altri.
il kernel Linux è open source, ma questo non toglie che gli autori
detengono i propri diritti sul codice. dovresti farne un kernel Open
Source GPL derivato che non avrebbe nessun particolare vantaggio...
mah! certo che di sforzi inutili se ne vedono tanti.
ti faccio presente GONOME che è stato un fork di GNOME.
siccome a un tizio non gli andava bene come venivano messi i componenti su
Gnome (o giù di lì), un paio di anni fa ha fatto un fork di Gnome 2.0.
Oggi su internet non si trova quasi più nulla dei suoi immani sforzi di
modificare gnome.
risparmia il tuo tempo per qualcosa di utile, se ne hai la capacità,
lavorare e migliorare il kernel linux è sicuramente più utile per tutti.
ciao
gl :)

Non ho mica detto che ho intenzione di farlo. Ma... sono un tipo
curioso... ;-)

altri.
Al di la del fatto che questa affermazione potrebbe essere opinabile
(ma per carità, non voglio assulutamente generare un flame, non mi
interessa proprio la cosa... :-P), non ho mai detto che IO ho
intenzione di farlo.
Chiedevo solo, per curiosità.
Mi interessa sapere come funzionano le cose, cosa ci si può fare o
meno, ma questo non significa che poi abbia voglia davvero di farlo.
E comunque, la tua risposta presupponeva che uno voglia prendere il
kernel Linux e creare un "nuovo" kernel Linux a partire dal precedente,
mentre qualcuno potrebbe voler creare un nuovo sistema operativo, ma
senza scrivere magari da zero un kernel, ma prenddendo porzioni più o
meno grandi da qualche kernel già presente.
Uno dei motivi alla base della GPL è proprio questo. Chiaro che poi il
kernel derivato deve essere rilasciato a tutti sotto GPL. Che c'è di
male?
Qualcuno potrebbe voler creare un kernel usando parti di codice preso
dal kernel di Linux o da u altro kernel, o modificare un certo kernel
cambiando cerrte parti con codice nuovo, etc...
A qualcuno potrebbe piacere Linux (parlo del kernel) per molte cose ma
molto meno per altre. Il mondo è bello perché è vario, no?
E comunque, tornando alla questione iniziale, a costo di sembrare
antipatico, ma se io faccio una domanda più o meno precisa in un NG
gradirei una risposta a QUELLA domanda (che può benissimo non
arrivare, chiaramente). E' fastidioso invece il "processo alle
intenzioni"... o no? ;-)
Comunque, grazie ancora a tutti per le risposte! :-)
PS. Di quel progetto fork di GNOME non sapevo nulla. Credo sia una
bella dimostrazione di quello che intendevi...! ;-)

 "selezionati", potendo eventualmente anche poi compilare "a mano".
Uhm, no, non conosco tool del genere.


 bella dimostrazione di quello che intendevi...! ;-)
ecco, quel tizio (lui solo, per fortuna) ha sprecato il suo tempo libero
di due anni di vita... fai pure se vuoi, vedo che già di tempo ne vuoi
sprecare, ma non riuscirai a farmi fare altrettanto con te, oltre questo
messaggio!
ciao
gl :)

Aspetta, aspetta, proprio non ci siamo. Non mi hai capito per niente mi
sa, quindi controbbato solo all'ultimo punto: mi interessa solo
conoscere quello che ho chiesto, semplicemente... per cultura
personale.
NON HO ALCUNA INTENZIONE di creare un kernel o un sistema operativo a
partire da Linux o qualunque altro kernel o OS!
Chiaro? ;-)
Che poi non sia troppo daccordo, a livello generale, su quanto sembri
voler affermare, e cioè che non ha senso mettersi a lavorare ad un
nuovo progetto, partendo magari da uno o più progetti esistenti, e che
invece è meglio aiutare a migliorare quello che già esiste (se così
fosse, non si sarebbero avute un sacco di innovazioni, e d'altra
parte... gran parte di quello che si crea non nasce "from scratch",
questo è anche alla base della GPL; e non è che perché esiste Linux
allora non ha senso lavorare a nuovi sistemi operativi) è un'altra
storia (ed è una cosa che sta viene fuori ora come risposta al tuo
post; non c'era nulla del genere nella mia innocente domanda iniziale,
puramente "didattica" e non interessata).
Questa tendenza a prendere tutto troppo seriamente o peggio
trasfigurare quello che si dice in un NG o un forum, per poi magari
generare flames assolutamente inutili, non costruttivi, proprio non mi
va giù...
Se poi si va oltre e si da per scontato che una persona volesse dire o
alludere a ciò a cui invece non pensava, e si insiste su quello, è
proprio il massimo.
E' chiaro che puoi rispondere a quello che vuoi, però se vuoi vedere
quello che non c'era nella mia domanda, e poi insisti su ciò,
trascurando la vera domanda, anche dopo che ti ho fatto notare la cosa,
puoi capire che un minimo non mi vada a genio, ...no? ;-)
Sono daccordo che la discussione attuale, dove, se ci pensi... TU l'hai
portata (ma che a me non interessa), sarebbe magari più adatta al NG
sui dibattiti, ma se leggi il mio messaggio originale, per bene, vedrai
che era adatta a questo NG, perché non c'entrava con i dibattiti. NON
vi si esprimevano opinioni di alcun tipo. Chiedevo solo informazioni su
aspetti di Linux che non conoscevo bene. Tutto qui, senza esprimere
pareri.
Una risposta perfetta alla mia domanda (lo ripeto, era solo una
domanda, senza chissà quali opinioni o allusioni che puoi averci visto
tu) ad esempio era quella di Daniele Orlandi, che spiegava, con esempi
tecnici, perché i moduli sono legati in generale ad una particolare
versione del kernel, limitandosi (giustamente) a spiegare la cosa,
invece di vedere nella mia domanda una critica a Linux, o la volontà
di cambiare le cose, o altro. Volevo solo capire, tutto qui.
Spero questa volta sia più chiaro.

 specifiche di GCC per molte cose, vero?
Sì, ma IMHO sono spesso molto opportune/indispensabili.
Questa non è tra le indispensabili... ma l'inizializzazione basata
sull'ordine è prona a introdurre bachi subdolissimi.
Ciao,
-- 
Daniele Orlandi