Estou curioso. É possível instalar um programa de 64 bits em um sistema operacional de 32 bits com um processador de 64 bits?
Estou executando o Linux em um raspberry pi 3 e tento instalar uma versão mais recente do MongoDB:
armv7l GNU/Linux
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
Respostas:
Em princípio, sim, mas o processador e o sistema operacional precisam suportá-lo.
No ARMv8, um kernel de 32 bits (Aarch32) não pode executar processos de 64 bits (Aarch64). Essa é uma limitação do processador.
Existem outros processadores que não têm essa limitação; por exemplo, é possível executar processos x86_64 em cima de um kernel x86_32 em um processador x86_64, mas poucos kernels o suportam, presumivelmente porque é de utilidade limitada (principalmente, você salva um pouco de RAM no kernel, tornando-o em 32 bits). O Linux não suporta, mas o Solaris sim.
Você pode manter seu sistema operacional de 32 bits existente se executar um kernel de 64 bits . Um kernel Linux Aarch64 pode executar processos Aarch32. O Raspbian não suporta isso imediatamente, então você precisa manter um sistema operacional de 32 bits e um sistema operacional de 64 bits. Você pode usar um como o sistema operacional principal (ou seja, aquele que executa o init e os serviços do sistema) e o outro para executar um programa específico usando o chroot. Consulte Como executo programas de 32 bits em um Debian / Ubuntu de 64 bits? para uma abordagem prática.
Observe que você precisará instalar todas as bibliotecas que o programa de 64 bits exige. Qualquer processo deve ser totalmente de 32 ou 64 bits; portanto, você não pode usar uma biblioteca de 32 bits em um executável de 64 bits.
A menos que você tenha motivos fortes para manter um sistema de 32 bits, se precisar executar um executável de 64 bits, seria mais fácil instalar um sistema de 64 bits.
Observe que a única coisa que os programas de 64 bits podem fazer, mas os programas de 32 bits não conseguem, é endereçar mais de 3 GB de memória virtual, que é de utilidade limitada em um sistema com 1 GB de RAM. Você pode obter benefícios de desempenho com registros maiores e extras, mas também perde desempenho com os acessos extras à memória.
fonte
inc
/dec
registro (0x40 .. 0x4F
). No modo longo (modo de 64 bits), o tamanho padrão do operando é 32, mas o tamanho padrão do endereço é 64.xsave
/xrstor
no modo compat também puder salvar o estado vetorial completo. Portanto, certamente não é bem suportado ou explicitamente atendido. Provavelmente, os pontos de entrada do kernel são executados no modo de 64 bits (longo) e alternam para o modo de 32 bits (compat) antes de pular para o restante do kernel. (interruptor de modo x86 só tem umfar jmp
e não afeta regs.)Em algumas arquiteturas, sim. Mas não no ARM ou no x86.
Você pode usar o QEMU para emular um sistema de 64 bits, mas não deseja.
fonte
Atualize apenas seu kernel para um de 64 bits, para que você possa executar binários de 64 bits. Essencialmente, ele executará toda a sua distribuição no modo compatível de 32 bits e seu único mongodb de 64 bits será o modo normal.
Mas não merece seu preço. Melhor mudar o seu mongodb para 32 bits. No entanto, neste caso, há uma limitação: seu banco de dados não pode ser maior que 2 GB, pois mapeia diretamente tudo na memória virtual. Se o seu banco de dados for maior, apenas a atualização do kernel permanecerá. (Obrigado @duskwuff a extensão!)
Aliás, se o seu banco de dados não quiser uma carga muito grande, ou você pode usar alguma solução de cache antes (por exemplo: outro, mas mongo de 32 bits), uma emulação de CPU pode funcionar. Para isso, inicie uma busca no Google por "qemu qemu-system-x86_64". Embora essa solução tenha provavelmente uma necessidade de trabalho inviável e possa ser considerada estranha no ambiente produtivo.
Em seu lugar, eu usaria o mongo de 32 bits, se for suficiente para o meu db, ou um kernel de 64 bits, se não for.
fonte
apt-get install mongodb:i386
ou algo parecido?Eu diria que não é impossível, mas é realmente difícil de gerenciar. Como um sistema operacional de 32 bits geralmente é empacotado com (e aceita) apenas binários e bibliotecas de 32 bits, você precisará ajustar bastante o sistema para fazê-lo funcionar com os de 64 bits.
O principal problema que você enfrentaria com um RPI3 é a falta de kernel de 64 bits (pelo menos com raspbian).
Para encurtar a história: use binários de 32 bits e você ficará bem.
EDIT:
Se você deseja usar um kernel de 64 bits, precisará instalar uma distribuição que suporte a arquitetura ARM64. Você deve dar uma olhada no ArchLinux ARM ( aqui ), mas ele não é totalmente suportado.
As informações que você está procurando estão na parte inferior da guia de instalação.
Você também pode dar uma olhada em uma porta oficial do debian , no entanto, ainda existem grandes problemas com a porta RPI3, então cabe a você decidir se vale a pena.
fonte
i386
variante, e isso inclui um kernel de 64 bits, que também permite a instalação de bibliotecas e binários de 64 bits. O suporte ao ARM no Debian não permite isso em sistemas ARM (mas você pode instalar o combinadoarm64
earmhf
, se você começar comarm64
).Eu usei um kernel de 64 bits com um sistema de 32 bits por um bom tempo (esse é o pré-requisito mínimo para executar executáveis de 64 bits nativamente, além de todas as bibliotecas de 64 bits necessárias). Eu não recomendaria. O que finalmente me fez atualizar para um sistema de 64 bits no atacado foi a constatação de que os cabeçalhos da ALSA, particularmente no que diz respeito às chamadas Midi ioctl, não eram independentes de tamanho, o que significa que as coisas compiladas no modo de 32 bits não interoperariam bem com o kernel de 64 bits.
É claro que isso pode ser considerado um bug que vale a pena consertar, mas o ritmo do desenvolvimento da ALSA está praticamente congelado e eu não podia esperar alguns anos para que o suporte à plataforma mista fosse corrigido (e de maneira compatível não-binária para não-misturados executáveis) quando o interesse em plataformas mistas está diminuindo rapidamente de qualquer maneira.
Para algumas aplicações, as coisas funcionam no modo misto (surpreendentemente, na verdade), mas se você estiver fazendo mais do que o compartilhamento básico de interface com o kernel, mesmo através de bibliotecas externas, é simplesmente super otimista.
fonte