|
|
|
|
Strumenti |
29-07-2005, 09:01 | #1 | ||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
"Instabilità" delle interfaccia del kernel e driver (closed source)
Questa discussione nasce come "costola" di questa, in cui si parla genericamente di driver closed source.
Riporto parte di messaggi scritti che riguardano questo thread. Quote:
Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
29-07-2005, 09:24 | #2 |
Senior Member
Iscritto dal: Jan 2004
Città: Gatteo
Messaggi: 2955
|
Mi iscrivo perchè mi interessa. Comunque ricordo che per un upgrde del kernel (il 2.6.7 mi pare) non è stato sufficente ricompilare l'interfaccia; i nuovi driver nvidia sono comunque usciti subito per ovviare al problema.
ps. riportato per dovere di cronaca .
__________________
And so at last the beast fell and the unbelievers rejoiced. But all was not lost, for from the ash rose a great bird. The bird gazed down upon the unbelievers and cast fire and thunder upon them. For the beast had been reborn with its strength renewed, and the followers of Mammon cowered in horror. |
29-07-2005, 09:40 | #3 |
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4740
|
discorso interessante, per me parente prossimo di quello sulla "stabilità binaria" delle interfacce di livello applicativo (che laddove manchi, renda difficoltoso distribuire SW compatibile all' indietro e in avanti con linux in quanto tale, nel senso di prescidente da versione del kernel e magari addirittura distribuzione)
per i driver (moduli), ho l' impressione che il punto sia ancora più critico, almeno per quel poco di idea che mi sono fatto vagando per osnews e le pagine che da esso vengono referenziate ... dalle FAQ di Atheos (poi forkato in Syllable): "In Linux un modulo è semplicemente una parte di kernel non ancora caricata, in atheos v'è una netta seprazione tra kernel e device driver": il che mi farebbe desumere che sotto atheos i driver verrebbero usati tramite chiamate a funzioni di libreria, mentre in linux i driver accederebbero effettivamente alle strutture dati interne al resto del codice del kernel a cui vengono connessi ora, ponendo il caso che le strutture dati o la loro semantica di gestione debbano venire alterate da una versione all' altra del kernel per qualsivoglia motivo (da tali modifiche dipende magari l' introducibilità o meno di una funzione potenzialmente utile - ad es la kernel preemption, che in effetti non deve essere stata indolore) in tal caso, per del codice appartenente al kernel, che su certi meccanismi e semantiche giocava, il compatibility break sarebbe praticamente logica conseguenza cioè, se non ho capito male io...
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate
Ultima modifica di jappilas : 29-07-2005 alle 09:52. |
29-07-2005, 10:01 | #4 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Ok prima o poi mi spiegerai tutta la tua famelica sete di sapere su come gira il mondo linux
Ti dirò come funzionano un paio di cose, poi concluderò con un esempio che dimostra che questo: Quote:
Cosa dà fastidio a un driver closed-source? Gli aspetti importanti sono 2: - dipendenza dai parametri di configurazione del kernel - variazione delle interfacce nel tempo Ci sarebbe anche la variazione ABI del gcc, ma ultimamente si sono dati una calmata (soprattutto per il codice c, ma stanno iniziando anche con il c++). 1) dipendenza dai parametri di configurazione del kernel Un kernel può essere ottimizzato per diversi compiti; questo non causa una variazione delle interfacce "livello codice", ma una variazione a livello compilato (una struttura può avere più o meno campi, una macro essere definita in modi diversi o diventare una funzione vera e propria, ecc.). Le distribuzioni forniscono normalmente due o più kernel precompilati con ottimizzazioni differenti, per venire incontro almeno ai casi più comuni. Un driver compilato per uno di questi kernel, fa boom se lo si utilizza in un altro (ci sono delle verifiche, normalmente abilitate, per far sì che il kernel rifiuti di caricare un modulo che è compilato con parametri differenti). Ti elenco i casi più importanti: - kernel smp/up Cambia il modo in cui sono definiti gli spinlock. Noop per un kernel up, qualcos'altro per un kernel smp. Oltre a variazioni di diversa natura. - preempt/no preempt Cambiano gli spinlock (anche nei kernel up), e qualche altra cosa. - stack 4k/8k Cambia la posizione delle informazioni sul task corrente, posto all'inizio dello stack. Inoltre, le funzioni che operano con lo stack 4k devono essere opportunamente "dietetiche". Il passaggio da 8k a 4k ha richiesto mesi di cleanup, e ancora ci sono corner case in cui è consigliabile 8k. Con lo stack a 4k gli irq handler hanno una propria pagina di stack, per mitigare l'effetto della riduzione di stack. Con lo stack a 8k, prendono "in prestito" lo stack kernel space del processo che hanno interrotto. - Tipo di processore per cui il kernel è ottimizzato Sceglie il set di istruzioni e il tuning di ottimizzazione per il compilatore. Fin qui non c'è problema, ma possono esserci altri effetti (in particolare nelle funzioni di copia da/a memoria). - Tipo di supporto della memoria: 1GB/4GB/64GB A complicare le cose, ci sono in giro patch che consentono la divisione dello spazio ring3 e del ring0 in due regioni 4GB/4GB distinte (la FC2 ho scoperto che usa questa divisione). Inoltre, alcuni utenti pazzoidi (io), a volte cambiano la normale divisione 3GB/1GB in qualcos'altro (nel mio caso, mi serviva 2.5GB/1.5GB). Le differenze si notano nelle funzioni inline di accesso ai dati dei programmi userspace, nella mappatura delle pagine highmem, nella gestione delle page table... - CONFIG_REGPARM Abilita il passaggio dei parametri alle funzioni per registri, invece che per stack. Incompatibilità totale. - Supporto hotplug Causa o meno lo scarto di intere sezioni di codice dal modulo, runtime. - Supporto per alcuni file system virtuali (devfs, sysfs...) Compila o rende noop inline certe funzioni. - Alcune opzioni di diagnostica interna (debug di spinlock/slab/kobject/allocator/file system... ) Varia la dimensione di alcune strutture e la definizione di alcune funzioni inline. E' di minore impatto, in quanto è di importanza prevalentemente per gli sviluppatori; gli utenti finali disabilitano normalmente queste funzionalità per avere un kernel più veloce. - Altre opzioni di minore importanza Il resto alla prossima puntata, ora devo lavorare un pò
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 Ultima modifica di ilsensine : 29-07-2005 alle 10:03. |
|
29-07-2005, 10:04 | #5 | |
Senior Member
Iscritto dal: Jan 2004
Città: Gatteo
Messaggi: 2955
|
Quote:
__________________
And so at last the beast fell and the unbelievers rejoiced. But all was not lost, for from the ash rose a great bird. The bird gazed down upon the unbelievers and cast fire and thunder upon them. For the beast had been reborn with its strength renewed, and the followers of Mammon cowered in horror. |
|
29-07-2005, 12:16 | #6 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
2) variazione delle interfacce nel tempo
Visto che del kernel sono disponibili tutti i sorgenti, ci sono minori vincoli nel mantenere rigide le interfacce quando si trovano soluzioni migliori. Ovviamente essendo un punto molto delicato, viene fatto solo quando effettivamente necessario/inevitabile, e con regole e modalità ben precise. Ovviamente le "interfacce" con i programmi userspace, le syscall, device node ecc., sono molto più rigide. Linus si vanta di poter usare ancora un programma compilato ai tempi del kernel 0.9x. La modifica delle interfacce interne non è una esclusiva di linux, è adottata anche dalla "concorrenza". In ogni nuova major release di windows il driver model può subire variazioni, fermo restando la compatibilità con i programmi utente (le applicazioni per windows 3.1 sostanzialmente girano ancora, mi risulta, e anche molte applicazioni per DOS). Semplicemente da noi capita più di frequente, cosa resa possibile dalla disponibilità dei sorgenti di tutte le parti del kernel. Al di là di cosa motivi un cambio di interfaccia, possono esserci diverse implicazioni nel codice dei driver: 1) Nessuna: se si è fortunati, le modifiche sono ben mascherate dal cambiamento di macro, funzioni inline o altro che, quando correttamente utilizzate, rendono trasparenti modifiche anche sostanziali. Diventa un pò come "compilare il kernel con una diversa configurazione". 2) Alcune: a volte è necessario cambiare la semantica di funzionamento di alcune funzioni, che può avere o meno influenza su altre parti di codice. Ad esempio, nei kernel 2.4 ad ogni dispositivo PCI rilevato dal sistema veniva automaticamente associato l'irq corrispondente già in fase di identificazione; durante la storia del 2.6, per vari motivi, l'assegnazione dell'irq è stata posticipata alla fase di attivazione del dispositivo. Questo vuol dire che se un driver richiedeva l'irq prima di attivare il dispositivo, non poteva più funzionare; tutti quelli che facevano l'opposto, non hanno notato differenze. E' stata comunque mantenuta la possibilità di selezionare il "vecchio funzionamento", per dar tempo a chi mantiene driver esterni o closed source di effettuare i necessari ritocchi. 3) Modifiche più invasive In alcuni casi i cambiamenti si hanno proprio nei prototipi delle funzioni, o nella sostituzione di funzioni con altre. Queste modifiche sono trattate con molta attenzione, e normalmente testate per lunghi periodi dentro un ramo parallelo (ad es. -mm). Nei casi più semplici è proprio il gruppo che modifica l'interfaccia che si occupa di intervenire nei punti dove è necessario; nei casi più complicati, il gruppo di ogni subsystem deve occuparsi di implementare le modifiche nel proprio ramo. Spesso vengono mantenute sia le interfacce vecchie che quelle nuove, marcando le vecchie come "deprecate" e documentando cosa occorre fare per utilizzare le nuove. Viene anche schedulato un periodo dopo il quale le vecchie interfacce verranno effettivamente rimosse, che può essere di molti mesi o un anno e più. Esempio: il povero devfs, reso obsoleto da tempo dal udev, non ci sarà più dal 2.6.13 in poi. 4) Modifiche strutturali Sono rare, normalmente viene mantenuta per compatibilità anche la vecchia struttura per un lungo periodo. Esempio: oss->alsa (gli oss, obsoleti da tempo, saranno comunque rimossi non prima di dicembre). Le strutture sostitutive vengono sviluppate e testate in rami paralleli, non di rado per tempi biblici (da quanti _anni_ sono disponibili i driver alsa? ) In alcune circostanze le modifche sono così profonde da non rendere possibile il mantenimento parallelo della vecchia struttura; in passato questo avveniva nel ciclo di vita dei kernel di sviluppo (2.x con x dispari); con il cambio del modello di sviluppo, potrebbe anche avvenire durante il ramo 2.6 (fermo restando il lungo test parallelo, e una adeguata e tempestiva documentazione di cosa cambierà e perché).
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
29-07-2005, 12:16 | #7 | ||
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Let's the flame begin
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
||
29-07-2005, 12:32 | #8 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
E' raro che nvidia debba metter mano al core closed source.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
01-08-2005, 11:01 | #9 | ||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
Linux ormai è diventato il mio strumento di lavoro, per cui se aumento il mio bagaglio di conoscenza in merito male non è... Quote:
Non è un "driver model" per Linux. Quote:
Quote:
nVidia coi suoi driver riesce davvero a risolvere TUTTI i problemi legati a queste diverse configurazioni del kernel? Se è così, penso la domanda che mi sono posto all'inizio del thread ha già una risposta. Sarebbe da vedere, comunque, a che prezzo nVidia riesce ad ottenere la compatibilità con qualunque kernel. Quote:
Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||||||
01-08-2005, 11:54 | #10 | |||||
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Quote:
Quote:
Hanno risolto gran parte dei loro problemi. Quote:
Spero che con il passaggio al gcc 4 non escano fuori nuovamente problemi. Nota che questa rogna è presente, e forse in misura maggiore per chi usa il c++, anche nei programmi userspace. Quote:
Quindi, se ti serve una interfaccia invariante a livello binario, l'unico modo per averla è creare una specie di wrapper. Ma non lo facciamo, né abbiamo alcuna intenzione di farlo
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 Ultima modifica di ilsensine : 01-08-2005 alle 11:57. |
|||||
02-08-2005, 08:59 | #11 | ||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
Quote:
Ottimo. Essendo un progetto open, chi vorrà sviluppare driver closed avrà molto del lavoro servito già su un piatto d'argento. Quote:
Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||||
02-08-2005, 10:39 | #12 | ||
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
ndiswrapper è nato per quei produttori che ignorano completamente l'esistenza di parecchi altri s/o a questo mondo. Il motivo per cui io stesso _detesto_ simili soluzioni, lo puoi trovare riassunto qui (dove puoi vedere come ndiswrapper sia tutto sommato "inutile"): http://www.figuiere.net/hub/blog/?20...ivers-for-wifi Oltre a essere "inutile", ndiswrapper è anche "dannoso": per molti chip wireless ci sono progetti liberi nativi, a volte basati su reverse engineering, che necessitano dei feedback e bug report di quanti più utenti possibile. Questi feedback sono _essenziali_ per lo sviluppo di driver liberi, e ho letto sviluppatori lamentarsi dell'esistenza stessa di ndiswrapper in quanto non stimolava l'adozione di un driver libero in via di sviluppo. Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
||
03-08-2005, 10:16 | #13 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Ma LOL!
Comunque quello dei driver e dei wripper mi sembra il classico problema del cane che si mangia la coda. Se non ci sono i wrapper ci si deve accontentare dei driver disponibili se e quando ci sono. Se ci sono i wrapper le case produttrici di periferiche tendono a non scrivere driver nativi. Non so cos'è meglio fra le due... E' un po' come WinE / Cedega e i giochi per Linux...
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
03-08-2005, 10:22 | #14 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Per curiosità, che ti "costringono" a fare con linux al lavoro?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
03-08-2005, 11:18 | #15 | |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
03-08-2005, 11:29 | #16 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Ooops, doppio post...
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
04-08-2005, 09:02 | #17 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
Non mi posso lamentare: ho sempre cose nuove su cui metter le mani e acquisire esperienza.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
04-08-2005, 09:03 | #18 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
04-08-2005, 13:42 | #19 | |
Bannato
Iscritto dal: Aug 2005
Città: Roma
Messaggi: 7
|
Quote:
A kazzaro! Ma parla come magni e tornatene da quer cesso di tu moglie! |
|
04-08-2005, 13:43 | #20 | |
Bannato
Iscritto dal: Aug 2005
Città: Roma
Messaggi: 7
|
Quote:
non sapevo che i kazzari avessero "una famelica sete" (bella frase no-sense) di sapere su certi argomenti. Piuttosto pensavo lo avessero per latre cose come la stupidità dove te regni incontrastato mi sa |
|
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:29.