Як почати змінювати вихідний код Linux для створення власної ОС? [зачинено]


15

Я чув, що ми можемо налаштувати Linux (скажімо, Ubuntu), як бажаємо, змінивши його вихідний код і можемо створити цілком нову ОС. Я завантажив вихідний код ядра Linux з веб-сайту www.kernel.org. Але побачивши це, я не в змозі нічого зрозуміти, у файлах стільки каталогів, файлів (як я думаю, була б одна велика програма). Я хочу зробити це як проект коледжу, і я також хочу внести свій внесок у Linux, внісши в ньому необхідні зміни. Але, задавши це запитання на якомусь сайті, вони сказали, що вихідний код Linux дуже величезний. Ви можете спробувати мінікс. Зараз я дуже розгублений.

Будь ласка, дайте мені пропозиції з детальною інформацією про те, як я повинен розпочати цю подорож (про зміну вихідного коду, щоб налаштувати Linux) з необхідними кроками, а також деякі книги для початківців.


Яка ваша мета? Як би ви хотіли зробити свій внесок?
Spidey

Щоб зробити власну власну ОС, змінивши її (linux) вихідний код ... і дізнатися, як працює ОС і для розваги
dubex

Ядро з назвою Linux - це не Gnu / Linux (Ubuntu, Debian, RedHat, Suse тощо ) distrowatch.com ) Однак більшість людей заплутано використовують термін Linux для позначення GNU / Linux + X11 +. Однак Linux - це лише одне з ядер, яке можна використовувати з GNU та іншими операційними системами. Якщо ви хочете змінити Ubuntu або подібне, це не те саме, що зміна ядра на ім'я Linux.
ctrl-alt-delor

Відповіді:


29

Ласкаво просимо на unix.stackexchange.com!

На ваше запитання немає простого відповіді, і набагато кращі люди, ніж я, написали цілі книги на тему ядра Linux та операційних систем загалом.

Про сферу проекту: написання операційної системи - непросте завдання! Навіть цілеспрямовано мінімальна ОС на зразок Minix - це досить складна річ! Щоб дати вам уявлення про Linux, подумайте про програми C, про які ви писали до цього часу. Середня курсова робота в університеті має становити щонайменше кілька тисяч ліній С. Я думаю, що мій проект на останній рік склав близько 30–35 000 рядків С ++. Ядро Linux становить приблизно 13000000 рядків коду С.

Чому це все в окремих файлах? Значні проекти зберігаються в окремих файлах з логістичних та практичних причин. Просто подумайте про завантаження 13.000.000 рядкового файлу в редактор! Перш ніж вирішувати такий величезний проект, як Linux, вам слід обов'язково відточити свої навички C до того моменту, коли на питання "чому декілька файлів" відповідає сам. Ви також повинні мати можливість читати код C , а не просто писати його. (важче, ніж здається спочатку)

Ви, безумовно, повинні бути дуже досвідченими в C. Ядро підтримують тисячі людей, і вас покликають зрозуміти особисті ідіоми C кожної з них (надано, у рамках досить жорстких стандартів кодування ядра, але все-таки - у кожного є власний стиль вирішення проблем).

Отримавши свій C fu, переконайтеся, що ви розумієте операційні системи. Це допоможе вам зрозуміти код. Не весь Linux є важливим. Ядро власне досить мало! Що це цвіте:

  • Тисячі драйверів апаратних засобів для різних пристроїв.
  • Шари абстракції для різних класів пристроїв для спрощення API та запису драйверів. Наприклад, у нас є VFS для файлових систем, рівень подій для пристроїв введення тощо.
  • Шокуюча кількість умовно складеного коду та файлів, що обслуговують різні архітектури, що працюють під управлінням Linux (не кожна машина Linux є ПК ПК Intel, а деякі неймовірно відрізняються від того, що ви могли очікувати). Ядро має вирішити ці відмінності, а це означає більше коду.

Одна з проблем, яку ви відразу знайдете, - відключити, змінити та підключити знову ці компоненти не так просто. Існують численні взаємозв'язки. Словом, зміна бітів ядра є складним.

Причина, по якій люди запропонували вам Minix, проста: це повноцінна операційна система, але вона не обтяжена потребами системи, такої складної, як Linux. Код невеликий, але все ж забезпечує повну функціональність. Адже перші версії Linux були натхненні Minix.

Звичайно, у Minix є менша технічна підтримка в наші дні. І що? Це добро! Сучасні комп’ютери дуже добре віртуалізуються. Використовуйте це на свою користь: VM для запуску Minix настільки легкий, що може зробити проблему розвитку.

Якщо ваш проект полягає в створенні операційної системи, ви можете зробити гірше, ніж почати з вивчення Minix. Ви також можете придбати та прочитати книгу, яку Мінікс написав у супроводі " Сучасні операційні системи Ендрю Таненбаума ".

Ви також повинні встановити цілі та точно визначити свої умови . Якщо ваше власне визначення ОС - це Microsoft (ОС з графічним інтерфейсом та повним набором програмного забезпечення), можливо, ви будете дуже довгим проектом! Сотні тисяч людей працювали з 1960-х років, щоб звести нас там, де ми зараз є.

Нарешті, згадайте бойовий вигук комп'ютерного вченого: " ніколи не винаходити колесо! '(ми, звичайно, любимо робити винятки під час навчання. І для розваги :))


1
[посилання] (www.linuxfromscratch.org) повною мірою наповнить мрію ... дякую, що проявили інтерес до мого питання
dubex

LFS є фантастичним для того, щоб дізнатися, як працює користувацький простір системи POSIX. Наскільки я знаю, що це специфічно для Linux, тому воно не займається зміною ядра в незвичному напрямку (як ви робили при створенні власного ядра). Але це крім пункту, адже як тільки ваше ядро ​​відсунеться від POSIX, користувальницька область буде несумісною і її доведеться перенести або повторно доповнити.
Алексіос

Вибачте за нерозуміння ... Але я не мав на увазі, що я зроблю власне ядро ​​(так як я не дуже талановитий :)). Я хочу внести зміни у вихідний код, щоб він міг виглядати відмінно від інших і виглядає так, що це моя власна творчість. Наприклад: я хотів би отримати якийсь тип анімації зі звуком (який я зробив), на екрані, коли linux (скажімо, ubuntu) завантажується із встановленим у ньому програмним забезпеченням розпізнавання голосу. Ще раз дякую.
дубекс

1
У такому випадку ви робите власний дистрибутив Linux, а не іншу операційну систему. LFS - це правильний інструмент для цього. Удачі!
Алексіос

1
@ Алексіос, дуже хороша та описова відповідь, дякую.
0xAF

7

Перевірте проект Linux From Scratch . Як випливає з назви, вона містить усі деталі, необхідні для створення власного дистрибутива Linux


4

Я думаю, що перше, що вам потрібно визначити, це "які зміни ви хочете внести в ОС". Поки ви не вирішите це, ви нікуди не дінетесь. Не існує "одного шляху" навчання.

Крім того, я думаю, ви повинні краще визначити, що ви маєте на увазі під ОС. Значна частина (основна частина) вихідного коду Ubuntu знаходиться поза межами Linux. Linux є лише ядром (його іноді називають операційною системою , особливо в академічних колах, звідси плутанина), і тому вона має "просту" роботу:

  • управління ресурсами.
  • спілкування з обладнанням.

Будь-яке інше зміна буде відбуватися на іншому рівні, будь то ядро утиліт користувача (часто називають утилітами ), графічний інтерфейс, основні програми на дистрибутиві і т.д.

Якщо ви все ще хочете дізнатися, як зламати ядро, вам, можливо, слід почати з цього питання , найбільш проголосованого на цьому сайті;)


Вибачте, що не так конкретно ставите питання ... але насправді я не маю уявлення про все це докладно. Насправді я хочу, щоб певна анімація (зі звуком) була на екрані, коли завантажується Linux (скажімо, ubuntu) ... будь ласка, дайте мені уявлення про вивчення всіх цих полів і про те, як рухатись далі в будь-якому конкретному полі (скажімо, gui зі спілкуванням з обладнанням ) ...
dubex

@dubex почніть з plymouth та перегляньте бібліотеки Linux для відтворення звуку. SDL_mixer може бути легким.
sourcejedi

2

Це може бути трохи поруч, але якщо ви хочете дізнатися про ядро ​​Linux і почати його розробляти, вам слід по-справжньому заглянути в новачків ядра . Це веб-сайт, який дає вам уявлення про механіку ядра (як це робив Алексіос на відмінно), але також давайте вибиратимемо невелике завдання, яке потрібно впоратися (будучи так званим двірником ядра). Це прекрасний спосіб вчитися, і я дуже рекомендую це!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.