Почему в Gentoo Linux игнорируется –enable-kernel = sys-libs / glibc-2.16?

Я пытаюсь построить поддержку eglibc для старых ядер, в этом случае 2.6.9.

Поэтому я установил NPTL_KERNEL_VER в make.conf, и во время фразы конфигурации я могу увидеть параметр --enable-kernel=2.6.9

Но это, похоже, вернулось:

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

Есть идеи? (Я строю =sys-libs/glibc-2.16 для i686-pc-linux-gnu .)

Первая строка вашего сообщения не связана с вашей проблемой и связана с требованиями к сборке glibc (а не скомпилированным интерфейсом), но вторая строка – ваша проблема.

На первый взгляд, вы используете неправильную переменную для установки минимальной версии ядра. Попробуйте установить NPTL_KERN_VER в make.conf. Ebuild использует это имя переменной и устанавливает значение по умолчанию 2.6.16. Из /usr/portage/sys-libs/glibc/glibc-2.16.0.ebuild :

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

Это также переменная, которая передается для configure в файле /usr/portage/sys-libs/glibc/files/eblits/src_compile.eblit :

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

Обратите внимание, что эта переменная configure также может быть установлена ​​из переменной LT_KER_VER если linuxthreads является опцией threading vs nptl .

Однако вы сообщаете, что видите --enable-kenrel=2.6.9 что подразумевает правильную настройку переменной и, возможно, неправильное ее использование в вашем сообщении.

Это приводит нас к скриптам configure и файлу glibc/sysdeps/unix/sysv/linux/configure.in где выполняется тест для минимальной версии ядра. Тест:

 if test -n "$minimum_kernel"; then changequote(,) user_version=$((`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1 \* 65536 + \2 \ * 256 + \3/'`)) arch_version=$((`echo "$arch_minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1 \* 65536 + \2 \* 256 + \3/'`)) 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 

где $minimum_kernel – это значение, предоставляемое для configure например 2.6.9 а $arch_minimum_kernel – это 2.4.0 устанавливающее несколько строк над этим фрагментом. Теперь что-то неясно, что при оценке:

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

что должно привести к minimum_kernel что minimum_kernel не minimum_kernel . Вместо этого происходит то, что вы вызываете предупреждение, и версия сбрасывается до $arch_minimum_kernel , которая, как сообщается, равна 2.6.16 в вашем случае. Я не могу найти ссылку на $arch_minimum_kernel , установленную для этого значения в другом месте в коде glibc или в наборе gentoo, поэтому я не уверен, что происходит в вашем случае.

Когда я запускаю configure вручную с помощью командной строки:

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

он успешно работает с этим в выводе:

 checking for kernel header at least 2.6.9... ok 

Кажется, что для вас что-то другое, и я ищу, чтобы узнать, могу ли я найти патч, который может использовать другой arch_minimum_kernel для вас или, возможно, в файле, который я arch_minimum_kernel .

ОБНОВИТЬ

Я нашел возможный источник 2.6.16, являющийся вашей минимальной версией. Эта версия ядра установлена ​​на arch_minimum_kernel для порта arm в файле glibc-ports-2.16.0/sysdeps/unix/sysv/linux/arm/configure.in . Убедитесь, что вы не испортили свою цель ARCH и на самом деле компилируете i686, так как вы не должны видеть эту версию. Это единственная ссылка на эту версию ядра (2.6.16), которую я могу найти в файлах, загруженных gentoo (glibc, glibc-ports и gentoo-патчах).