Действительно ли возможно установить одно только ядро Linux?

Попробовать swapon -s для списка текущих устройств свопинга и другой релевантной информации.

49
03.09.2016, 04:23
6 ответов

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

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

54
27.01.2020, 19:33
  • 1
    Как Вы поместили бы его в MBR? –  cesar 22.07.2011, 09:07
  • 2
    Каждый загрузчик идет с инструментом для установки себя в MBR. Существуют также более дружественные инструменты как Восстановление начальной загрузки (help.ubuntu.com/community/Boot-Repair). –  Shawn J. Goff 22.07.2011, 15:26
  • 3
    Хорошо Вы могли создать initramfs и встроить его в изображение ядра, и затем у Вас будет полностью рабочая система от просто файла изображения :-) –  Patrick 27.07.2012, 17:22
  • 4
    @ShawnJ.Goff, Почему ядро жаловалось бы на неспособность запустить init, если мы обеспечиваем initramfs? –  Pratik Singhal 02.11.2014, 15:34
  • 5
    @ShawnJ.Goff, Почему ядро жаловалось бы на неспособность запустить init, если мы обеспечиваем initramfs? –  Pratik Singhal 02.11.2014, 15:34
  • 6
    @ps06756, Если у Вас есть initramfs, который не является "одним" только ядром как вопрос, который задают. Если initramfs будет иметь init, то ядро не будет жаловаться. –  Shawn J. Goff 03.11.2014, 16:44

Я не думаю, что Вы понимаете точно, что Вы спрашиваете, но Вы могли бы хотеть смотреть на Linux, С нуля проекта.

19
27.01.2020, 19:33
  • 1
    LFS был бы хорошей идеей выяснить, как создать минимальную систему. Или Вы могли посмотреть на MINIX (и прочитать книгу). Или, для другого введения (меньше работы, но менее информативный), смотрят на пакеты отмеченная “основа” (aptitude search '?essential') на Debian или Ubuntu и понимают то, что каждый делает (существуют немного больше, чем абсолютный минимум). –  Gilles 'SO- stop being evil' 21.07.2011, 18:47

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

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

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

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

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

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

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

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

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

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

13
27.01.2020, 19:33

Я хотел бы к предложению второго Shadur, необходимо сделать руки грязными Linux С нуля путь.
Кроме того, что-то подобное, попробуйте Карман Linux.

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

3
27.01.2020, 19:33
  • 1
    Хотя примечание, что никто в их правильном уме не рекомендует/either/LFS или PocketLinux ни для какого вида важной производственной задачи - они хороши для изучения, как материал работает, но существует причина, большинство дистрибутивов идет с полным набором инструментов и frontends для большей части материала. –  Shadur 21.07.2011, 17:30

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

Для того, чтобы стать "init" процессом (не обязательно называемым init, но запускаемым ядром как процесс 1, и автоматическим родителем любых процессов) - если только ядро не было модифицировано (а не просто настроено), чтобы этого не требовалось.

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

3
27.01.2020, 19:33

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

Абсолютный минимум система запускает одну программу / init , как я объяснил в Одно приложение Linux | Суперпользователь

Minimal Linux Live

https://github.com/ivandavidov/minimal

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

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

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

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

См. Также

5
27.01.2020, 19:33

Теги

Похожие вопросы