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.
Odpowiedzi:
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:
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 :))
źródło
Sprawdź projekt Linux From Scratch . Jak sama nazwa wskazuje, zawiera wszystkie szczegóły potrzebne do zbudowania własnej dystrybucji Linuksa
źródło
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:
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;)
źródło
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!
źródło