Como o kernel é carregado?

5

Estou tentando entender o processo de inicialização do Linux e, depois de ler bastante documentação, há um ponto que ainda não consigo entender.

Então o básico é o BIOS - > MBR Grub - > Grub CONF - > Kernel ...

com um conf de grub que pode se parecer com isso

title CentOS (2.6.32-358.2.1.el6.i686)
    root (hd0,0)
    kernel /vmlinuz-2.6.32-358.2.1.el6.i686 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
    initrd /initramfs-2.6.32-358.2.1.el6.i686.img 

Portanto, com base no meu entendimento da documentação + post que li, o kernel será carregado + mount initramfs como sistema de arquivos raiz. Em seguida, o init será executado, que será responsável por fazer várias coisas para colocar o sistema em funcionamento.

Minha pergunta é: Como o Kernel é carregado?

Quero dizer, como o kernel está em /boot/vmlinuz-2.6.32-358.2.1.el6.i686 do meu dispositivo (hd0,0), o sistema de arquivos precisa ser montado de alguma forma primeiro para que possa ser acessado.

Se (o que eu suspeito) o Grub monta a partição hd0.0 ele faz primeiro um pivot_root com initramfs então outro pivot_root com a raiz real = fs especificada como parâmetro do kernel?

Qualquer explicação / links que possam me ajudar a entender um pouco melhor como tudo isso funciona em conjunto é bem-vindo,

    
por Spredzy 29.03.2013 / 13:45

2 respostas

4

O Grub tem seus próprios drivers de sistema de arquivos. Não usa o Linux. O Grub carrega o kernel e o initrd na memória de acordo com o protocolo de inicialização do kernel do Linux . Uma parte do kernel é carregada em um endereço pré-definido, e o Grub define alguns parâmetros para que o kernel saiba onde encontrar o resto.

Quando o kernel inicializa, ele monta uma partição raiz usando seus próprios drivers (que não podem ser módulos, pois não há módulos nesse ponto). A partição raiz pode ser um initrd , an initramfs , ou (na ausência de um initramfs ou initrd) o dispositivo de bloco indicado pelo argumento de linha de comando root (ou um compilado -por padrão, se não houver argumento root ).

    
por 30.03.2013 / 01:06
2

O que o grub faz é acessar /boot (somente leitura é suficiente, o grub não precisa realmente de manipulação completa do sistema de arquivos aqui) e obtém os arquivos relevantes dele. Ele carrega o kernel e o initramfs na memória, e passa o controle para o kernel recém-carregado.

O kernel recém-carregado executa o init no initramfs, que termina em pivot_root to / .

    
por 29.03.2013 / 13:59