Jak zacząć zmieniać kod źródłowy Linuksa, aby stworzyć niestandardowy system operacyjny? [Zamknięte]

15

Słyszałem, że możemy dostosować Linuksa (powiedzmy Ubuntu), jak chcemy, zmieniając jego kod źródłowy i tworząc zupełnie nowy system operacyjny. Pobrałem kod źródłowy jądra Linuksa ze strony www.kernel.org. Ale widząc to, nie jestem w stanie nic zrozumieć, jest tak wiele katalogów, plików w plikach (jak sądzę, byłby jeden pojedynczy duży program). Chcę to zrobić jako projekt uczelni, a także chcę przyczynić się do Linuksa, wprowadzając w nim niezbędne zmiany. Ale po zadaniu tego pytania na niektórych stronach, powiedzieli, że kod źródłowy Linuksa jest bardzo ogromny. Możesz spróbować minix. Teraz jestem bardzo zdezorientowany.

Proszę podać mi szczegółowe wskazówki na temat tego, jak powinienem rozpocząć tę podróż (zmiany kodu źródłowego w celu dostosowania Linuksa) wraz z niezbędnymi krokami, wraz z książkami dla początkujących.

dubeks
źródło
Jaki jest twój cel Jak chcesz wnieść swój wkład?
Spidey
Aby stworzyć własny niestandardowy system operacyjny, zmieniając jego kod źródłowy (linux) ... i dowiedzieć się, jak działa system operacyjny, a także dla zabawy
dubex
Jądro o nazwie Linux nie jest Gnu / Linux (Ubuntu, Debian, RedHat, Suse, itp. Distrowatch.com ). Jednak większość ludzi mylnie używa terminu Linux w znaczeniu GNU / Linux + X11 +. Jednak Linux jest tylko jednym z jąder, które mogą być używane z GNU i innymi systemami operacyjnymi. Jeśli chcesz zmodyfikować Ubuntu lub podobny, to nie to samo, co modyfikacja jądra o nazwie Linux.
ctrl-alt-delor

Odpowiedzi:

29

Witamy na unix.stackexchange.com!

Nie ma łatwej odpowiedzi na twoje pytanie, a znacznie lepsi ludzie niż ja napisali całe książki na temat jądra Linuksa i ogólnie systemów operacyjnych.

O zakresie projektu: napisanie systemu operacyjnego nie jest prostym zadaniem! Nawet celowo minimalny system operacyjny, taki jak Minix, jest dość złożoną rzeczą! Aby dać ci wyobrażenie o systemie Linux, pomyśl o programach C, które napisałeś do tej pory. Przeciętny kurs uniwersytecki to najwyżej kilka tysięcy linii C. Myślę, że mój projekt z ostatniego roku obejmował około 30–35 000 linii C ++. Jądro Linux zawiera około 13 000 000 linii kodu C.

Dlaczego to wszystko w osobnych plikach? Duże projekty są przechowywane w osobnych plikach ze względów logistycznych i praktycznych. Zastanów się nad załadowaniem pliku edytora o wartości 13 000 000! Przed zajęciem się tak dużym projektem, jak Linux, zdecydowanie powinieneś doskonalić swoje umiejętności w języku C do tego stopnia, że ​​pytanie „dlaczego wiele plików” odpowiada samo. Powinieneś także być w stanie odczytać kod C , a nie tylko go napisać. (trudniejsze niż się wydaje na początku)

Zdecydowanie powinieneś być bardzo biegły w C. Jądro jest utrzymywane przez tysiące ludzi i będziesz wezwany do zrozumienia osobistych idiomów C każdego z nich (przyznane, w ramach dość sztywnych standardów kodowania jądra, ale nadal - każdy ma własny styl rozwiązywania problemów).

Po zdobyciu C fu upewnij się, że rozumiesz systemy operacyjne. Pomoże to zrozumieć kod. Nie cały Linux jest niezbędny. Właściwe jądro jest dość małe! Co to jest wzdęcia:

  • Tysiące sterowników sprzętowych dla różnych urządzeń.
  • Warstwy abstrakcji dla różnych klas urządzeń w celu uproszczenia interfejsów API i pisania sterowników. Np. Mamy VFS dla systemów plików, warstwę zdarzeń dla urządzeń wejściowych i tak dalej.
  • Szokujące ilości warunkowo skompilowanego kodu i plików odpowiadających różnym architekturom działającym pod Linuksem (nie każda maszyna z Linuksem jest komputerem Intela, a niektóre są niesamowicie różne od tego, czego można się spodziewać). Jądro musi poradzić sobie z tymi różnicami, a to oznacza więcej kodu.

Jednym z problemów, który natychmiast znajdziesz, jest to, że te elementy nie są tak łatwe do odłączenia, zmiany i ponownego podłączenia. Istnieje wiele wzajemnych powiązań. Krótko mówiąc, zmiana bitów jądra jest trudna.

Powód, dla którego ludzie sugerowali, że Minix jest prosty: jest to pełny system operacyjny, ale nie jest obciążony potrzebami systemu tak złożonego jak Linux. Kod jest mały, ale nadal zapewnia pełną funkcjonalność. W końcu pierwsze wersje Linuksa zostały zainspirowane przez Minix.

Jasne, Minix ma obecnie mniej wsparcia sprzętowego. Więc co? To jest dobrodziejstwo! Nowoczesne komputery wirtualizują się bardzo dobrze. Wykorzystaj to na swoją korzyść: maszyna wirtualna do uruchomienia Minix jest tak lekka, że ​​sprawi, że rozwój stanie się leniwy.

Jeśli twoim projektem jest zbudowanie systemu operacyjnego, możesz zrobić coś gorszego niż zacząć od nauki Minix. Możesz także kupić i przeczytać książkę, którą napisał Minix, „ Nowoczesne systemy operacyjne Andrew Tanenbauma ”.

Powinieneś także wyznaczyć cele i precyzyjnie zdefiniować warunki . Jeśli twoja własna definicja systemu operacyjnego to Microsoft (system operacyjny z graficznym interfejsem użytkownika i pełnym pakietem oprogramowania), być może czeka cię bardzo długi projekt! W końcu setki tysięcy ludzi pracowały od lat 60. XX wieku, aby w końcu zabrać nas tam, gdzie jesteśmy.

Na koniec pamiętaj okrzyk bojowy informatyka: „ nigdy nie wymyślaj koła na nowo! „(lubimy robić wyjątki podczas nauki, oczywiście. I dla zabawy :))

Alexios
źródło
1
[link] (www.linuxfromscratch.org) wypełni moje marzenie ... dziękuję za zainteresowanie moim pytaniem
dubex
LFS jest fantastyczny do nauki działania przestrzeni użytkownika systemu POSIX. O ile wiem, jest to specyficzne dla Linuksa, więc nie zajmuje się modyfikowaniem jądra w nietypowym kierunku (tak jak w przypadku tworzenia własnego jądra). Ale poza tym chodzi o to, że kiedy jądro odejdzie od POSIX, przestrzeń użytkownika będzie niekompatybilna i będzie musiała zostać przeniesiona lub ponownie zaimplementowana.
Alexios
Przepraszam za nieporozumienie ... Ale nie miałem na myśli, że stworzę własne jądro (ponieważ nie jestem zbyt utalentowany :)). Chcę wprowadzić zmiany w kodzie źródłowym, aby wyglądał inaczej niż inne i wygląda na to, że to moja własna kreatywność. Na przykład: Chciałbym mieć jakąś animację z dźwiękiem (którą stworzyłem) na ekranie, gdy Linux (powiedzmy ubuntu) uruchamia się z zainstalowanym oprogramowaniem do rozpoznawania głosu. Jeszcze raz dziękuję.
dubex
1
W takim przypadku tworzysz własną dystrybucję Linuksa, a nie inny system operacyjny. LFS jest do tego odpowiednim narzędziem. Powodzenia!
Alexios
1
@Alexios, bardzo dobra i opisowa odpowiedź, dzięki.
0xAF,
7

Sprawdź projekt Linux From Scratch . Jak sama nazwa wskazuje, zawiera wszystkie szczegóły potrzebne do zbudowania własnej dystrybucji Linuksa

Matcheek
źródło
4

Myślę, że pierwszą rzeczą, którą musisz zdefiniować, jest „jakie zmiany chcesz wprowadzić do systemu operacyjnego”. Dopóki tego nie podejmiesz, tak naprawdę nigdzie się nie dostaniesz. Nie ma „jednej ścieżki” uczenia się.

Ponadto uważam, że powinieneś lepiej zdefiniować, co masz na myśli przez system operacyjny. Duża część (duża część) kodu źródłowego Ubuntu znajduje się poza Linuksem. Linux jest tylko jądrem (czasami nazywany jest systemem operacyjnym , szczególnie w kręgach akademickich, stąd zamieszanie), a zatem ma „proste” zadanie:

  • zarządzanie zasobami.
  • komunikacja ze sprzętem.

Każda inna zmiana miałaby miejsce na innym poziomie, niezależnie od tego, czy są to podstawowe narzędzia użytkowe (często nazywane utils ), GUI, podstawowe aplikacje dystrybucji itp.

Jeśli jednak nadal chcesz nauczyć się hakować jądro, być może powinieneś zacząć od tego pytania , które zostało najwyżej ocenione na tej stronie;)

rahmu
źródło
przepraszam, że nie jestem tak konkretny w zadawaniu pytań ... ale w rzeczywistości nie mam pojęcia o tym szczegółowo. Właściwie chcę jakąś animację (z dźwiękiem) na ekranie, gdy uruchamia się Linux (powiedzmy ubuntu) ... daj mi pomysł na temat eksploracji wszystkich tych pól i jak przejść dalej w dowolnym konkretnym polu (powiedzmy GUI z komunikacją ze sprzętem) ) ...
dubex,
@dubex zacząć Plymouth i spojrzeć na bibliotekach Linux do odtwarzania dźwięku. SDL_mixer może być łatwy.
sourcejedi
2

Może to być nieco poza punktem, ale jeśli chcesz poznać jądro Linuksa i zacząć je rozwijać, powinieneś naprawdę przyjrzeć się początkującym jądrom . Jest to strona, która daje wgląd w mechanikę jądra (tak jak Alexios zrobił to doskonale), ale pozwala także wybrać małe zadanie do wykonania (jest to tak zwany dozorca jądra). To świetny sposób na naukę i bardzo go polecam!

Tommy
źródło