Мне просто любопытно, можно ли установить ядро Linux отдельно или вам нужно использовать один из вариантов. Если бы это было возможно, как бы вы это сделали? Мне не нужен подробный учебник. Я просто хочу знать, как это будет сделано концептуально. Я не очень хорошо разбираюсь в низкоуровневых вещах и хочу знать, как вы получаете ОС на компьютер. Я полагаю, это как-то связано с MBR.
Да, и я заметил, что многие ответы предполагают определенное распространение какого-то минимального Linux. Я должен был, вероятно, заявить, что я не собираюсь устанавливать минимальный или простой Linux. Этот вопрос чисто теоретический. Тем не менее, я действительно ценю все ответы и сразу же на них ссылаюсь, если когда-нибудь захочу установить по-настоящему персонализированный Linux.
источник
kernel
также не имел никаких базовыхbash
возможностей. Стандартный пользовательский интерфейс был предоставлен программой оболочкиCOMMAND.COM
. Самое близкое к тому, что можно было сделать с пустым ядром, делающим что-нибудь полезное, - это загрузить с помощью параметра ядраinit=/bin/bash
(при условии, что на диске есть минимальный Linux) Как ответили, если у вас есть только загрузчик и ядро, он очень быстро остановится, когда не найдетinit
.Ответы:
Технически вы можете установить только загрузчик и только ядро, но как только ядро загрузится, оно будет жаловаться на невозможность запустить «init», тогда оно просто будет сидеть, и вы ничего не сможете с ним сделать.
Кстати, это часть загрузчика, который находится в MBR. Ядро находится где-то на обычной области диска. Загрузчик настроен на то, чтобы знать, где это находится, поэтому он может загрузить ядро и выполнить его.
источник
Я не думаю, что вы точно понимаете, о чем вы спрашиваете, но вы, возможно, захотите взглянуть на проект Linux From Scratch .
источник
aptitude search '?essential'
) в Debian или Ubuntu, и поймите, что делает каждый (это чуть больше, чем минимум).Если вы спрашиваете, можете ли вы просто установить или обновить ядро «поверх» существующей системы, не устанавливая кучу других программ?
Ядро Linux - это двоичный файл, обычно именуемый
vmlinuz-x.x.x-x-name
вboot
каталоге (который обычно представляет собой отдельный небольшой раздел в начале жесткого диска), где x - это номер версии. «name» - это просто выбранное имя для ядра, которое может быть установлено во время компиляции, вы можете использовать его для определения типа машины или архитектуры, для которой ядро, или по любой другой причине.Он загружается во время загрузки с помощью загрузчика,
GRUB
который обычно вызывается загрузочным кодом в MBR, который вызывается ПЗУ BIOS. После загрузки он не «держится открытым» и не защищен специально. Таким образом, вы можете заменить этот файл другим рабочим ядром. Но,GRUB
есть классная функция, которая позволяет вам выбрать несколько ядер для загрузки. Поэтому довольно разумно добавить ваше дополнительное ядро в этот список, но сохранить оригинальное известное рабочее ядро на случай, если что-то пойдет не так.Я полагаю, что почти все дистрибутивы составляют «модульное» ядро, в котором драйверы устройств находятся в отдельных файлах. Поэтому большинству ядер нужна файловая система, содержащая драйверы, доступные для нее во время загрузки, и именно для этого нужны «initrd» (исходный RAM-диск) или «initramfs».
GRUB
загрузит ядро в определенном месте в памяти, а initrd - в другом месте и перейдет к ядру, сообщив ему, где находится initrd, начиная Linux.Драйверы также могут быть «встроены» в ядро и поэтому автоматически загружаются и становятся доступными, когда загрузчик загружает
vmlinuz
образ. Ядра, которые предназначены для работы в различных системах (например, в большинстве дистрибутивов), обычно сводят к минимуму то, что встроено в ядро, потому что доступное оборудование будет сканироваться позже в процессе загрузки, и будут загружены только модули, представляющие существующее оборудование.Есть инструменты для изменения и создания initrds. У Debian есть хорошие инструменты, и я думаю, что и другие дистрибутивы тоже.
Таким образом, если вы загружаете более новое ядро с сайта kernel.org и компилируете его для создания нового двоичного образа ядра, вам необходимо создать или обновить initrd с драйверами, которые работают с этим ядром. Старый initrd не будет работать, потому что драйверы должны совпадать с версией ядра, которое работает.
Файл initrd назван так
initrd.img-x.x.x.x-name
же, как и ядро, и может быть заменен после загрузки точно так же, как и ядро, и лучшая практика будет указывать, что вы не удаляете известный рабочий initrd, пока не узнаете, что можете успешно загрузиться в новое ядро + initrd.Я надеюсь, что это обеспечивает некоторый контекст.
Если вы ищете «чистую» установку Linux, в которой практически не установлено никаких дополнительных программ, моим любимым выбором всегда была установка
netinst
образа Debian . Практически у вас есть только самые основные инструменты, необходимые для запуска текстовой консоли из командной строки иnano
в качестве текстового редактора.источник
Один исполняемый файл rootfs
Система абсолютного минимума запускает одну
/init
программу, как я объяснил в Single Application Linux | Супер пользовательМинимальный Linux Live
https://github.com/ivandavidov/minimal
Для более интересной интерактивной системы это небольшой (в основном образовательный) скрипт, который:
Затем ISO оставляет вас в минимальной оболочке с busybox.
С QEMU вы можете легко загрузиться в систему.
Я изменил его, чтобы он мог запускаться из исходного каталога ядра: https://github.com/cirosantilli/runlinux
Использование:
и вы останетесь внутри окна QEMU с вашей новой минимальной системой. Потрясающие.
Поскольку он небольшой, это хороший вариант, чтобы прочитать исходный код и понять, что происходит.
Проверено на Ubuntu 16.04.
Buildroot
https://buildroot.org/
Большой набор скриптов Makefile, которые управляют:
Минимальный пример:
У него даже есть рецепты для сборки X11 с нуля: как установить X11 на мою собственную систему Linux Buildroot?
Профессиональные вещи.
Alpine Linux
https://github.com/gliderlabs/docker-alpine
Встроенный дистрибутив с менеджером пакетов, который предлагает предварительно скомпилированные двоичные файлы с веб-сайта.
Смотрите также
источник
Я хотел бы поддержать предложение Шадура, что вы должны испачкать руки Linux с нуля.
Также, что-то похожее, попробуйте Pocket Linux .
источник
Можно установить ядро Linux без обычных инструментов пользовательского пространства. Обычно это делается во встроенных системах, таких как маршрутизаторы. Как правило, ядро загружается из ПЗУ или флэш-памяти и настраивается для данного устройства (обычно с необходимыми драйверами, скомпилированными в ядро, а не загруженными в виде модулей).
По крайней мере, одна программа в пространстве пользователя должна существовать, чтобы стать процессом 'init' (необязательно вызываться
init
, но запускается ядром как процесс 1, и автоматическим родителем всех потерянных процессов) - если только ядро не было модифицировано (скорее чем просто настроить), чтобы не требовать этого.Конечно, нет необходимости иметь доступную оболочку, чтобы иметь работающее устройство на базе Linux, хотя это может значительно облегчить разработку!
источник
Многие дистрибутивы предоставляют «основные» установки. Это то, что вы хотите. Смотрите ubuntu-minimal, debian net-install, archlinux (по умолчанию это просто ядро).
Другие ответы полезны, если вы хотите учиться, но это не так = p
источник