Як ядро ​​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 Мб.
ott--

1
так, дійсно, його 3,6 Мб в той час як initramfs становить 21 Мб в моєму дистрофії.
спантеличений смокінг

Відповіді:


37

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

Також: Більш великі, з якими ви стикаєтесь, - це ядро ​​ВСЕ (яке ніколи не потрібно використовувати). Навіть настільні містять (у більшості випадків, як модулі) багато непотрібних речей. Але новачки очікують, що будь-яке обладнання, до якого вони підключаються, просто працюватиме.

(Зверніть увагу , що комутаторів для послуг не будуть напиватися , поки вони не потрібні Є 3 стану :.
[ ]- Чи не компілюється, що не буде частиною вашого ядра.
[M]- Будемо скомпільована як модуль.
(Ви можете Modprobe його або ваша система автоматично завантажить її, коли це буде потрібно.
Залежить від системи, країни користувача.)
[X]- Вона буде складена в ядро ​​І буде присутня - завжди.

Дистрибутив з невеликим ядром:


Лише невелике доповнення - [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

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.

3
ух, 1897996 кБ майже 2 Гб!
netvope

3

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


1

Це досить просто, мінімальній системі просто потрібен завантажувач + ядро, хоча це майже марно. Більшість команд, що використовуються щодня, є необов'язковими бінарними для системи, наприклад, sh, ls тощо. Якщо ви зацікавлені у внутрішніх справах, Linux From Scratch! є гарною відправною точкою.


Зауважте, що Busybox піклується про більшість «повсякденних» речей.
new123456

Ні, зайнята скринька їх просто поєднала. Він популярний у невеликій та вбудованій системі, але це не стосується настільних систем.
pinxue
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.