Как начать изменять исходный код Linux для создания собственной ОС? [закрыто]

15

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

Пожалуйста, дайте мне подробные предложения о том, как мне начать этот путь (с изменения исходного кода для настройки Linux) с необходимыми шагами, а также некоторые книги для начинающих.

Dubex
источник
Какова ваша цель? Как бы вы хотели внести свой вклад?
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 строк C ++. Ядро Linux - это примерно 13 000 000 строк кода на Си.

Почему все это в отдельных файлах? Крупные проекты хранятся в отдельных файлах по логистическим и практическим причинам. Просто подумайте о загрузке 13 000 000 строковых файлов в редактор! Перед тем, как заняться таким огромным проектом, как Linux, вам обязательно нужно отточить свои навыки C до того момента, когда вопрос «почему несколько файлов» отвечает сам на себя. Вы также должны иметь возможность читать код на C , а не просто писать его. (сложнее, чем кажется на первый взгляд)

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

После того, как вы получите C fu, убедитесь, что вы понимаете операционные системы. Это поможет вам понять код. Не весь Linux необходим. Само ядро ​​довольно маленькое! Что это раздувает это:

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

Одна проблема, которую вы сразу обнаружите, заключается в том, что эти компоненты не так просто отключить, заменить и снова подключить. Есть множество взаимосвязей. Короче говоря, изменить биты ядра сложно.

Причина, по которой люди предложили Minix, проста: это полноценная операционная система, но она не обременена потребностями такой сложной системы, как Linux. Код небольшой, но все еще обеспечивает полную функциональность. В конце концов, первые версии Linux были вдохновлены Minix.

Несомненно, в наши дни у Minix меньше аппаратной поддержки. Ну и что? Это благо! Современные компьютеры виртуализируются очень хорошо. Используйте это в своих интересах: виртуальная машина для запуска Minix настолько легка, что это сделает разработку бесполезной.

Если ваш проект заключается в создании операционной системы, вы можете сделать хуже, чем начать с изучения Minix. Вы также можете купить и прочитать книгу Minix, написанную для сопровождения «Современные операционные системы Эндрю Таненбаума ».

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

Наконец, вспомните боевой клич ученого: « никогда не изобретай велосипед! «(Конечно, мы любим делать исключения, когда учимся. И ради удовольствия :))

Алексиос
источник
1
будет [ссылка] (www.linuxfromscratch.org) полностью исполнить мою мечту ... спасибо за проявленный интерес к моему вопросу
dubex
LFS отлично подходит для изучения работы пользовательского пространства системы POSIX. Насколько я знаю, это специфично для Linux, поэтому он не имеет дело с модификацией ядра в необычном направлении (как это было бы при создании собственного ядра). Но это не главное, потому что, как только ваше ядро ​​отойдет от POSIX, пользовательское пространство станет несовместимым, и его придется портировать или переопределить.
Алексиос
Извините за недоразумение ... Но я не имел в виду, что я сделаю свое собственное ядро ​​(так как я не очень талантлив :)). Я хочу внести изменения в исходный код, чтобы он мог отличаться от других и выглядеть так, как будто это мое творчество. Например: я хотел бы, чтобы какой-нибудь тип анимации со звуком (который я сделал) был на экране, когда linux (скажем, Ubuntu) загружается с установленным в нем программным обеспечением для распознавания голоса. Еще раз спасибо.
Дубекс
1
В этом случае вы создаете свой собственный дистрибутив Linux, а не другую операционную систему. LFS - правильный инструмент для этого. Удачи!
Алексиос
1
@Alexios, очень хороший и наглядный ответ, спасибо.
0xAF
7

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

matcheek
источник
4

Я думаю, что первое, что вам нужно определить, это «какие изменения вы хотите внести в ОС». Пока вы не решите это, вы никуда не денетесь. Нет единого пути обучения.

Кроме того, я думаю, что вы должны лучше определить, что вы подразумеваете под ОС. Большая часть (большая часть) исходного кода Ubuntu находится за пределами Linux. Linux - это только ядро (иногда его называют операционной системой , особенно в академических кругах, что приводит к путанице), и поэтому он выполняет «простую» задачу:

  • управление ресурсами.
  • общение с оборудованием.

Любое другое изменение будет происходить на другом уровне, будь то ядро утилит пользователя (часто называют утилитами ), графический интерфейс, основные приложения на дистрибутиве и т.д.

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

rahmu
источник
извините за то, что не так конкретно задаю вопрос ... но на самом деле я понятия не имею обо всем этом подробно. На самом деле, я хочу, чтобы какой-то тип анимации (со звуком) отображался на экране во время загрузки linux (скажем, ubuntu) ... пожалуйста, дайте мне представление об изучении всех этих полей и о том, как двигаться дальше в какой-либо конкретной области (скажем, в графическом интерфейсе при взаимодействии с оборудованием). ) ...
dubx
@dubex начните с plymouth и посмотрите на библиотеки Linux для воспроизведения звука. SDL_mixer может быть простым.
sourcejedi
2

Это может быть немного не так, но если вы хотите узнать о ядре Linux и начать его разрабатывать, вам действительно стоит заглянуть в новичков ядра . Это сайт, который дает вам представление о механике ядра (как это прекрасно сделал Алексиос), но также позволяет выбрать небольшую задачу для обработки (так называемый уборщик ядра). Это отличный способ учиться, и я очень рекомендую его!

Томми
источник