Como definir a personalidade padrão para um kernel?

1

Estou tentando substituir um kernel de 32 bits por um de 64 bits em um sistema de 32 bits, para que eu tenha o suporte completo para 64 bits para os aplicativos que precisam dele (contanto que eles tenham as bibliotecas necessárias) ou estão estaticamente vinculados), mas mantendo o espaço de usuário de 32 bits para todos os outros. O problema é que muitos dos aplicativos de espaço do usuário de 32 bits esperam uname -m para relatar i686 , então eu preciso fazer setarch i386 antes de executar qualquer coisa, de preferência antes mesmo de init .

Eu acho que poderia fazer algo como passar init=/sbin/myinit para o kernel, onde myinit tem algo assim:

#!/bin/sh
exec setarch i386 /sbin/init

Mas eu gostaria de ter uma maneira de codificar a personalidade padrão no próprio kernel. Existe alguma opção de kernel existente para fazer isso?

    
por Ruslan 14.05.2016 / 07:25

1 resposta

2

Não existe tal opção de kernel, tanto quanto eu posso dizer. Você pode dar uma olhada na fonte do kernel se quiser; coisas relevantes para procurar são set_personality e current->personality . A bandeira que você quer é PER_LINUX32 .

Em pouco tempo de corrigir o kernel, sua solução de inicialização é provavelmente a mais simples. Isso não é realmente fora do comum; é bem parecido com o uso de um initramfs. Se você já estiver usando um initramfs, poderá colocar seu setarch lá.

    
por 14.05.2016 / 11:20