Как просмотреть и просмотреть исходный код ядра Linux?
В этой статье кратко объясняется, что такое ядро Linux и как просмотреть его исходный код.
Это руководство оптимизировано для неопытных пользователей Linux и программистов, которые хотят прочитать исходный код ядра или стать разработчиками ядра Linux. Ядро Linux универсально; поэтому данный документ полезен для всех дистрибутивов Linux.
Прочитав эту статью, вы поймете, что такое ядро, как оно устроено и как просматривать его компоненты. Эта статья была первоначально написана в 2019 году и обновлена в 2022 году.
Что такое ядро Linux и как его просматривать
Ядро Linux является основным компонентом, позволяющим взаимодействовать между программным обеспечением и оборудованием с помощью драйверов устройств. Вы можете думать о ядре Linux как о трансляторе, обеспечивающем связь между программами, оборудованием и пользовательским интерфейсом.
Изучение того, как просматривать ядро Linux, — это первый шаг для любого программиста, который хочет стать разработчиком ядра. Это также полезно для программистов или пользователей, которые хотят прочитать исходный код или изменить его.
Структура ядра Linux
Ядро Linux состоит из каталогов и подкаталогов, известных как «дерево ядра», пользователи могут просматривать определенные разделы всего кода. Это позволяет пользователям и разработчикам сосредоточиться на определенных частях кода.
За исключением дистрибутива Slackware Linux, ядро которого поддерживается одним человеком, огромное сообщество разработчиков остальных дистрибутивов Linux разделяет задачи на основе дерева ядра. В отличие от этого, некоторые разработчики сосредотачиваются на драйверах, другие — на безопасности, а третьи — на виртуализации.
Дерево исходного кода ядра представляет собой описанную ниже структуру, с помощью которой пользователи могут просматривать исходный код:
Просмотр и просмотр исходного кода ядра Linux
Обычно, когда мы устанавливаем Linux, мы не включаем исходный код. Мы можем установить Linux и сохранить исходный код в нашей системе. Но большинство пользователей отказываются от него, чтобы загрузить ISO-образ меньшего размера. В конце концов, вы можете загрузить исходный код позже, если он вам понадобится.
Если в вашей системе присутствует исходный код ядра, вы можете найти его в каталоге /usr/src/linux-
Вы также можете найти последний исходный код ядра по адресу https://github.com/torvalds/linux.
Как вы можете видеть на предыдущем снимке экрана или по указанному URL-адресу, в дереве исходного кода мы можем найти следующие основные каталоги и файлы:
arch: этот каталог содержит исходные коды для различных системных архитектур, поддерживаемых ядром Linux.
block: каталог уровня блочного ввода/вывода содержит код для управления блочными устройствами (например, жесткими дисками, DVD, гибкими дисками и т. д.) и их запросами.
-
сертификаты: каталог certs содержит сертификаты и файлы подписей, позволяющие ядру загружать подписанные модули с помощью подписей модулей. Это может быть полезно для предотвращения запуска вредоносного кода в модулях ядра, таких как руткиты.
КОПИРОВАНИЕ: в этом файле содержится информация о лицензиях на исходный код.
РЕДИТЫ: неполный список людей, внесших свой вклад в исходный код ядра Linux.
Crypto: этот каталог содержит криптографические шифры, которые решают задачи шифрования и сжатия.
Документация: как следует из названия, этот каталог содержит всю документацию обо всех компонентах ядра.
драйверы: каталог драйверов содержит исходный код драйверов устройств для поддержки оборудования. Внутри этого каталога вы найдете подкаталоги для каждого оборудования, такого как видео, Bluetooth и т. д. (любое поддерживаемое оборудование).
Fs: этот каталог содержит исходники для файловых систем, включая виртуальные файловые системы, а также файловые системы для чтения и записи.
include: этот каталог содержит заголовки C для файлов ядра, таких как функции для компиляции кода.
init: каталог init содержит исходный код, относящийся к процессу загрузки и инициализации ядра Linux. Исходный код хранится в файле с именем mainc.c в каталоге /init. Код инициализирует ядро и некоторые начальные процессы.
ipc: межпроцессное взаимодействие, такое как сигналы и конвейеры.
-
Kbuild: файл Kbuild указывает объектные файлы для vmlinuz.
Kconfig: файл Kconfig используется для отключения или включения функций ядра. Пользователи имеют дело с запуском команды «make menuconfig».
ядро: каталог ядра включает основные подсистемы, такие как код обработки сигналов планировщика.
lib: этот каталог содержит библиотечные процедуры, общие строковые операции, аппаратно-зависимые операции, процедуры отладки и код синтаксического анализа командной строки.
ЛИЦЕНЗИИ: содержит лицензии, применимые к исходному коду ядра и отдельным исходным файлам, которые могут иметь разные лицензии. Внутри этого каталога вы найдете четыре основных подкаталога, содержащих поддерживаемые лицензии, такие как LGPL-X, лицензия Apache и т. д.
MANTAINERS: файл MAINTAINERS содержит список специалистов по сопровождению ядра и инструкции по внесению изменений в ядро.
Makefile: этот файл считывает файл .config и создает модули и vmlinux.
mm: ядро Linux управляет оборудованием и виртуальной памятью (подкачка). Это каталог, в котором хранится исходный код для управления памятью.
net: сетевой каталог содержит сетевой стек. Здесь вы можете найти код, связанный с протоколами связи, такими как IP, TCP и UP.
README: файл README ссылается на руководства для разработчиков ядра в ранее описанном каталоге Documentation.
Образцы: каталог примеров содержит образец кода ядра и файлов конфигурации.
скрипты: здесь хранятся необходимые скрипты для сборки ядра Linux.
security: в подкаталоге безопасности содержится структура безопасности Linux с улучшенной безопасностью (SELinux).
звук: здесь вы можете найти звуковую подсистему, включая звуковые драйверы, архитектуры драйверов и код, связанный со звуком, например ALSA.
инструменты: здесь представлены инструменты для разработки сжатого ядра, такие как ACPI, cgroup, инструменты тестирования USB, тестовый модуль vhost, инструменты GPIO, IIO и SPI, а также инструмент политики Inter Energy.
usr: здесь usr хранит initramfs, который запускает файловую систему и инициализирует кэш памяти ядра. Включенный код позволяет выполнять код в пользовательском пространстве в процессе загрузки, когда ядро загружено не полностью.
virt: каталог виртуализации содержит модуль KVM (Kernel Virtual Machine) для гипервизоров, включая архитектуры.
Это все основные файлы и каталоги, включенные в основной исходный каталог ядра. Вы можете просматривать каждый раздел в зависимости от ваших потребностей. Как только вы поймете назначение всех файлов и каталогов, перечисленных выше, подкаталоги станут довольно интуитивно понятными.
Заключение
Как видите, эта статья была написана для начинающих и средних пользователей, чтобы понять основы ядра Linux. Тем не менее, для практического использования необходимы некоторые знания о разработке под Linux, характеристиках оборудования и операционной системы. Предыдущая лекция отлично подходит для введения в структуру ядра Linux и дистрибутив Linux. Имейте в виду, что ядро Linux периодически развивается. Вот почему мы постоянно обновляем ранее описанный контент.
Мы надеемся, что вы нашли эту статью полезной. Продолжайте читать LinuxHint, чтобы узнать больше о профессиональных статьях по Linux.