it-swarm-ru.tech

Можно ли установить ядро ​​Linux в одиночку?

Мне просто любопытно, можно ли установить ядро ​​Linux отдельно или вам нужно использовать один из вариантов. Если бы это было возможно, как бы вы это сделали? Мне не нужен подробный учебник. Я просто хочу знать, как это будет сделано концептуально. Я не очень хорошо разбираюсь в низкоуровневых вещах и хочу знать, как вы получаете ОС на компьютер. Я предполагаю, что это как-то связано с MBR.

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

50
cesar

Технически вы можете установить только загрузчик и только ядро, но как только ядро ​​загрузится, оно будет жаловаться на невозможность запустить "init", тогда оно просто будет сидеть, и вы ничего не сможете с ним сделать.

Кстати, это часть загрузчика, который находится в MBR. Ядро находится где-то на обычной области диска. Загрузчик настроен так, чтобы знать, где он находится, поэтому он может загрузить ядро ​​и выполнить его.

54
Shawn J. Goff

Я не думаю, что вы точно понимаете, о чем вы спрашиваете, но вы, возможно, захотите взглянуть на проект Linux From Scratch .

20
Shadur

Если вы спрашиваете, можете ли вы просто установить или обновить ядро ​​"поверх" существующей системы, не устанавливая кучу других программ?

Ядро Linux - это двоичный файл, обычно называемый vmlinuz-x.x.x-x-name в каталоге boot (который обычно представляет собой отдельный небольшой раздел в начале жесткого диска), где x - это номер версии. "name" - это просто выбранное имя для ядра, которое может быть установлено во время компиляции, вы можете использовать его для определения типа машины или архитектуры, для которой ядро, или по любой другой причине.

Он загружается во время загрузки загрузчиком, обычно GRUB, который вызывается загрузочным кодом в MBR, который вызывается ПЗУ BIOS. После загрузки он не "держится открытым" и не защищен специально. Таким образом, вы можете заменить этот файл другим рабочим ядром. Но у GRUB есть классная функция, которая позволяет вам выбрать несколько ядер для загрузки. Поэтому довольно разумно добавить ваше дополнительное ядро ​​в этот список, но сохранить оригинальное известное рабочее ядро ​​на случай, если что-то пойдет не так.

Я полагаю, что почти все дистрибутивы создают "модульное" ядро, в котором драйверы устройств находятся в отдельных файлах. Таким образом, большинству ядер нужна файловая система, содержащая драйверы, доступные для нее во время загрузки, и именно для этого нужны "initrd" (initial RAM диск) или "initramfs". GRUB будет загрузите ядро ​​в определенном месте в памяти, а initrd - в другом месте и перейдите к ядру, сообщив ему, где находится initrd, начиная Linux.

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

Есть инструменты для изменения и создания initrds. У Debian есть инструменты Nice, и я думаю, что и другие дистрибутивы тоже.

Таким образом, если вы загружаете более новое ядро ​​с сайта kernel.org и компилируете его для создания нового двоичного образа ядра, вам необходимо создать или обновить initrd с помощью драйверов, которые работают с этим ядром. Старый initrd не будет работать, потому что драйверы должны совпадать с версией ядра, которое работает.

Файл initrd называется initrd.img-x.x.x.x-name аналогично ядру, и может быть заменено после загрузки точно так же, как и ядро, и лучшая практика будет указывать, что вы не удаляете известный рабочий initrd, пока не узнаете, что можете успешно загрузить новое ядро ​​+ initrd.

Я надеюсь, что это обеспечивает некоторый контекст.

Если вы ищете "чистую" установку Linux, в которой не было установлено никаких дополнительных программ, то моим любимым выбором всегда была установка образа Debian netinst. Практически у вас есть только самые основные инструменты, необходимые для запуска текстовой консоли командной строки и nano в качестве текстового редактора.

13
LawrenceC

Один исполняемый файл rootfs

Система абсолютного минимума запускает один /init программа, как я объяснил в Single Application Linux | Super User

Минимальный Linux Live

https://github.com/ivandavidov/minimal

Для более интересной интерактивной системы это небольшой (в основном образовательный) скрипт, который:

  • скачивает исходники для ядра и busybox
  • компилирует их
  • генерирует с ними загрузочный 8Mb ISO

Затем ISO оставляет вас в минимальной оболочке с busybox.

С QEMU вы можете легко загрузиться в систему.

Я изменил его, чтобы он мог запускаться из исходного каталога ядра: https://github.com/cirosantilli/runlinux

Применение:

git clone https://github.com/ivandavidov/minimal
cd minimal/src
./build_minimal_linux_live.sh
# Wait.
# Install QEMU.
# minimal_linux_live.iso was generated
./qemu64.sh

и вы останетесь внутри окна QEMU с вашей новой минимальной системой. Потрясающие.

Поскольку он небольшой, это хороший вариант, чтобы прочитать исходный код и понять, что происходит.

Проверено на Ubuntu 16.04.

Buildroot

https://buildroot.org/

Большой набор скриптов Makefile, которые управляют:

  • GCC кросс-компиляция
  • сборка ядра
  • компилятор загрузчика
  • генерация rootfs
  • имеет множество рецептов загрузки/сборки пакетов в дереве исходников, включая сложные вещи, такие как GTK. Есть система зависимости.

Минимальный пример:

git clone git://git.buildroot.net/buildroot
cd buildroot
git checkout 2016.05
make qemu_x86_defconfig
# Can't use -jN, use `BR2_JLEVEL=2` instead.
BR2_JLEVEL=2 make
# Wait.
# cat board/qemu/x86_64/readme.txt
qemu-system-x86_64 -M pc -kernel output/images/bzImage -drive file=output/images/rootfs.ext2,if=virtio,format=raw -append root=/dev/vda -net nic,model=virtio -Net User
# You are now in a Shell with BusyBox utilities.

У него даже есть рецепты для сборки X11 с нуля: Как установить X11 в моей собственной системе Linux Buildroot?

Профессиональные вещи.

Alpine Linux

https://github.com/gliderlabs/docker-Alpine

Встроенный дистрибутив с менеджером пакетов, который предлагает предварительно скомпилированные двоичные файлы с веб-сайта.

Смотрите также

Можно установить ядро ​​Linux без обычных инструментов пользовательского пространства. Обычно это делается во встроенных системах, таких как маршрутизаторы. Обычно ядро ​​загружается из ROM или флэш-памяти) и настраивается для данного устройства (обычно с необходимыми драйверами, скомпилированными в ядро, а не загруженными в виде модулей).

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

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

3
Toby Speight

Я хотел бы поддержать предложение Шадура о том, что вы должны испачкать руки Linux с нуля.
Также, что-то похожее, попробуйте Pocket Linux .

Руководство по Pocket Linux демонстрирует, как создать небольшую консольную систему GNU/Linux, используя только исходный код и пару дискет. Он предназначен для пользователей Linux, которые хотели бы получить более глубокое понимание того, как их система работает под покровом специфических функций и инструментов распространения.

3
Philomath

Многие дистрибутивы предоставляют "основные" установки. Это то, что вы хотите. Смотрите ubuntu-minimal, debian net-install, archlinux (по умолчанию это просто ядро).

Другие ответы полезны, если вы хотите учиться, но это не так = p

2
user606723