È possibile cambiare il kernel in un sistema UNIX / Linux?


16

Volevo sapere se è possibile cambiare i kernel, ad esempio, sostituendo il kernel Linux di Fedora con quello di FreeBSD.

Ora, esisteva già Debian GNU / kFreeBSD . È possibile personalizzare una distro Linux per contenere un kernel BSD?


3
MacOSX è un kernel basato su BSD completamente conforme a POSIX. E a differenza di Linux, che afferma di non essere un sistema Unix, OSX È un sistema Unix (è certificato da The Open Group, proprietario del marchio Unix). Non è possibile eseguire app Linux su Mac e non è possibile eseguire app Mac su Linux anche se entrambi funzionano su CPU Intel (bene, tecnicamente AMD64)
slebetman

Risposte:


21

No, ogni kernel implementa le sue caratteristiche a modo suo. C'è una grande quantità di compatibilità POSIX ma una volta usciti da ciò gli eseguibili devono essere compilati con i meccanismi del kernel già in atto. Molti progetti contengono codice sorgente che viene compilato solo se dici esplicitamente che stai compilando per FreeBSD o Linux. Questo è essenzialmente ciò che è kFreeBSD. Gli strumenti supportano il kernel di FreeBSD ma devono essere compilati per questo.

Ad esempio, se provi ad usare epoll_createsu FreeBSD le cose non funzioneranno come previsto.

Ovviamente, puoi compilare in modo incrociato gli strumenti da un sistema BSD in stile LFS, ma probabilmente ci vorrà per sempre. Non è semplice come compilare un nuovo kernel.


1
Mi piacerebbe sentire la tua opinione sul kernel MOOL , esiste già un sistema operativo che lo adatta, BOSS Linux.
Sri Harsha Chilakapati,

Sarà interessante vedere cosa ne verrà fuori, ma non ho esaminato abbastanza per dire qualcosa di intelligente al riguardo.
Bratchley,

1
Quindi, come dici tu, se voglio creare un sistema BSD basato su userland GNU, devo ricompilare tutto il software GNU per il kernel BSD. Ho ragione?
Cambia il

1
Tutto ciò che utilizza gli ismi di Linux che sarebbe praticamente tutto. Potrebbe essere più facile iniziare con kFreeBSD e passare da lì.
Bratchley,

16

FreeBSD non usa un kernel Linux - come suggerisce il nome, usa un kernel BSD.

È possibile sostituire un kernel Linux con un kernel Linux diverso (uno creato dall'utente o uno estratto da una distribuzione). Tieni presente che i programmi di spazio utente nella tua distribuzione potrebbero dipendere da particolari funzioni del kernel da compilare e potrebbero non funzionare correttamente se le esegui su un kernel creato senza tali funzionalità. Ad esempio, una distribuzione basata su systemd richiederà i cgroup nel kernel.

Nell'esempio citato, sì, è possibile creare una distribuzione GNU per un kernel Linux o per un kernel BSD. In molti casi, ci sono differenze nel tempo di compilazione (ad esempio #ifdef) tra i programmi compilati per i due, anche se i kernel pubblicizzano lo stesso ABI. Come minimo, le librerie di basso livello come la libreria di runtime C devono adattarsi alle diverse ABI del kernel.


Potenzia per esempio la modifica della libreria C Runtime.
Joshua,

2

Il kernel è la parte indipendente e viene regolarmente sostituito durante gli aggiornamenti del sistema operativo. Alcuni driver proprietari (NVIDIA, ecc.) Hanno gli script di installazione che collegano il driver al sorgente del kernel, compilano quel kernel e sostituiscono il kernel corrente con esso. Quindi, se sviluppi la tua versione del kernel in grado di eseguire tutte le funzionalità richieste, non dovrebbe essere un grosso problema installarlo e lasciare in giro il resto del sistema operativo. Comunque molto spesso un tale "nuovo kernel" deriva dalla recente versione ufficiale.

Il kernel di Solaris è stato portato in qualche modo in questo modo, risultando in OpenSolaris con Gnome.

Tuttavia, mettere il kernel completamente diverso è uno sforzo significativo, poiché le interfacce devono essere collegate. Questo probabilmente richiederà molta programmazione in C e non riguarda solo lo script di compilazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.