¿Cómo puede ser tan pequeño un kernel de Linux?

56

Un núcleo estable de 3 * ordinario es de aproximadamente 70 mb ahora. Pero hay pequeñas distribuciones de Linux de 30-10 mb con software y otras cosas que se ejecutan de fábrica.

¿Cómo puede ser tan pequeño el kernel de Linux en estas distribuciones? ¿Puede eliminar solo los módulos y controladores innecesarios reducir drásticamente el tamaño? ¿Qué más se hace para reducir el tamaño del núcleo?

esmoquin desconcertado
fuente
3
Otra opción es usar optimizaciones de tamaño al compilar, pero no estoy seguro de qué gran impacto puede tener eso.
AndrejaKo
55
"Linus llama a Linux 'hinchado y enorme'" theregister.co.uk/2009/09/22/linus_torvalds_linux_bloated_huge
Aki
1
@AndrejaKo - Mucho. (Si vas para el pequeño tamaño.)
Apache
19
70 MB es el tamaño de la fuente. Un núcleo estándar compilado y comprimido tiene alrededor de 2 MB, módulos como 10 MB.
ott--
1
sí, de hecho, es 3.6 mb mientras initramfs es 21mb en mi distribución
esmoquin desconcertado

Respuestas:

37

Si. Si los elimina (compila / crea módulos solo lo que necesita), comprima el núcleo (optimice para el tamaño) ... dará como resultado un núcleo tan pequeño. Puede hacer incluso más pequeños, para el sistema de destino. Como si conociera mi PC, sé mis cosas. Así que solo compilaré lo que necesito. Al igual que mis propios controladores SATA, controlador para USB, etc. Nada más. Sin cámara web, sin discos IDE antiguos, nada.

Además: los más grandes que encuentra son el núcleo ENTERO (que nunca necesita usar). Incluso los de escritorio contienen (la mayoría de las veces, como módulos) MUCHAS cosas innecesarias. Pero los novatos esperan que todo tipo de hardware que conecten simplemente funcione.

(Tenga en cuenta que los módulos no se cargarán hasta que sean necesarios. Hay 3 estados:
[ ]- No se compilará, no formará parte de su núcleo.
[M]- Se compilará como un módulo.
(Puede modificarlo) , o su sistema lo cargará automáticamente cuando sea necesario.
Depende del sistema, del país de usuario)
[X]. Se compilará en el núcleo Y estará presente, siempre.

Distros con kernel pequeño:

apache
fuente
Solo una pequeña adición: [X] significa que se compilará en el núcleo, de ahí la razón por la que siempre se carga.
Lawrence
"Los novatos esperan" hablando como un profesional de la tecnología informática y veterano de Linux de 20 años ... Espero que las cosas también funcionen.
Cliff Armstrong
20

Las primeras distribuciones de Linux, como Tom's Root-Boot , MuLinux , Diet-router , (ahora desaparecido) LOAF y muchas otras que ahora partieron, todas instalaron un sistema Linux en funcionamiento en uno o dos disquetes de 1,44 MB.

El kernel de Linux ha crecido, pero no olvide que es modular, los módulos del kernel se cargan según sea necesario. Por lo tanto, todavía es posible producir una distribución de Linux con una huella muy pequeña.

Ver: Guía de ajuste del tamaño del núcleo - eLinux.org

Si lees Linux_tiny.pdf , verás esto

  • kernel histórico 0.99pl15: Slackware 1.1.2, 1994 301K
  • Fedora Core 2 1.2M
  • SUSE 9.1 1.5M
  • 2.6.5-tiny1 configuración de prueba: IDE, ext2, TCP, NIC 363K
RedGrittyBrick
fuente
11

La configuración predeterminada del kernel está configurada para admitir la mayor cantidad de hardware posible. Un kernel no despojado con configuración predeterminada resultó en un tamaño de 1897996 kB (incluyendo kernel + módulos). Al eliminar muchos controladores y opciones innecesarios (¿por qué necesitaría un módulo HP si poseo una computadora portátil Clevo?), Resultó en un tamaño de 892892 kB, que es una reducción de tamaño del 53% en comparación con el núcleo de stock.

Al instalar los módulos del núcleo, agregue la INSTALL_MOD_STRIP=1opción. Esto eliminará todos los símbolos de depuración y reducirá el tamaño en un 92% para mí (de 892892 kB a 69356 kB). Tenga en cuenta que esto solo afectará a los módulos que se instalarán y no al núcleo (vmlinuz) en sí:

make INSTALL_MOD_STRIP=1 modules_install

De Documentation / 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
fuente
3
wow, ¡1897996 kB son casi 2GB!
netvope
3

La mayoría de las principales distribuciones configuran sus núcleos con el máximo soporte de hardware para que funcione de inmediato con la mayoría de las computadoras y cualquier cosa que conecte más adelante. También usan un sistema initrd que no es necesario en la mayoría de los casos. También hay opciones en la configuración del núcleo que hacen que el proceso de compilación se optimice para el tamaño, y también se puede seleccionar un método de compresión mejor (aunque más lento). Por último, si está mirando el tamaño del código fuente del núcleo, tenga en cuenta que también incluye soporte para varias arquitecturas más allá de x86 / amd64, protocolos de red, sistemas de archivos y otras características que probablemente nunca usará y que pueden estar deshabilitado

Jonathan Enmienda
fuente
1

Es bastante simple, un sistema mínimo solo necesita bootloader + kernel aunque es casi inútil. La mayoría de los comandos que se usan todos los días son binarios opcionales para el sistema, como sh, ls, etc. Si está interesado en componentes internos, Linux From Scratch! Es un buen punto de partida.

pinxue
fuente
Tenga en cuenta que Busybox se encarga de la mayoría de las cosas "cotidianas".
nuevo123456
No, busybox solo los combinó. Es popular en sistemas pequeños e integrados, pero no en el caso del sistema de escritorio.
pinxue