Por que o kernel não pode fazer o trabalho initrd / initramfs em si? [fechadas]

2

Atualmente estou aprendendo sobre o processo de inicialização do linux. Aqui eu notei que o initrd criará um sistema de arquivos raiz temporário que inclui drivers (LVM, NFS, etc) que são requeridos pelo kernel.Depois que o kernel fará uso daqueles drivers e ele montará o sistema de arquivos raiz real.

Aqui minha pergunta é por que o próprio kernel não deve incluir os drivers necessários dentro dele e por que isso depende do initrd?

    
por Abdulvakaf K 08.05.2018 / 08:21

2 respostas

3

Veja também as respostas sobre estas questões:

1. Por que não o kernel em si deve incluir os drivers necessários dentro dele

Primeiramente, saiba que a memória do kernel não é paginada por demanda. Isso seria uma dependência circular. Se você distribuir seu driver de disco para o disco quando estiver com pouca memória, não será possível carregá-lo novamente mais tarde.

(E dentro do kernel do Linux, nós não tentamos definir uma camada superior que não está envolvida no caminho de armazenamento e pode ser paginada com segurança. Supostamente isso é possível: o Windows fez isso. Eu não sei o que esta camada superior supostamente deveria ser. Talvez seja definida dinamicamente. Ou talvez o Windows tenha o luxo de não suportar idéias estranhas como swap-over-NFS).

Em vez disso, suportamos módulos de carregamento. Se não precisarmos do NFS neste computador em particular, não precisamos carregá-lo.

Em uma distribuição moderna, isso economiza na ordem de cem megabytes de RAM em geral. (Observe o espaço ocupado por /lib/modules/$VERSION/ . Observe que, nas distribuições modernas, os módulos são compactados, por exemplo, .xz files).

2. e por que isso depende do initrd

Enquanto os módulos do kernel são a razão mais óbvia para o initrd, existe um segundo aspecto.

Ele permite que o userspace construa pilhas de armazenamento arbitrariamente complexas para acessar o sistema de arquivos raiz. Por exemplo. obter um endereço IP usando DHCP, para dar suporte a NFS ou solicitar uma frase secreta de criptografia de disco.

Mais uma vez, o kernel tenta não inchar demais, por ex. com o código da interface do usuário.

O uso da memória é apenas um dos motivos. A divisão kernel / userspace está sobrecarregada com vários propósitos. Por exemplo. o kernel pode ser um projeto e trabalhar especificamente em coisas do kernel. O espaço do usuário pode ser qualquer coisa; poderia ser uma distribuição Linux "normal", ou poderia ser um projeto totalmente independente como o sistema operacional Android.

Isso é diferente de outros sistemas operacionais, por exemplo, os BSDs mantêm o kernel + núcleo userspace juntos. Isso é ilustrado pelo fato de os BSDs poderem lidar com o problema 2038 com uma única conversão do kernel e do espaço do usuário no .

>     
por 08.05.2018 / 10:06
1

Isso não acontece se você quiser incorporar os drivers dentro do kernel. Uma excelente distribuição de Linux baseada em fontes que pode ajudar com o uso de uma configuração de kernel personalizada seria Gentoo ou você pode simplesmente usar o gerenciador de pacotes de distribuições atual para adquirir o Linux Kernel Source (geralmente um pacote dev e headers) e usar o make config para percorrer o hardware necessário necessário para o sistema de destino e alterar cada valor de M para * .

Mais instruções detalhadas podem ser encontradas na documentação

    
por 08.05.2018 / 08:52