Perché ho bisogno di ricompilare il modulo kernel vmware dopo un aggiornamento del kernel linux?

StackOverflow https://stackoverflow.com/questions/827862

Domanda

Dopo un aggiornamento del kernel di Linux, il mio server VMWare non può avviarsi fino a quando non utilizzo vmware-config.pl per eseguire un lavoro di riconfigurazione (incluso compilare alcuni moduli del kernel).

Se aggiorno il mio host Windows VMWare con l'ultimo Service Pack di Windows, di solito non devo fare nulla per eseguire VMWare.

Perché VMWare funziona in modo diverso tra Linux e Windows? Questa azione di ricompilazione comporta vantaggi sulla piattaforma Linux su Windows?

È stato utile?

Soluzione

Leggi L'interfaccia del driver del kernel Linux .

  

Questo è stato scritto per cercare di spiegare perché Linux non ha un'interfaccia del kernel binaria, né ha un'interfaccia del kernel stabile. Si prega di rendersi conto che questo articolo descrive le interfacce _in kernel_, non le interfacce kernel to userspace. L'interfaccia del kernel allo spazio utente è quella utilizzata dai programmi applicativi, l'interfaccia syscall. Quell'interfaccia è _molto stabile nel tempo e non si romperà. Ho vecchi programmi che sono stati creati su un kernel precedente alla 0.9 che funziona ancora bene sull'ultima versione del kernel 2.6. Questa interfaccia è quella su cui gli utenti e i programmatori delle applicazioni possono contare sulla stabilità.

Riflette la vista di gran parte degli sviluppatori del kernel Linux: la libertà di modificare i dettagli e le API di implementazione nel kernel in qualsiasi momento consente loro di svilupparsi molto più rapidamente e meglio.

Senza la promessa di mantenere identiche le interfacce in-kernel da una release all'altra, non c'è modo per un modulo di kernel binario come quello di VMWare di funzionare in modo affidabile su più kernel.

Ad esempio, se alcune strutture cambiano in una nuova versione del kernel (per prestazioni migliori o più funzionalità o qualunque altra ragione), un modulo binario VMWare può causare danni catastrofici usando il vecchio layout della struttura. Compilare nuovamente il modulo dal sorgente catturerà il nuovo layout della struttura e quindi avrà una migliore possibilità di funzionare - anche se non ancora al 100%, nel caso in cui i campi siano stati rimossi o rinominati o assegnati a scopi diversi.

Se una funzione cambia il suo elenco di argomenti, o viene rinominata o altrimenti resa non più disponibile, non funzionerà nemmeno la ricompilazione dallo stesso codice sorgente. Il modulo dovrà adattarsi al nuovo kernel. Dal momento che tutti (dovrebbero) avere la fonte e (possono trovare qualcuno che) è in grado di modificarlo per adattarlo. " Push lavoro ai nodi finali " è un'idea comune sia in rete che in software libero: poiché le risorse [ai margini] / [degli sviluppatori fuori dal kernel Linux] sono più grandi delle risorse limitate [della struttura portante] / [degli sviluppatori Linux], il commercio -off per fare in modo che il primo faccia più lavoro è accettato.

D'altra parte, Microsoft ha deciso che devono preservare il più possibile la compatibilità dei driver binari: non hanno scelta, poiché stanno giocando in un mondo proprietario. In un certo senso, questo rende molto più facile per gli sviluppatori esterni che non devono più affrontare un obiettivo mobile e per gli utenti finali che non devono mai cambiare nulla. Il rovescio della medaglia, questo costringe Microsoft a mantenere la retrocompatibilità, che è (nella migliore delle ipotesi) dispendiosa in termini di tempo per gli sviluppatori di Microsoft e (nella peggiore delle ipotesi) è inefficiente, causa bug e impedisce progressi in avanti.

Altri suggerimenti

Linux non ha un ABI del kernel stabile: cose come il layout interno delle strutture dati, ecc. cambia da versione a versione. VMWare deve essere ricostruito per usare l'ABI nel nuovo kernel.

D'altra parte, Windows ha un ABI del kernel molto stabile che non cambia da service pack a service pack.

Per aggiungere alla risposta di bdonlan, la compatibilità ABI è un miscuglio. Da un lato, consente di distribuire moduli e driver binari che funzioneranno con le versioni più recenti del kernel. D'altra parte, obbliga i programmatori del kernel ad aggiungere molto codice colla per mantenere la retrocompatibilità. Poiché Linux è open-source e poiché gli sviluppatori del kernel anche se sono persino autorizzati , il la capacità di distribuire moduli binari non è considerata così importante. Sul lato positivo, gli sviluppatori del kernel Linux non devono preoccuparsi della compatibilità ABI quando si modificano le strutture dati per migliorare il kernel. A lungo termine, ciò si traduce in un codice del kernel più pulito.

È una conseguenza dello sviluppo di Linux e Windows in diversi ambienti e aspettative culturali: http: // www.joelonsoftware.com/articles/Biculturalism.html . In breve: Windows è progettato per essere adatto agli utenti, mentre Linux si evolve per essere adatto agli sviluppatori open source.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top