Por que é que --enable-kernel = sys-libs / glibc-2.16 é ignorado no Gentoo Linux?

2

Estou tentando construir o suporte a eglibc para kernels antigos, 2.6.9 neste caso.

Por isso, defino NPTL_KERNEL_VER no make.conf e, durante a frase de configuração, posso ver o parâmetro --enable-kernel=2.6.9

Mas isso parece ser revertido:

checking installed Linux kernel header files... 2.6.19 or later
configure: WARNING: minimum kernel version reset to 2.6.16

Alguma ideia? (Estou criando =sys-libs/glibc-2.16 para i686-pc-linux-gnu .)

    
por daisy 20.01.2014 / 05:32

1 resposta

1

A primeira linha da sua mensagem não está relacionada ao seu problema e está relacionada aos requisitos de compilação da glibc (não à interface compilada), mas a segunda linha é o seu problema.

À primeira vista, você está usando a variável errada para definir sua versão mínima do kernel. Tente definir NPTL_KERN_VER no make.conf. A ebuild usa esse nome de variável e define o padrão como 2.6.16. De /usr/portage/sys-libs/glibc/glibc-2.16.0.ebuild :

NPTL_KERN_VER=${NPTL_KERN_VER:-"2.6.16"}       # min kernel version nptl requires

Esta também é a variável que é passada para configure no arquivo /usr/portage/sys-libs/glibc/files/eblits/src_compile.eblit :

myconf+=( --enable-kernel=${NPTL_KERN_VER} )

Observe que essa variável de configuração também pode ser definida para a variável LT_KER_VER if linuxthreads é a opção de threading vs nptl .

Você informa, no entanto, que está vendo --enable-kenrel=2.6.9 , o que significa que você está configurando a variável corretamente e, talvez, a desorientando em sua postagem.

Isso nos leva aos scripts de configuração e ao arquivo glibc/sysdeps/unix/sysv/linux/configure.in , onde o teste é feito para a versão mínima do kernel. O teste é:

if test -n "$minimum_kernel"; then
   changequote(,)
   user_version=$(('echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/ \* 65536 +  \    * 256 + /''))
   arch_version=$(('echo "$arch_minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/ \* 65536 +      \* 256 + /''))
   changequote([,])
   if test $user_version -lt $arch_version; then
     AC_MSG_WARN([minimum kernel version reset to $arch_minimum_kernel])
     minimum_kernel=$arch_minimum_kernel
   fi
 else
   minimum_kernel=$arch_minimum_kernel
 fi

em que $minimum_kernel é o valor fornecido para configure , por ex. 2.6.9 e $arch_minimum_kernel é 2.4.0 definiu algumas linhas acima deste snippet. O que é confuso agora é que, quando avaliado:

user_version=132617 (from 2.6.9)
arch_version=132096 (from 2.4.0)
test 132617 -lt 132096 (FALSE)

que deve resultar em minimum_kernel inalterado. Em vez disso, o que está acontecendo é que você está acionando o aviso e a versão está sendo redefinida para $arch_minimum_kernel , que é declaradamente 2.6.16 no seu caso. Não consigo encontrar uma referência a $arch_minimum_kernel sendo definido para esse valor em outro lugar no código da glibc ou no conjunto de padrões do gentoo, portanto, não tenho certeza do que está acontecendo no seu caso.

Quando executo configure manualmente com a linha de comando:

../glibc/configure --enable-kernel=2.6.9 --prefix=/usr

ele é executado com sucesso com isso na saída:

checking for kernel header at least 2.6.9... ok

Parece que algo é diferente para você e estou tentando ver se consigo encontrar um patch que possa estar aplicando um arch_minimum_kernel diferente para você ou talvez em um arquivo que ignorei.

UPDATE

Eu localizei uma possível fonte de 2.6.16 sendo sua versão mínima. Essa versão do kernel está definida como arch_minimum_kernel para a arm port no arquivo glibc-ports-2.16.0/sysdeps/unix/sysv/linux/arm/configure.in . Por favor, verifique se você não estragou o seu alvo ARCH e está de fato compilando para o i686, já que você não deveria estar vendo essa versão. Esta é a única referência à versão do kernel (2.6.16) que eu posso encontrar nos arquivos baixados pelo gentoo (glibc, glibc-ports e gentoo patches).

    
por 05.02.2014 / 05:58