Как ядро ​​Linux может быть таким маленьким?

56

Обычное стабильное 3 * ядро ​​сейчас около 70 мб. Но есть небольшие дистрибутивы Linux размером 30-10 Мб с программным обеспечением и другими вещами из коробки.

Как ядро ​​Linux может быть таким маленьким в этих дистрибутивах? Может ли разборка только ненужных модулей и драйверов резко уменьшить размер? Что еще делается для уменьшения размера ядра?

озадаченный смокинг
источник
3
Другой вариант - использовать оптимизацию размера при компиляции, но я не уверен, насколько это может повлиять.
AndrejaKo
5
«Линус называет Linux« раздутым и огромным »» theregister.co.uk/2009/09/22/linus_torvalds_linux_bloated_huge
Aki
1
@AndrejaKo - много. (Если вы идете для небольшого размера.)
Apache
19
70 МБ - это размер источника. Стандартное скомпилированное и сжатое ядро ​​- около 2 МБ, модули - 10 МБ.
ot--
1
да, действительно, его 3,6 МБ, в то время как initramfs составляет 21 МБ в моем дистрибутиве.
озадаченный смокинг

Ответы:

37

Да. Если вы удалите их (скомпилируйте / сделайте модули только теми вещами, которые вам нужны), сожмите ядро ​​(оптимизируйте по размеру) ... это приведет к такому маленькому ядру. Вы можете сделать еще меньше, для целевой системы. Как будто я знаю свой компьютер, я знаю свои вещи. Так что я просто скомпилирую то, что мне нужно. Как и мои собственные драйверы SATA, драйвер для USB и т. Д. Ничего другого. Нет веб-камеры, нет старых дисков IDE, ничего.

Также: чем больше вы встречаете, так это ЦЕЛЫМ ядром (которое никогда не нужно использовать). Даже настольные компьютеры содержат (в большинстве случаев в виде модулей) МНОГО ненужного. Но новички ожидают, что все виды подключаемого оборудования будут работать.

(Обратите внимание, что модули не будут загружаться до тех пор, пока они не потребуются. Существует 3 состояния:
[ ]- не будет скомпилировано, не будет частью вашего ядра.
[M]- будет скомпилировано как модуль.
(Вы можете проверить его , или ваша система автоматически загрузит его, когда это необходимо.
Зависит от системы, пользовательской области.)
[X]- Он будет скомпилирован в ядро ​​И будет присутствовать - всегда.

Distros с небольшим ядром:

апаш
источник
Просто небольшое добавление - [X] означает, что оно будет скомпилировано в ядро, и поэтому оно всегда загружается.
Лоуренс
«новички ожидают», выступая в качестве профессионального компьютерного специалиста и ветеран Linux 20 лет ... Я ожидаю, что вещи тоже будут работать.
Клифф Армстронг
20

Ранние дистрибутивы Linux, такие как Tom's Root-Boot , MuLinux , Diet-router , (ныне несуществующий) LOAF и многие другие, уже вышедшие из эксплуатации, все устанавливали работающую систему Linux на одну или две 1,44 МБ дискеты.

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

Смотрите: Руководство по настройке размера ядра - eLinux.org

Если вы прочитаете Linux_tiny.pdf, вы увидите это

  • историческое ядро ​​0.99pl15: Slackware 1.1.2, 1994 301K
  • Fedora Core 2 1.2M
  • SuSE 9.1 1.5M
  • Тестовая конфигурация 2.6.5-tiny1: IDE, ext2, TCP, NIC 363K
RedGrittyBrick
источник
11

Конфигурация ядра по умолчанию настроена для поддержки как можно большего количества оборудования. Ядро без разделителя с конфигурацией по умолчанию привело к размеру 1897996 КБ (включая ядро ​​+ модули). При удалении многих ненужных драйверов и опций (зачем мне нужен модуль HP, если у меня есть ноутбук Clevo), его размер составил 892892 кБ, что на 53% меньше по сравнению со стандартным ядром.

При установке модулей ядра добавьте эту INSTALL_MOD_STRIP=1опцию. Это удалит все символы отладки и уменьшит размер для меня на 92% (с 892892 кБ до 69356 кБ). Обратите внимание, что это влияет только на устанавливаемые модули, а не на само ядро ​​(vmlinuz):

make INSTALL_MOD_STRIP=1 modules_install

Из документации / kbuild / kbuild.txt :

INSTALL_MOD_STRIP
--------------------------------------------------
INSTALL_MOD_STRIP, if defined, will cause modules to be
stripped after they are installed.  If INSTALL_MOD_STRIP is '1', then
the default option --strip-debug will be used.  Otherwise,
INSTALL_MOD_STRIP value will be used as the options to the strip command.
Lekensteyn
источник
3
вау, 1897996 кб это почти 2гб!
netvope
3

Большинство крупных дистрибутивов конфигурируют свои ядра с максимальной аппаратной поддержкой, поэтому он будет работать из коробки с большинством компьютеров и всем, что вы подключите позже. Они также используют систему initrd, которая в большинстве случаев не нужна. В конфигурации ядра также есть параметры, которые оптимизируют процесс сборки под размер, и также можно выбрать лучший (хотя и более медленный) метод сжатия. Наконец, если вы смотрите на размер исходного кода ядра, имейте в виду, что он также включает поддержку нескольких архитектур помимо x86 / amd64, сетевых протоколов, файловых систем и других функций, которые вы, вероятно, никогда не будете использовать и которые могут быть отключенным.

Джонатан Аменд
источник
1

Это довольно просто, минимальная система просто нуждается в загрузчике + ядре, хотя это почти бесполезно. Большинство команд, используемых каждый день, являются необязательными двоичными для системы, такими как sh, ls и т. Д. Если вы интересуетесь внутренними компонентами, Linux From Scratch! это хорошая отправная точка.

pinxue
источник
Обратите внимание, что Busybox заботится о большинстве "повседневных" вещей.
new123456 22.12.11
Нет, busybox просто объединил их вместе. Он популярен в небольших и встроенных системах, но не в настольных системах.
Pinxue