Здравствуйте! Взглянем на ядро Linux, которое часто воспринимается как нечто мистическое. На самом деле, это просто исполняемый файл, который можно компилировать и запускать, как любой другой бинарник. Начнем с того, что ядро служит связующим звеном между аппаратным обеспечением и программами, предоставляя единый API для взаимодействия с различными устройствами.
Легко найти ядро в директории /boot, где находится сжатый образ, например, vmlinuz-6.12.48+deb13-amd64. Давайте проведем несколько экспериментов. В первом мы запустим ядро в виртуальной машине QEMU, но без файловой системы, что приведет к ошибке «Kernel panic — not syncing». Это подтверждает, что ядро ожидает дальнейших инструкций.
Во втором эксперименте мы создадим минимальную файловую систему с первой программой, которая будет запускаться после инициализации ядра. Мы воспользуемся языком Go для создания простого бинарника, который будет выводить «Hello». После успешной загрузки мы увидим, как наш Go-бинарник получает PID 1, что делает его первым процессом в системе.
Таким образом, ядро — это всего лишь файл, который инициализирует оборудование, а дистрибутив Linux состоит из ядра и набора утилит. Мы разглядели, как работает этот «черный ящик», и поняли, что это просто код, который можно собрать и запустить.