EFISTUB (Español)

Esta traducción de
EFISTUB
fue revisada el
2018-11-27
. Si existen
cambios
puede
actualizarla
o avisar al
equipo de traducción
.
Artículos relacionados
Arch boot process (Español)
Unified Extensible Firmware Interface (Español)
El kernel de Linux admite arrancar con EFISTUB (EFI BOOT STUB). Esta característica permite que el firmware EFI cargue el kernel como un ejecutable EFI. La opción está activada de forma predeterminada en los kernels de Arch Linux o se puede activar mediante el establecimiento de la variable
CONFIG_EFI_STUB=y
en la configuración del kernel. Vea
The EFI Boot Stub
para más información.
Con EFISTUB un kernel se puede arrancar directamente por una placa base UEFI o indirectamente usando un
gestor de arranque
. Este último es recomendado si se tienen múltiples pares de kernel/initramfs y el menú de inicio UEFI de su placa base no es fácil de usar.
Prepararse para EFISTUB
Primero, debe crear una
EFI system partition (Español)
y elegir cómo se monta. Vea
EFI system partition (Español)#Montar la partición
para todas las opciones de montaje disponibles.
Sugerencia
pacman (Español)
actualizará directamente el kernel que leerá el firmware EFI si monta la partición ESP en
/boot
.
Puede mantener el kernel e initramfs fuera de la partición ESP si utiliza un gestor de arranque que tenga un controlador de sistema de archivos para la partición donde residan, por ejemplo
rEFInd
.
Arrancar EFISTUB
Nota
La ruta a initramfs para EFISTUB debe ser relativa con respecto a la raíz de la «
EFI System Partition
» y usar barras invertidas (de acuerdo con los estándares de EFI). Por ejemplo, si initramfs se encuentra en
esp
/EFI/arch/initramfs-linux.img
, la línea correspondiente a UEFI debe ser
initrd=\EFI\arch\initramfs-linux.img
. En los siguientes ejemplos asumiremos que todo está en
esp
/
.
Utilizar un gestor de arranque
Existen varios gestores de arranque UEFI que pueden proporcionar opciones adicionales o simplificar el proceso de arranque UEFI —especialmente si tiene múltiples kernels/sistemas operativos—. Vea
Arch boot process (Español)#Gestor de arranque
para más información.
Es posible lanzar un kernel EFISTUB desde el intérprete de órdenes de UEFI como si fuera una aplicación normal UEFI. En este caso, los parámetros del kernel se pasan como parámetros normales al archivo del kernel EFISTUB lanzado.
> fs0:
> \vmlinuz-linux root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 rw initrd=\initramfs-linux.img
Para evitar tener que recordar todos los parámetros del kernel una y otra vez, puede guardar la orden ejecutable como un script de intérprete de órdenes (por ejemplo, como
archlinux.nsh
) en la partición del sistema UEFI, luego ejecútelo con:
> fs0:
> archlinux
Utilizar directamente UEFI
UEFI está  diseñado para eliminar la necesidad de tener un gestor de arranque intermediario como, por ejemplo,
GRUB (Español)
. Si su placa base tiene una buena implementación UEFI, es posible incluir los parámetros del kernel dentro de una entrada de arranque UEFI para que la placa base arranque Arch directamente. Puede utilizar
efibootmgr
o UEFI Shell v2 para modificar las entradas de arranque de su placa base (para que incluya a Arch).
efibootmgr
La orden sería como sigue:
# efibootmgr --disk
/dev/sdX
--part
Y
--create --label "Arch Linux" --loader /vmlinuz-linux --unicode 'root=PARTUUID=
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
rw initrd=\initramfs-linux.img' --verbose
Donde
/dev/sdX
and
Y
se deben cambiar para reflejar el disco y la partición donde se encuentra la ESP. Cambie el parámetro
root=
para reflejar la raiz de Linux. Tenga en cuenta que el argumento
-u
/
--unicode
entre comillas es solo un ejemplo de la lista de los
parámetros del kernel
, por lo que es posible que deba agregar parámetros adicionales (por ejemplo, para
suspender en disco
o
Microcode (Español)
).
Sugerencia
Guarde la orden para crear su entrada de arranque en un script de intérprete de órdenes en algún lugar, lo que facilitará su modificación (por ejemplo, al cambiar los parámetros del kernel
Después de agregar la entrada de inicio, puede verificar que dicha entrada se añadió correctamente con:
# efibootmgr --verbose
Nota
Algunas combinaciones de kernel y
efibootmgr
podrían negarse a crear nuevas entradas de inicio. Esto podría ser debido a la falta de espacio libre en la memoria NVRAM. Podría tratar de eliminar cualquier archivo de volcado de EFI:
# rm /sys/firmware/efi/efivars/dump-*
O, como último recurso, arrancar con el parámetro del kermel
efi_no_storage_paranoia
. También puede intentar degradar su instalación de efibootmgr a la versión 0.11.0 si la tiene disponible en su memoria caché. Esta versión funciona con la versión 4.0.6 de Linux. Véase el bug de la discusión
FS#34641
para más información.
Para establecer el orden de arranque, ejecute:
# efibootmgr --bootorder
XXXX
,
XXXX
--verbose
donde
XXXX
es el número que aparece en la salida de la orden
efibootmgr
de cada entrada.
Más información sobre efibootmgr en
Unified Extensible Firmware Interface (Español)#efibootmgr
. Publicación del foro:
https://bbs.archlinux.org/viewtopic.php?pid=1090040#p1090040
.
efibootmgr con el archivo .efi
Si usa
cryptboot
AUR
y
sbupdate-git
AUR
para generar sus propias claves para
Secure Boot
y firma con ellas initramfs y el kernel, cree, luego, una imagen
.efi
de arranque,
efibootmgr
puede usarse directamente para arrancar el archivo
.efi
file:
# efibootmgr --create --disk /dev/sdX --part
partition_number
--label "
label
" --loader "EFI\
folder
\
file
.efi" --verbose
Véase
efibootmgr(8)
para obtener una explicación de las opciones.
Intérprete de órdenes de UEFI
Algunas implementaciones de UEFI hacen que sea difícil modificar la NVRAM con éxito usando efibootmgr. Si efibootmgr no puede crear una entrada con éxito, puede usar la orden
bcfg
en UEFI Shell v2 (es decir, desde la imagen iso live de Arch Linux).
Primero, averigüe el número de dispositivo donde reside la
EFI system partition (Español)
, usando:
Shell> map
En este ejemplo,
1
se utiliza como número de dispositivo. Para listar los contenidos de
EFI system partition (Español)
escriba:
Shell> ls fs1:
Para ver las entradas de arranque actuales escriba:
Shell> bcfg boot dump
Para agregar una entrada para el kernel, utilice:
Shell> bcfg boot add
N
fs1:\vmlinuz-linux "Arch Linux"
donde
N
es la ubicación donde se agregará la entrada en el menú de inicio. 0 es el primer elemento del menú. Los elementos de menú ya existentes se desplazarán en el menú sin que se descarten.
Para agregar las opciones de kernel necesarias, primero cree un archivo en la ESP:
Shell> edit fs1:\options.txt
En el archivo agregue la línea de arranque. Por ejemplo:
root=/dev/sda2 ro initrd=\initramfs-linux.img
Nota
Añada espacios adicionales al principio de la línea en el archivo. Hay una marca de demanda de bytes al principio de la línea que captará cualquier carácter que esté a su lado, lo que causará un error al iniciar.
Presione
F2
para guardar y luego
F3
para salir.
Para agregar estas opciones a su entrada anterior, haga lo siguiente:
Shell> bcfg boot -opt
N
fs1:\options.txt
Repita este proceso para cualquier entrada adicional.
Para eliminar un elemento previamente agregado, escriba:
Shell> bcfg boot rm
N
Utilizar un script startup.nsh
Algunas implementaciones de UEFI no retienen las variables de EFI entre los arranques en frío (por ejemplo,
VirtualBox (Español)
) y cualquier cosa que se haya configurado a través de la interfaz del firmware de UEFI se perderá durante el apagado.
La
UEFI Shell Specification 2.0
establece que un script llamado
startup.nsh
en la raíz de la partición de ESP siempre debe interpretarse y puede contener instrucciones arbitrarias; entre las que se puede establecer una línea de carga de arranque. Asegúrese de montar la partición ESP en
/boot
y cree un script
startup.nsh
que contenga una línea de carga de arranque del kernel. Por ejemplo:
vmlinuz-linux rw root=/dev/sdX [rootfs=myfs] [rootflags=myrootflags] \
 [kernel.flag=foo] [mymodule.flag=bar] \
 [initrd=\intel-ucode.img] initrd=\initramfs-linux.img
Este método funcionará con casi todas las versiones de firmware UEFI que pueda encontrar en hardware real, por lo que puede usarlo como último recurso.
El script debe ser una única línea larga.
Las secciones entre paréntesis son opcionales y se ofrecen solo como una guía. Los saltos de línea de estilo shell son solo para clarificación visual. Los sistemas de archivos FAT utilizan la barra invertida como separador de ruta y, en este caso, la barra diagonal inversa declara que el initramfs se encuentra en la raíz de la partición ESP. Solo se carga el microcódigo de Intel en la línea de parámetros de arranque; El microcódigo de AMD se lee del disco más tarde durante el proceso de arranque; Esto se hace automáticamente por el kernel.
Véase también
Linux Kernel Documentation on EFISTUB
Linux Kernel EFISTUB Git Commit
Rod Smith's page on EFISTUB