Eu acredito que a imagem é como na minha última edição acima; Eu simplesmente não sabia o suficiente sobre o processo de reservar memória para perceber quando fiz a pergunta: tudo se resumia ao kernel maior com mais drivers embutidos em vez de modularizados.
Incidentalmente, eu queria colocar isso em algum uso prático (remotamente): Eu queria ter um kernel tão fino quanto pudesse, mas ainda inicializá-lo sem um initrd. Eu sabia que
-
o kernel menor (moniker arch acima) é muito leve e rápido para inicializar, mas não sem um initramfs;
-
o kernel maior ( slk ) irá arrancar sem um initramfs, mas demora mais tempo.
Então eu fiz um compromisso que acho que vou continuar por agora. Peguei os dois arquivos de configuração, chamo-os de large e small e garantimos que todas as opções de configuração unset em small sejam refletidas em grande .
Primeiro,
awk '/^# CO/ {print} small > staging'
pega todas as linhas no arquivo de configuração small que estão na forma
# CONFIG_BLAH is not set
e os despeja em um arquivo de texto staging . Então,
for i in $(awk '{print $2}' staging) ; do sed -i "s/^$i=./# $i is not set/" large ; done
usa todas as linhas do arquivo de configuração large que definem (via =y
ou =m
) uma opção contida em staging e as desativa.
Em seguida, executei make oldconfig
no arquivo resultante large no diretório de origem do kernel e compilado. Tudo correu bem:
-
o novo kernel inicializa cerca de 3 segundos mais rápido
-
sem um initramfs
-
é muito menor no sentido de que seu
/lib/modules/<kernel>/modules.builtin
foi reduzido pela metade, de 16K para 8K.
Não há muito o que escrever, mas, como eu disse, isso me intrigou. Acho que estou decidido agora.
Presumivelmente, a coisa mais direta a fazer teria sido descobrir de uma vez por todas precisamente quais drivers eu preciso nesta máquina para poder inicializar sem um initramfs, mas deixarei isso para Algum outro dia. Além disso, jogar uma configuração contra a outra era um exercício divertido por si só.