Modo Real e carregando o kernel do linux confuso

4

Até onde eu sei, o modo protegido será ativado no kernel e nos estágios do grub ainda é o modo real. Meu mal-entendido é: No modo real, a memória total disponível para uso é inferior a 1MB, mas como o grub pode carregar o kernel e até o sistema de arquivos raiz (geralmente maior que 1MB) para a memória?

    
por Bình Nguyên 14.05.2013 / 06:50

2 respostas

5

O GRUB não precisa carregar todo o kernel na memória. A imagem do kernel é dividida em duas partes:

  • O código do kernel em modo real, que é pequeno e pode ser carregado dentro do limite de 640kB de memória disponível;
  • O restante do kernel, que é executado no modo protegido e é carregado após o primeiro megabyte de memória.

O carregador de inicialização só carrega o código do kernel em modo real, que por sua vez inicializa o restante (veja go_to_protected_mode() in arch/x86/boot/pm.c ). É assim que o processo pode ficar dentro das limitações de memória da execução em modo real.

Uma pequena nota: o GRUB pode ser executado em ambos modo real e modo protegido, dependendo do que está fazendo. Pode mudar para o modo protegido para algumas coisas (alguma detecção de hardware e exibição de menu). Você está certo, no entanto, em pensar que está no modo real quando atinge o kernel.

    
por 14.05.2013 / 07:02
0

Pode ser feito em modo real por meio da função BIOS int 0x15, 0x87. O GDT deve ser preenchido adequadamente para a origem e o destino. cx - número de bytes para mover.

    push edx
    push es
    xor  ax, ax
    mov  es, ax
    mov  ah, 0x87
    mov  si, gdt
    int  0x15
    jc   error
    pop  es
    pop  edx
    ret

gdt:
    times   16  db  0
    dw  0xffff              ; segment limit
.src:
    dw  0
    db  2
    db  0x93                ; data access rights
    dw  0
    dw  0xffff              ; segment limit
.dest:
    dw  0
    db  0x10                ; load protected-mode kernel to 100000h
    db  0x93                ; data access rights
    dw  0
    times   16  db  0

 error:
    
por 12.08.2015 / 14:39