Estou tentando atualizar o software em um computador muito antigo: um Pentium MMX com 16 megabytes de RAM. Atualmente, ele está executando um kernel 2.4.37.11.
Eu configurei um kernel 4.14 não modular mínimo que faz tudo o que o kernel 2.4 faz e tentei inicializar a partir dele. A inicialização usando o LILO produz a seguinte saída:
boot: gentoo-4.14.3
Loading gentoo-4.14.3.................................
BIOS data check successful
Nesse ponto, a tela pisca brevemente e o sistema congela.
Se eu adicionar mais 32 MB de RAM de outro sistema, o kernel 4.14 inicializa bem e free
mostra o kernel usando um pouco mais de 4 MB de RAM. O kernel requer uma certa quantidade mínima de RAM durante a inicialização?
Os kernels recentes não têm um requisito mínimo de memória (ou se o fizerem, é bem menos de 16 MB). O que eles têm é um endereço de memória mínimo .
Durante a maior parte da história inicial do kernel, o kernel x86 padronizou o carregamento no endereço de memória física 0x100000, logo acima do primeiro megabyte de RAM especialmente tratado. Começando com a série 2.6, a capacidade de definir um endereço de carregamento diferente foi adicionada com o
CONFIG_PHYSICAL_START
símbolo de configuração e, com 2.6.31, o padrão foi alterado para a marca de 16 MB para contornar vários problemas de hardware.Portanto, a falha ocorre porque o sistema tenta carregar o kernel no endereço físico 0x1000000, que está logo além do topo da memória. Como você pode imaginar, isso não funciona bem. A correção, dependendo da versão do kernel, é alterar
CONFIG_PHYSICAL_START
(chamado "Endereço físico onde o kernel é carregado" no menu de configuração) ou relacionadoCONFIG_PHYSICAL_ALIGN
(chamado "Valor de alinhamento ao qual o kernel deve ser alinhado").