systemdjournalctl: consultar o diário do systemdudevO SUSE® Linux Enterprise Desktop está disponível para plataformas de 64 bits. Isso não significa necessariamente que todos os aplicativos incluídos tenham sido transpostos para plataformas de 64 bits. O SUSE Linux Enterprise Desktop suporta o uso de aplicativos de 32 bits em um ambiente de sistema de 64 bits. Este capítulo apresenta uma breve visão geral de como este suporte é implementado em plataformas de 64 bits do SUSE Linux Enterprise Desktop. Ele explica como aplicativos de 32 bits são executados (suporte do tempo de execução) e como aplicativos de 32 bits devem ser compilados para que possam ser executados em ambientes de sistema de 32 bits e 64 bits. Além disso, você encontrará informações sobre a API do kernel e uma explicação sobre como os aplicativos de 32 bits podem ser executados em um kernel de 64 bits.
O SUSE Linux Enterprise Desktop para as plataformas de 64 bits amd64 e Intel 64 foi desenvolvido para que os aplicativos de 32 bits existentes sejam executados no ambiente de 64 bits “out-of-the-box.” Este suporte significa que você pode continuar a usar os aplicativos de 32 bits de sua preferência sem esperar que uma porta de 64 bits correspondente se torne disponível.
Se um aplicativo estiver disponível para ambientes de 32 bits e de 64 bits, a instalação paralela das duas versões provavelmente resultará em problemas. Em tais casos, opte pela instalação e pelo uso de uma das duas versões.
Uma exceção a essa regra é o PAM (módulo de autenticação conectável). O SUSE Linux Enterprise Desktop usa o PAM no processo de autenticação como uma camada mediadora entre o usuário e o aplicativo. Em um sistema operacional de 64 bits que também executa aplicativos de 32 bits, é necessário sempre instalar as duas versões de um módulo PAM.
Para que os aplicativos sejam executados corretamente, cada um deles requer uma variedade de bibliotecas. Infelizmente, os nomes das versões de 32 bits e 64 bits das bibliotecas são idênticos. Eles devem ser diferenciados uns dos outros de outra forma.
Para obter compatibilidade com a versão de 32 bits, as bibliotecas são armazenadas no mesmo local no sistema e no ambiente de 32 bits. A versão de 32 bits de libc.so.6 está localizada em /lib/libc.so.6 nos ambientes de 32 bits e 64 bits.
Todos os arquivos de objetos e todas as bibliotecas de 64 bits estão localizados em diretórios denominados lib64. Os arquivos de objeto de 64 bits, que normalmente são encontrados em /lib e em /usr/lib, agora estão em /lib64 e em /usr/lib64. Isso significa que há espaço para as bibliotecas de 32 bits em /lib e em /usr/lib, permitindo que o nome de arquivo de ambas as versões permaneça inalterado.
Os subdiretórios dos diretórios /lib de 32 bits com conteúdo de dados que não depende do tamanho do texto não são movidos. Este esquema está em conformidade com a LSB (Linux Standards Base — Base de Padrões Linux) e com o FHS (File System Hierarchy Standard — Padrão de Hierarquia de Sistema de Arquivos).
Uma cadeia de ferramentas de desenvolvimento biarch permite a geração de objetos de 32 bits e 64 bits. O padrão é compilar objetos de 64 bits. É possível gerar objetos de 32 bits usando sinalizadores especiais. Para GCC, o sinalizador especial é -m32.
Todos os arquivos de cabeçalho devem ser escritos em um formato independente de arquitetura. As bibliotecas de 32 bits e 64 bits instaladas devem ter uma API (application programming interface — interface de programação de aplicativo) que corresponda aos arquivos de cabeçalho instalados. O ambiente normal do SUSE Linux Enterprise Desktop foi desenvolvido de acordo com este princípio. No caso de bibliotecas atualizadas manualmente, solucione esses problemas por conta própria.
Para desenvolver binários para outra arquitetura em uma arquitetura biarch, as respectivas bibliotecas da segunda arquitetura devem ser instaladas adicionalmente. Esses pacotes são chamados de rpmname-32bit. Você também precisará dos respectivos cabeçalhos e bibliotecas dos pacotes rpmname-devel e das bibliotecas de desenvolvimento para a segunda arquitetura de rpmname-devel-32bit.
A maioria dos programas de código-fonte aberto usa uma configuração de programa baseada em autoconf. Para usar o autoconf com o objetivo de configurar um programa para a segunda arquitetura, sobregrave as configurações do compilador normal e do linker de autoconf executando o script configure com variáveis de ambiente adicionais.
O exemplo a seguir refere-se a um sistema x86_64 com x86 como a segunda arquitetura.
Use o compilador de 32 bits:
CC="gcc -m32"
Instrua o linker a processar objetos de 32 bits (use sempre gcc como o front end do linker):
LD="gcc -m32"
Defina o assembler para gerar objetos de 32 bits:
AS="gcc -c -m32"
Especifique flags do linker, como o local das bibliotecas de 32 bits, por exemplo:
LDFLAGS="-L/usr/lib"
Especifique o local das bibliotecas de código objeto de 32 bits:
--libdir=/usr/lib
Especifique o local das bibliotecas X de 32 bits:
--x-libraries=/usr/lib
Nem todas essas variáveis são necessárias para todos os programas. Adapte-as para o respectivo programa.
CC="gcc -m32" LDFLAGS="-L/usr/lib;" ./configure --prefix=/usr --libdir=/usr/lib --x-libraries=/usr/lib make make install
Os kernels de 64 bits para o x86_64 oferecem uma ABI (interface binária de aplicativo) para kernel de 64 bits e de 32 bits. A de 64 bits é idêntica à ABI do kernel de 32 bits correspondente. Isso significa que o aplicativo de 32 bits pode se comunicar com o kernel de 64 bits da mesma forma que com o kernel de 32 bits.
A emulação de 32 bits de chamadas do sistema para um kernel de 64 bits não suporta todas as APIs usadas pelos programas do sistema. Isso depende da plataforma. Por isso, alguns poucos aplicativos, como o lspci, precisam ser compilados..
Um kernel de 64 bits só pode carregar módulos de kernel de 64 bits especificamente compilados para esse kernel. Não é possível usar módulos de kernel de 32 bits.
Alguns aplicativos requerem módulos separados carregáveis pelo kernel. Se você pretende usar um aplicativo de 32 bits desse tipo em um ambiente de sistema de 64 bits, entre em contato com o provedor do aplicativo e do SUSE para verificar se a versão de 64 bits do módulo carregável pelo kernel e a versão compilada de 32 bits da API do kernel estão disponíveis para esse módulo.