Linux x86_64Sistema & diversos#246
kexec_load
Carrega uma imagem de kernel na memória para ser executada imediatamente via kexec, pulando o firmware/bootloader.
Descrição
Permite 'reiniciar' diretamente para um novo kernel sem passar pelo POST da BIOS/UEFI — usado para boot rápido e para capturar dumps de crash (kdump) usando um segundo kernel dedicado.
Header:
linux/kexec.hman 2Nota
Exige CAP_SYS_BOOT; frequentemente restrita ainda mais por 'kernel lockdown' em sistemas com Secure Boot.
Assinatura
long kexec_load(
unsigned long entry,
unsigned long nr_segments,
struct kexec_segment * segments,
unsigned long flags
);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| entry | unsigned long | Endereço de entrada do novo kernel. |
| nr_segments | unsigned long | Número de segmentos de memória em `segments`. |
| segments | struct kexec_segment * | Descreve onde cada parte da imagem do kernel deve ser carregada. |
| flags | unsigned long | KEXEC_ON_CRASH, KEXEC_PRESERVE_CONTEXT, etc. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | entryunsigned long |
| rsi | argumento 2 | nr_segmentsunsigned long |
| rdx | argumento 3 | segmentsstruct kexec_segment * |
| r10 | argumento 4 | flagsunsigned long |
Valor de retorno
0 em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EBUSY(16)
- Dispositivo ou recurso ocupado.
- EINVAL(22)
- Argumento inválido.
- ENOMEM(12)
- Memória insuficiente para completar a operação.
- EPERM(1)
- Operação não permitida (falta de privilégio).