Ядро Linux: разработка, описание процесса разработки, сборка, установка, обновление. Как обновить ядро Linux?

0
0

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

Как появился Linux?

ядро linux

Первая система, которая вышла за границы своего родителя, это Unix, которая моментально распространилась по различным образовательным учреждениям, имея полностью открытую природу. С течением времени было принято решение скрыть исходные тексты Unix в качестве коммерческой тайны, вследствие чего разработчикам приходилось довольствоваться исключительно теорией. Ситуация смогла кардинально измениться после того как в свет вышла операционная система Minix, а также ее наследница под названием Linux. Главной особенностью этих ОС является то, что в них присутствует полностью открытый код, то есть ядро Linux является доступным для любых пользователей. Именно по этой причине данная ОС на сегодняшний день является второй по распространенности.

Что о нем известно?

В современной литературе можно найти не так много конкретной информации о том, каким образом работают отдельные подсистемы, что существенно осложняет освоение, а также дальнейшее совершенствование этой ОС, как отмечает создатель предшественника, изучая исключительно теорию, студенты начинают формировать слишком однобокий взгляд на то, как может выглядеть полноценная операционная система. Действительно значимые вещи могут просто быть опущены, потому что в них теория не сильно вникает.

Стоит отметить, что пользователи выражают очень большой интерес к тому, как работает ядро Linux, и в принципе вся операционная система. Таким образом, вскоре после появления Minix появилась также отдельная группа новостей под названием USENET, предназначенная исключительно для обсуждения данной системы. Через несколько недель эта группа имела более 40 000 подписчиков, преимущественное большинство которых старалось добавить системе массу возможностей, стараясь сделать ее гораздо большей и лучшей. Ежедневно сотни людей по всему миру думали над тем, какие можно еще предложить идеи и фрагменты кода.

Однако многие недоумевают, почему же сейчас доступно так мало литературы, расписывающей ядро Linux, но на самом деле этому могло послужить несколько основных причин.

Коммерческая ценность документации

 как обновить ядро linux

После того как появился Unix, его коды были известны широкой массе, вследствие чего активно изучались по всему миру. Наиболее известной книгой, описывающей данную ОС, была Lions Commentary on Unix, которую впервые опубликовали еще в далеком 1977 году. Данная книга описывала работу этой операционной системы максимально подробно, вследствие чего ее использовали в различных университетских курсах, посвященных изучению операционных систем. Однако с течением времени стало понятно, что Unix постепенно превращается в коммерческий продукт, вследствие чего было полностью запрещено изучать исходный код на различных курсах для того, чтобы статус коммерческого секрета не подвергался риску.

Как говорят специалисты, для создания предпосылки действительно успешного частного бизнеса первоначально нужно сформировать полностью закрытую коммерческую инфраструктуру, при помощи которой можно будет добиться понимания кода, причем она должна работать исключительно для данной компании. Любое сокрытие информации об архитектуре – это крайне эффективная стратегия контроля над проектом, где присутствуют открытые исходники.

Сложность в освоении текстов

описание ядра linux

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

Правильное толкование программ – это достаточно серьезная проблема в наши дни, и заключается она в том, что далеко не всегда достаточно просто иметь собственные исходники. В том случае, если система или же программа пишется на относительно низкоуровневом языке, таком как Cobol, Fortran или C, а также имеет некачественную документацию, то в таком случае любые основные проектные решения полностью растворяются в мелочах кодирования, вследствие чего им требуется полная реконструкция. В таких случаях ценность более эффективной документации, включая детальное описание архитектуры, а также спецификацию интерфейса, в конечном итоге может быть даже выше по сравнению с ценностью самого исходного текста.

Одним из возможных подходов предложил Линус Торвальдс, которым и осуществлялась разработка ядра Linux. Он предложил полную ясность исходного кода, то есть предоставление предельно четкой структуры, удобных интерфейсов, а также следования принципу «делать немного, но делать качественно».

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

В чем различия между ядром Unix и Linux?

Естественно, что описание ядра Linux значительно отличается от основного описания Unix, однако многие не знают о том, в чем заключаются эти различия.

Благодаря одинаковому API, а также общему происхождению современные ядра Unix являются достаточно схожими между собой, и исключениями здесь являются некоторые монолитные статические бинарные файлы, существующие в виде крупных исполняемых образов, выполняющихся единственный раз и использующих единственную копию адресного пространства. Для обеспечения нормальной работы Unix необходимо обеспечить полноценную систему с контроллером управления страничной адресации памяти, при помощи которой можно будет обеспечить эффективную защиту памяти в системе, а также предоставить каждому отдельному процессу свое виртуальное адресное пространство.

Ядро операционной системы Linux не основывается на какой-то определенной системе Unix и является полностью монолитным. Однако, несмотря на это, его структура предусматривает определенные свойства микроядерной архитектуры.

Различия

установка ядра linux

Есть несколько отличий, позволяющих понять, как узнать ядро Linux:

  • В первую очередь, стоит отметить возможность поддержки динамически загружаемых модулей. Несмотря на то, что ядро этой операционной системы является полностью монолитным, дополнительно поддерживается возможность динамической загрузки и выгрузки кода в случае такой необходимости. Данная возможность изначально появилась еще в версии 0.99, и поспособствовал этому Питер МакДональд.
  • Ядро способно поддерживать симметричную многопроцессорную обработку. В преимущественном большинстве коммерческих вариантов ОС Unix поддерживается данная функция, однако в традиционных реализациях такая поддержка чаще отсутствует.
  • Ядро ОС Linux является преемптивным, то есть оно может полностью вытеснить выполняющееся задание даже в том случае, если его работа осуществляется в режиме данного ядра. Среди большинства коммерческих реализаций преемптивное ядро ОС Unix имеет в составе только IRIX, Solaris и непосредственно сам Unix.
  • В Linux принято было использовать абсолютно другой подход к реализации потоков, вследствие чего они практически не отличаются от стандартных процессов. Рассматривая их с точки зрения ядра, можно сказать о том, что все процессы являются абсолютно одинаковыми, просто некоторые из них отличаются наличием общих ресурсов.
  • Ядро Linux, описание процесса разработки которого будет показано далее, не имеет определенных функций Unix, которые были признаны плохо реализованными. В частности, это относится к STREAMS и некоторым другим.

Модули

как узнать ядро linux

Несмотря на то что система является монолитной, с ее помощью может осуществляться динамическая вставка или же удаление кода ядра в момент работы. Загружаемые объекты ядра – это модули ядра Linux.

По своей сути модуль представляет собой стандартную программу, так как у него тоже присутствуют точки выхода и входа, а сам он располагается в своем бинарном файле. Однако при этом стоит отметить, что у модулей есть непосредственный доступ к различным функциям и структурам ядра. Для тех программ, которые располагаются в пространстве пользователя, данный доступ ограничивается при помощи библиотечных интерфейсов компилятора.

Модули принимают участие в самых различных процессах, с которыми связана операционная система, включая также обновление ядра Linux. Некоторые функции могут быть доступными исключительно для тех модулей, распространение которых осуществляется под лицензией GPL, в частности, это относится к возможности работы с очередями процессов.

Сборка

Сборка ядра Linux осуществляется при помощи специализированной программы Make. После того как вами будут получены исходные коды ядра, нужно распаковать архив linux-2.6.18.tar.bz2, что делается при помощи специальной утилиты Tar, открывающейся от имени суперпользователя.

Команда make defconfig позволит вам использовать стандартную конфигурацию для данной архитектуры, но при этом вы должны понимать, что в преимущественном большинстве случаев этого оказывается недостаточно, поэтому нужно проводить конфигурацию ядра вручную. Для вызова программы конфигурации ядра нужно ввести команду make menuconfig. Всю дополнительную информацию касательно того, что представляют собой параметры команды make, вы сможете найти в отдельном файле README.

Для запуска ядра в минимальной конфигурации вполне достаточно просто указать тот драйвер контроллера IDE, который вы используете, в разделе «PCI IDE chipset support». Помимо этого, вам следует обратить свое внимание на раздел «File systems», где должны быть отмечены присутствующие файловые системы.

Сборка ядра запускается после нажатия команды make. В преимущественном большинстве случаев используется команда make –j2, так как обновить ядро Linux в данном случае можно будет гораздо быстрее. В данном случае параметр –j2 говорит о том, что одновременно запускается сразу два потока выполнения.

Предостережение

модули ядра linux

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

Помимо безопасности вы с его помощью сможете добиться единой конфигурации всех компьютеров, которые были задействованы в данной процедуре. Рекомендуется использовать в качестве такого дистрибутива Slackware Linux, так как в нем применяются немодифицированные программные компоненты. Виртуальной машиной может выступать VMware или же QEMU, но это не обязательно.

Установка ядра Linux занимает приблизительно 20 минут, при этом стоит отметить, что сборка ядра, которое собирается по стандартной конфигурации, может осуществляться без создания RAM-диска, так как в данном случае отсутствует создание каких-либо важных загрузочных драйверов.

Разработка

разработка ядра linux

Ядро – это совокупность интерфейсов, которые называются системными вызовами и обеспечивают взаимодействие различных прикладных программ, функционирующих в пространстве пользователя, а также аппаратной части системы. К примеру, при работе с отдельными файлами утилиты могут вообще не учитывать тип жесткого диска, а также файловой системы, которая на нем используется.

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

Разработка прикладных программ осуществляется при помощи специализированных программных интерфейсов приложений. В данном случае нет никакой необходимости в том, чтобы осуществлять корреляцию между интерфейсами, использующими приложения и теми, которые предоставляет само ядро. Может существовать абсолютно идентичный API для нескольких операционных систем, в то время как его реализация может быть отличной. К примеру, Linux и известная на сегодняшний день система FreeBSD полностью соответствуют стандарту POSIX, вследствие чего большинство приложений, написанных специально для одной операционной системы, впоследствии при необходимости можно перенести на другую.

В определенной части интерфейс к системным функциям обеспечивается при помощи библиотеки С. К примеру, функция printf позволяет сформировать строку, соответствующую заданному формату, вследствие чего данная стока будет передана системному вызову write, отправляющему ее на стандартное устройство вывода, которым может являться, например, терминал.

Дополнительно отдельная библиотека функций языка С предоставляет также достаточно большую часть POSIX стандарта API. В частности, при помощи команды strace при необходимости можно детально отследить обращение определенной программы к ядру, если оно осуществляется при использовании системных вызовов. Именно по этой причине данная команда достаточно часто используется при возникновении ошибок, чтобы отладить их, а также найти причину их возникновения.

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

Стиот отметить, что в современных системах процессами предусматривается использование одновременно двух виртуальных ресурсов.