Como um kernel do linux pode ser tão pequeno?

56

Um kernel 3 * estável e comum é de cerca de 70 mb agora. Mas existem pequenas distribuições linux de 30 a 10 mb com software e outras coisas que ficam prontas para uso.

Como o kernel do linux pode ser tão pequeno nessas distribuições? A remoção de apenas módulos e drivers desnecessários pode reduzir drasticamente o tamanho? O que mais é feito para reduzir o tamanho do kernel?

smoking confuso
fonte
3
Outra opção é usar otimizações de tamanho ao compilar, mas não tenho certeza do tamanho do impacto.
AndrejaKo
5
"Linus chama Linux 'inchado e enorme" theregister.co.uk/2009/09/22/linus_torvalds_linux_bloated_huge
Aki
11
@AndrejaKo - Muito. (Se você vai para o tamanho pequeno.)
Apache
19
70 MB é o tamanho da fonte. Um kernel compilado e compactado padrão tem cerca de 2 MB, módulos como 10 MB.
ott--
11
sim, de fato, seus 3,6 mb enquanto initramfs é 21mb na minha distribuição.
puzzled tux

Respostas:

37

Sim. Se você reduzi-los (compilar / criar módulos apenas o necessário), comprima o kernel (otimize o tamanho) ... isso resultará em um kernel tão pequeno. Você pode criar outros ainda menores para o sistema de destino. Como eu conheço meu PC, conheço minhas coisas. Então, eu vou compilar o que eu preciso. Como meus próprios drivers SATA, driver para USB, etc. Nada mais. Sem webcam, sem drives IDE antigos, nada.

Além disso: Os maiores que você encontra são o núcleo INTEIRO (que nunca é necessário usar). Até os de mesa contêm (na maioria das vezes, como módulos) MUITAS coisas desnecessárias. Mas os novatos esperam que todo tipo de hardware que eles plugem funcione.

(Observe que os módulos não serão carregados até que sejam necessários. Existem três estados:
[ ]- Não serão compilados, não farão parte do seu kernel.
[M]- Serão compilados como um módulo.
(Você pode modificá-lo , ou seu sistema irá carregá-lo automaticamente quando necessário.
Depende do sistema, área do usuário.)
[X]- Ele será compilado no kernel E estará presente - sempre.

Distros com kernel pequeno:

Apache
fonte
Apenas uma pequena adição - [X] significa que ele será compilado no kernel, daí a razão pela qual ele está sempre carregado.
Lawrence
"novatos esperam" falando como técnico profissional em informática e veterano em Linux há 20 anos ... Espero que as coisas funcionem também.
Cliff Armstrong
20

As primeiras distribuições Linux, como o Root-Boot de Tom , o MuLinux , o roteador Diet , o LOAF (o agora extinto) e muitas outras agora partiram, todas instalaram um sistema Linux em funcionamento em um ou dois disquetes de 1,44 MB.

O kernel do Linux cresceu, mas não esqueça que é modular, os módulos do kernel são carregados conforme necessário. Portanto, ainda é possível produzir uma distribuição Linux com uma pegada muito pequena.

Veja: Guia de Ajuste de Tamanho do Kernel - eLinux.org

Se você ler Linux_tiny.pdf , verá este

  • Histórico do kernel 0.99pl15: Slackware 1.1.2, 1994 301K
  • Fedora Core 2 1.2M
  • SuSE 9.1 1.5M
  • Configuração de teste 2.6.5-tiny1: IDE, ext2, TCP, NIC 363K
RedGrittyBrick
fonte
11

A configuração padrão do kernel está configurada para suportar o máximo de hardware possível. Um kernel sem remoção com configuração padrão resultou em um tamanho de 1897996 kB (incluindo kernel + módulos). Ao remover muitos drivers e opções desnecessários (por que eu precisaria de um módulo HP se possuo um notebook Clevo), resultou em um tamanho de 892892 kB, que é uma redução de tamanho de 53% em comparação com o kernel padrão.

Ao instalar os módulos do kernel, acrescente a INSTALL_MOD_STRIP=1opção. Isso removerá todos os símbolos de depuração e reduzirá o tamanho em 92% para mim (de 892892 kB para 69356 kB). Observe que isso afeta apenas os módulos a serem instalados e não o próprio kernel (vmlinuz):

make INSTALL_MOD_STRIP=1 modules_install

Em Documentação / 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
fonte
3
uau, 1897996 kB é quase 2 GB!
Netvope # 23/13
3

A maioria das principais distribuições configura seus kernels com o máximo suporte de hardware, para que funcione imediatamente com a maioria dos computadores e qualquer coisa que você conectar posteriormente. Eles também usam um sistema initrd que não é necessário na maioria dos casos. Também existem opções na configuração do kernel que otimizam o processo de compilação, e um método de compactação melhor (embora mais lento) também pode ser selecionado. Por fim, se você estiver olhando para o tamanho do código-fonte do kernel, lembre-se de que ele também inclui suporte para várias arquiteturas além de x86 / amd64, protocolos de rede, sistemas de arquivos e outros recursos que você provavelmente nunca usará e que pode ser desativado.

Jonathan Amend
fonte
1

É bastante simples, um sistema mínimo só precisa do bootloader + kernel, embora seja quase inútil. A maioria dos comandos usados ​​todos os dias são binários opcionais para o sistema, como sh, ls, etc. Se você estiver interessado em componentes internos, Linux From Scratch! é um bom ponto de partida.

pinxue
fonte
Observe que o Busybox cuida da maioria das coisas "cotidianas".
new123456
Não, o busybox apenas os combinou. É popular em sistemas pequenos e incorporados, mas não no caso de sistemas desktop.
pinxue