Czy można zmienić jądro w systemie UNIX / Linux?

16

Chciałem wiedzieć, czy można zmienić jądra, na przykład zastępując jądro Linuksa Fedory na jądro FreeBSD.

Teraz istniał już Debian GNU / kFreeBSD . Czy mogę dostosować dystrybucję Linuksa tak, aby zawierała jądro BSD?

Przełącznik
źródło
3
MacOSX to w pełni zgodne z POSIX jądro oparte na BSD. W przeciwieństwie do Linuksa, który twierdzi, że nie jest systemem uniksowym, OSX jest systemem uniksowym (jest certyfikowany przez The Open Group, która jest właścicielem znaku towarowego Unix). Nie możesz uruchamiać aplikacji Linux na Macu i nie możesz uruchamiać aplikacji Mac na Linuxie, nawet jeśli oba działają na procesorach Intel (no cóż, technicznie AMD64)
slebetman

Odpowiedzi:

21

Nie, każde jądro implementuje własne funkcje na swój własny sposób. Istnieje duża kompatybilność z POSIX, ale kiedy z tego wyjdziesz, pliki wykonywalne muszą zostać skompilowane z już istniejącymi mechanizmami jądra. Wiele projektów zawiera kod źródłowy, który jest kompilowany tylko wtedy, gdy wyraźnie powiesz, że kompilujesz dla FreeBSD lub Linux. Zasadniczo to jest kFreeBSD. Narzędzia obsługują jądro FreeBSD, ale należy je skompilować.

Na przykład, jeśli spróbujesz użyć epoll_createna FreeBSD, rzeczy nie będą działać zgodnie z oczekiwaniami.

Oczywiście możesz krzyżowo skompilować narzędzia z systemu BSD w stylu LFS, ale prawdopodobnie zajmie to wieczność. Nie tak proste jak skompilowanie nowego jądra.

Bratchley
źródło
1
Chciałbym usłyszeć twój pogląd na jądro MOOL , istnieje już system operacyjny, który go dostosowuje, Linux Linux.
Sri Harsha Chilakapati,
Ciekawie będzie zobaczyć, co z tego wyniknie, ale nie przyjrzałem się temu wystarczająco, aby powiedzieć o tym coś inteligentnego.
Bratchley,
1
Więc, co mówisz, jeśli chcę stworzyć system BSD oparty na przestrzeni użytkownika GNU, muszę ponownie skompilować całe oprogramowanie GNU dla jądra BSD. Mam rację?
Przełącz
1
Wszystko, co korzysta z systemu Linux, co byłoby prawie wszystkim. Może być łatwiej zacząć od kFreeBSD i przejść od tego momentu.
Bratchley,
16

FreeBSD nie używa jądra Linux - jak sama nazwa wskazuje, używa jądra BSD.

Możliwe jest zastąpienie jądra Linuksa innym jądrem Linuksa (zbudowanym samodzielnie lub wyodrębnionym z dystrybucji). Pamiętaj, że programy przestrzeni użytkownika w twojej dystrybucji mogą zależeć od konkretnych funkcji jądra, które mają zostać skompilowane, i mogą nie działać poprawnie, jeśli uruchomisz je na jądrze zbudowanym bez tych funkcji. Na przykład dystrybucja systemowa będzie wymagała cgroups w jądrze.

Dla wspomnianego przykładu tak można zbudować dystrybucję GNU dla jądra Linux lub jądra BSD. W wielu przypadkach istnieją różnice w czasie kompilacji (np. #ifdef) Między programami skompilowanymi dla tych dwóch, nawet jeśli jądra reklamują ten sam ABI. Biblioteki niskiego poziomu, takie jak C Runtime Library, muszą co najmniej uwzględniać różne ABI jądra.

Toby Speight
źródło
Przyspieszenie wspomnienia o zmianie biblioteki wykonawczej C.
Joshua,
2

Jądro jest niezależną częścią i jest rutynowo wymieniane podczas aktualizacji systemu operacyjnego. Niektóre zastrzeżone sterowniki (NVIDIA itp.) Mają skrypty instalacyjne, które łatają sterownik do źródła jądra, budują to jądro i zastępują go obecnym jądrem. Dlatego jeśli opracujesz własną wersję jądra, która może wykonywać wszystkie wymagane funkcje, nie powinno stanowić większego problemu, aby zainstalować ją i pozostawić resztę systemu operacyjnego. Jednak najczęściej takie „nowe jądro” pochodzi z najnowszej oficjalnej wersji.

Jądro Solaris zostało w pewnym stopniu przeniesione w ten sposób, w wyniku czego OpenSolaris działa w środowisku Gnome.

Jednak wprowadzenie zupełnie innego jądra jest dużym wysiłkiem, ponieważ interfejsy muszą zostać zmostkowane. Może to wymagać dużo programowania w C i nie dotyczy tylko skryptu kompilacji.

h22
źródło