De forma bem desleixada irei narrar minhas aventuras no meio dos códigos do kexec, o que venho aprendendo, o que acho que sei (prq sinceramente sempre surgem dúvidas), etc.
Primeiro, o que raios é o kexec?
O kexec é uma ferramenta ou antes um patch no kernel que quando utilizado pode realizar um reboot no seu kernel de forma rápida sem passar pela bios. Não é só pra isso que ele serve. Ele também server para que você execute o kdump. Na verdade o kdump é outro código, mas se você pesquisar vai entender como que os dois estão relacionados e como o kdump depende do que o kexec faz.
Tudo começa em duas partes: duas sys calls (kexec_load e kexec_reboot), a primeira é responsável por carregar o kernel passado pelo kexec -l na memória em kernel space e deixar ele pronto para o reboot. A segunda, como o nome já diz, realiza o processo de reboot, mas com um detalhe a ela é passada uma flag que determina que esse reboot não é um reboot normal, é sim um reboot kexec. (eu planejo criar alguns .svg para que isso fique mais claro, por enquanto vamos só no modo texto :P).
Em uma área reservada nos 1G de memória se encontra um código com nome sugestivo chamado purgatory (ou purgatório) que é o responsável por fazer o handle entre o kernel antigo e o novo kernel. Depois de tudo isso, o kernel novo é rebootado e txaram. Um fast reboot é realizado.
Essa foi a explicação alto nível, sem detalhes que tinha para dar. Em próximos posts pretendo desenhar mais, detalhar mais, e trazer pedaços de código.
🙂
