Как начать изменять исходный код Linux, чтобы создать собственную ОС?

Как начать изменять исходный код Linux, чтобы создать собственную ОС?

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

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

решение1

Добро пожаловать на unix.stackexchange.com!

На ваш вопрос нет простого ответа, идалекоЛюди получше меня написали целые книги на тему ядра Linux и операционных систем в целом.

О масштабе проекта: написание операционной системы — непростая задача! Даже намеренно минимальная ОС вроде Minix — довольно сложная штука! Чтобы дать вам представление о Linux, подумайте о программах на C, которые вы написали до сих пор. Средняя университетская курсовая работа, как правило, состоит максимум из нескольких тысяч строк на C. Думаю, мой выпускной проект был объемом около 30–35 000 строк на C++. Ядро Linux — это примерно 13 000 000 строк кода на C.

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

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

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

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

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

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

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

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

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

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

решение2

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

решение3

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

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

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

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

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

решение4

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

Связанный контент