Adicionar opção de inicialização adicional ao Grub para extensões X32?

Adicionar opção de inicialização adicional ao Grub para extensões X32?

Eu trabalho com um projeto de código aberto/gratuito. Um mantenedor do Debian relatou uma falha no X32 (não é um erro de digitação; não é X86), e estou tentando configurar um ambiente de teste para reproduzi-lo.

De acordo com o DebianWiki das portas X32, preciso habilitar as extensões X32 no kernel. Para fazer isso, preciso adicionar a entrada Grub. Abaixo está o que eu adicionei /etc/default/grube foi retirado da página wiki (exceto que comentei a entrada padrão).

# GRUB_CMDLINE_LINUX_DEFAULT="syscall.x32=y quiet"
GRUB_CMDLINE_LINUX="syscall.x32=y"

Em seguida, executei uma update-grubverificação na página wiki e verifiquei as entradas no menu compilado (veja abaixo).

Quando inicializo o sistema, a opção não parece estar disponível no menu principal ou nas opções avançadas:

Entrada Grub ausente para X32

DebianGrub2documentos deixa muito a desejar. Ele apenas discute como colorir as entradas do menu (você não pode inventar esse tipo de coisa...).

Eu esperava o seguinte depois de seguir a prescrição fornecida pelos documentos:

  • Debian GNU/Linux
  • Debian GNU/Linux (X32)
  • Opções avançadas
  • Teste de memória (memtest86+)
  • Teste de memória (memtest86+, serial)
  • ...

Como adiciono opções de inicialização X32 ao Grub, dou a ele um nome como "Debian GNU/Linux (X32)", garanto que seja uma opção de inicialização para o kernel durante a inicialização e garanta que as alterações sobrevivam após um upgradeou dist-upgrade?


De acordo com a resposta de Marius abaixo, adicionei o seguinte /etc/grub.d/40_custom:

menuentry 'Debian GNU/Linux (X32)' --class debian --class gnu-linux --class gnu --class os
  $menuentry_id_option 'gnulinux-simple-a4af7dfc-640c-4aa8-bf0b-068af3d72b01' {
    linux/boot/vmlinuz-4.2.0-1-amd64 root=UUID=a4af7dfc-640c-4aa8-bf0b-068af3d72b01 ro syscall.x32=y quiet
}

Ele fornece a entrada nomeada conforme esperado, mas resulta em um erro de inicialização:

error: can't find command: `linux/boot/vmlinuz-4`

Acho que foi devido ao copiar/colar no Emacs (aparentemente remove espaços em branco???). Então eu mudei para linux /boot/vmlinuz-4.2.0-1-amd64.... Isso resultou em pânico no kernel:

insira a descrição da imagem aqui

Responder1

Se entendi bem, você deseja encontrar uma maneira de escolher se deseja inicializar sem ou com o X32. Você pode fazer isso de duas maneiras distintas:

  1. Conforme surgir a necessidade. Inicialização, no menu de inicialização clique eem edit, role para baixo até a linha

    linux /boot/vmlinuz-linux root=UUID=978e3e81-8048-4ae1-8a06-aa727458e8ff quiet splash
    

e modificá-lo para

  linux /boot/vmlinuz-linux root=UUID=978e3e81-8048-4ae1-8a06-aa727458e8ff syscall.x32=y quiet 

Agora continue inicializando.

  1. Sistematicamente. No diretório /etc/grub.d/existe uma entrada, 40_custom, que é usada exatamente para isso. Você deverá copiar nele uma seção do arquivo /boot/grub/grub.cfg: a parte incluída entre menuentry Debian GNU/Linux...e o final das brechas, }. Após a inclusão, modifique a linha

     linux /boot/vmlinuz-linux root=UUID=978e3e81-8048-4ae1-8a06-aa727458e8ff quiet splash
    

em

     linux /boot/vmlinuz-linux root=UUID=978e3e81-8048-4ae1-8a06-aa727458e8ff syscall.x32=y quiet

Além disso, lembre-se de alterar o nome da entrada do menu para 40_customalgo diferente da sua primeira entrada, caso contrário você não conseguirá distinguir as duas entradas.

Corra update-grube pronto.

Responder2

Se você deseja a opção apenas para o kernel mais recente no menu de nível superior, não coloque "syscall.x32=y" em /etc/default/grub. Em vez disso, encontre

linux_entry "${OS}" "${version}" simple \
"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"

e adicione /etc/grub.d/10_linuxisto depois:

linux_entry "${OS} (X32)" "${version}" simple \
"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT} syscall.x32=y"

Em seguida, execute update-grubpara atualizar /boot/grub/grub.cfgadequadamente.

Desta forma eu poderia inicializar o kernel mais recente com a opção "syscall.x32 = y", mas não noto diferença em inicializar sem ela. Isso está no Xubuntu 15.10 de 64 bits. Quanto à configuração que sobreviveu após a atualização do pacote grub, não sei; talvez a instalação detecte um arquivo de configuração personalizado e ofereça a opção de mantê-lo. Pelo menos isso sobrevive às atualizações do kernel.

Responder3

Você poderia adicionar foo=barno grub

Em uma execução de terminal:

gksudo gedit /etc/default/grub

e digite sua senha.

Encontre a linha que começa com GRUB_CMDLINE_LINUX_DEFAULT e anexe foo=bar ao final. Por exemplo:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash foo=bar"

Salve o arquivo e feche o editor.

Finalmente, inicie um terminal e execute:

sudo update-grub

para atualizar o arquivo de configuração do GRUB (provavelmente você precisará digitar sua senha).

Na próxima reinicialização, o kernel deve ser iniciado com o parâmetro de inicialização

Fonte: Fóruns Grub

informação relacionada