AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 432747
Accepted
Joe C
Joe C
Asked: 2018-03-22 23:27:22 +0800 CST2018-03-22 23:27:22 +0800 CST 2018-03-22 23:27:22 +0800 CST

Como criar stubs de inicialização UEFI arbitrários?

  • 772

Instalei o TinyCore como meu sistema operacional de manutenção. Eu dei aquele GRUB2. Mas as instruções de instalação do TinyCore dizem para você adicionar o GRUB2 usando o método MBR. (Funciona, mas é só porque o EFI é compatível com versões anteriores do MBR.) Idealmente, eu gostaria de encadeá-lo para que os vetores de stub de inicialização EFI para /boot/grub do TinyCore, para que a partir do GRUB2 do TinyCore eu possa inicializar qualquer outro sistema operacional que eu querer. Ou segunda escolha, gostaria de encadeá-lo para que os vetores de stub de inicialização EFI para vmlinuz do TinyCore.

TinyCore não tem efibootmgr. O efibootmgr está me dando o "sistema não suporta efivars" quando inicializo a partir de um stick USB do Ubuntu.

Existe uma maneira de pegar o diretório grub do TinyCore, trazê-lo para alguma outra máquina Linux e criar um grub.efi a partir dele que eu possa trazer de volta para esta máquina e copiar para o meu ESP nesta máquina?

grub2 uefi
  • 2 2 respostas
  • 2084 Views

2 respostas

  • Voted
  1. telcoM
    2018-03-23T01:42:49+08:002018-03-23T01:42:49+08:00

    O efibootmgr está me dando o "sistema não suporta efivars" quando inicializo a partir de um stick USB do Ubuntu.

    Isso acontece porque você está inicializando a partir do stick USB usando o estilo legado do BIOS, então o módulo de suporte de compatibilidade do UEFI desabilitará a interface de tempo de execução do UEFI que seria usada para acessar as variáveis ​​de inicialização. Se você puder inicializar o stick USB no modo UEFI nativo, efibootmgrfuncionará. Se as configurações de inicialização do firmware incluírem uma escolha se os métodos de inicialização UEFI ou herdados são tentados primeiro, tente alternar para o modo "UEFI primeiro" durante a inicialização a partir do stick.

    Com um MBR GRUB2 herdado, você só pode inicializar sistemas operacionais inicializáveis ​​com o estilo MBR legado. Para se conectar a um sistema operacional que foi instalado para inicializar usando o UEFI nativo, você precisará de uma versão UEFI do GRUB2.

    O problema em transplantar um UEFI GRUB de uma distribuição para outra é que distribuições diferentes o configuram de maneiras ligeiramente diferentes: por exemplo, o Debian costumava plantar um mínimo grub.efipara ESP com instruções incorporadas para ler mais módulos GRUB e o arquivo de configuração de outro sistema de arquivos especificado no momento da instalação do GRUB (normalmente o sistema de arquivos que contém o /bootdiretório).

    O problema com essa abordagem é que o Secure Boot torna isso impossível se ativado: todo código executável carregado deve ser assinado e, como os módulos GRUB não estão usando o mesmo formato de arquivo binário que os binários UEFI padrão, eles não podem ser assinados de maneira que ser reconhecível como tal para o firmware UEFI.

    As distribuições derivadas do RedHat, por outro lado, tendem a incorporar todos os módulos GRUB necessários no grubx64.efibinário principal, que pode então ser carregado com sucesso em uma operação pelo Secure Boot shim.efi. O arquivo de configuração do GRUB também é colocado no sistema de arquivos ESP, normalmente refletindo a nomenclatura do binário UEFI GRUB principal, ou seja, se o binário for renomeado para foo.efiele, ele procurará foo.cfgno mesmo diretório.

    Sabendo disso, você pode apenas garantir que o Secure Boot esteja desabilitado, pegue o grub.efibinário de uma mídia de instalação RedHat/CentOS/Fedora, escreva um arquivo de configuração mínimo manualmente, coloque-os em seu ESP (talvez como \EFI\boot\bootx64.efie \EFI\boot\bootx64.cfg, então UEFI deve pegá-los automaticamente sem necessidade de variáveis ​​UEFI) e inicialize uma vez. Então você pode ver se o arquivo de configuração do GRUB gerado pelo gerador de configuração GRUB nativo do TinyCore é compatível com essa versão do GRUB e substituir o arquivo de configuração simplificado por um real ou substituir a versão transplantada do GRUB pela versão preferida do TinyCore do UEFI GRUB .

    Se você deseja inicializar o TinyCore vmlinuzdiretamente do firmware UEFI, o kernel precisa ser compilado com CONFIG_EFI_STUB=y, e então você precisará descobrir o que fazer com os parâmetros de inicialização e o arquivo initramfs. Fiz essa configuração uma vez, configurando as opções de inicialização na variável de inicialização UEFI. Sem um gerenciador de inicialização, você provavelmente não terá como alterar os parâmetros de inicialização no momento da inicialização; portanto, é melhor gerar várias configurações de variáveis ​​de inicialização UEFI com antecedência com diferentes parâmetros de inicialização, para que você tenha uma maneira de acessar o sistema se algo der errado com uma atualização do kernel, por exemplo.

    (Se as opções de inicialização UEFI no nível do firmware incluírem uma maneira de inicializar no UEFI Shell, pode ser muito útil definir uma instalação inicializável UEFI "sem bootloader".)

    Os UUIDs usados ​​nas variáveis ​​de inicialização UEFI podem ser descobertos executando o blkidcomando. GRUB usa o UUID do sistema de arquivos (= o UUID=campo), enquanto as variáveis ​​de inicialização UEFI usam o UUID exclusivo da partição (= o PARTUUID=campo).

    • 3
  2. Best Answer
    Joe C
    2018-04-08T08:42:37+08:002018-04-08T08:42:37+08:00

    Aqui está como eu fiz isso. Primeiro, defino as opções EFI do meu PC apenas para inicialização EFI. Então eu inicializei o Ubuntu 16.04.4 de um DVD. (Obviamente, foi uma inicialização UEFI.). Dentro do Ubuntu 16.04.4 fiz o seguinte.

    1. Montei minha partição ESP. (Era a partição 1 do disco 1)
    2. mkdir /caminho/para/montado/esp/partição/EFI/prime_boot
    3. Instale o grub-efi-amd64 com: sudo apt-get install grub-efi-amd64
    4. grub-mkimage -o /path/to/mounted/esp/partition/EFI/prime_boot/bootx64.efi --format=x86_64-efi '--prefix=(hd0,gpt1)/EFI/prime_boot' ext2 part_gpt
    5. Configure o seguinte arquivo grub.cfg em /path/to/mounted/esp/partition/EFI/prime_boot/

      menuentry "GRUB chainloader" { chainloader (hd0,gpt2)/boot/efi/core.efi }

    6. Copie o diretório /usr/lib/grub/x86_64-efi para /path/to/mounted/esp/partition/EFI/prime_boot/.

    7. efibootmgr -c -d /dev/sda -p 1 -l \EFI\prime_boot\bootx64.efi -L "Primary Loader"
    8. Configure a ordem de inicialização nos menus EFI para usar o "Primary Loader"

    Sim, você tem que escapar do '\' no comando 'efibootmgr'. Agora você tem o EFI usando este carregador primário para vetorizar para o carregador de inicialização na partição TinyCore. Então agora você configura o gerenciador de inicialização da partição TinyCore.

    1. Monte a partição TinyCore. (O meu era a partição 2 do disco 1)
    2. grub-mkimage -o /path/to/mounted/tinycore/partition/boot/efi/corex64.efi --format=x86_64-efi '--prefix=(hd0,gpt2)/boot/efi' ext2 part_gpt
    3. Agora crie o multi-boot grub.cfg em /path/to/mounted/tinycore/partition/boot/efi/

    Eu sei que alguém poderia se perguntar por que pulo do carregador de inicialização primário para o carregador de inicialização múltipla. Eu só quero fazer o mínimo possível na minha partição esp. Quero que o TinyCore (meu sistema operacional de manutenção) seja o proprietário do gerenciador de inicialização de inicialização múltipla.

    • 0

relate perguntas

  • Não é possível inicializar o USB de inicialização múltipla ao vivo do Linux em UEFI

  • grub2-mkconfig não está gerando caminhos de montagem corretos (e também como faço para me livrar de kernels extras que não uso mais?)

  • Como encontrar o logon do kernel panic no debian

  • Ctrl + C não funciona no modo de usuário único no Linux

  • Configuração do GRUB para reconhecer diferentes ambientes de desktop (instalações) da mesma distribuição Linux

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve