LINUX.ORG.RU

Сборка glibc с опцией версии ядра

 , ,


0

2

В соответствии с документацией,

‘--enable-kernel=version’
This option is currently only useful on GNU/Linux systems. The version parameter should have the form X.Y.Z and describes the smallest version of the Linux kernel the generated library is expected to support. The higher the version number is, the less compatibility code is added, and the faster the code gets.

Делаю

$ ../glibc-2.22/configure --prefix=/usr --libexecdir=/usr/lib --enable-kernel=2.2.26
Всё собирается без ошибок. Иду проверять через таким вот хитрым способом:
#include <stdio.h>
#include <gnu/libc-version.h>
int main () {
puts (gnu_get_libc_version ());
return 0;}
Компилирую статически, с явным указанием новой библиотеки:
$ gcc -static version.c -o version /home/alex/src/glibc-build/libc.a
2.22. Соберём без указания библиотеки, и получим родную версию:
$ gcc -static version.c -o version
2.13. То есть сама библиотека цепляется.
Но при запуске на старой машине (версия ядра=2.2.26) хеллоуворлда, собранного с glibc 2.22, я получаю ошибку:
FATAL: kernel too old
Что я делаю не так? Особенно смущает, что при сборке glibc никаких ворнингов нет.



Последнее исправление: hdclnr (всего исправлений: 1)

насколько я понимаю, gnu_get_libc_version проверяет версию Glibc, а не ядра, для которого она собрана.

2.22 (а не 2.2.26, как задумано).

ну так ты и собираешь 2.22:

../glibc-2.22

Lincor
()

Мне кажется, ты путаешь теплое с мягким. Как версия ядра относиться к версии glibc ? Судя по твоему коду, все работает так как нужно.

joy4eg ★★★★★
()

--enable-kernel=2.2.26 это ведь версия поддерживаемого ядра linux. а gnu_get_libc_version() это версия самой glibc.

omnomnomnus
()
Ответ на: комментарий от joy4eg

Изначальная задумка была пересобрать glibc с поддержкой ядра 2.2.26, чтобы запускать на 486 компьютере (который я уже искал тут).
Сейчас при компиляции с glibc 2.22 и запуске на старой машине (версия ядра=2.2.26) я получаю ошибку:

FATAL: kernel too old
То есть glibc собрана без поддержки этой версии.
ОП-пост написал как-то сумбурно, только сейчас понял. Сорри.

hdclnr
() автор топика
Ответ на: комментарий от Lincor

Да, некорректно написал сначала.

hdclnr
() автор топика

А ты уверен, что указанная версия поддерживается вообще в принципе?

anonymous
()
Ответ на: комментарий от anonymous

Такое возможно? Честно говоря, не смотрел

anonymous
()

Что я делаю не так?

Собираешь свежий glibc для ядра 2.2.

When working with Linux kernels, this version of the GNU C Library requires Linux kernel version 2.6.32 or later.

чтобы запускать на 486 компьютере

И зачем тебе такое древнее ведро? 2.6.18-4хх или 2.6.32-5хх не устраивают?

devl547 ★★★★★
()
Последнее исправление: devl547 (всего исправлений: 1)

Цитирую файл sysdeps/unix/sysv/linux/configure, начиная с 85-ой строчки:

test -n "$arch_minimum_kernel" || arch_minimum_kernel=2.6.32
if test -n "$minimum_kernel"; then

  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/'`))

  if test $user_version -lt $arch_version; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: minimum kernel version reset to $arch_minimum_kernel" >&5
  $as_echo "$as_me: WARNING: minimum kernel version reset to $arch_minimum_kernel" >&2;}
    minimum_kernel=$arch_minimum_kernel
  fi
else
  minimum_kernel=$arch_minimum_kernel
fi

buddhist ★★★★★
()
Ответ на: комментарий от devl547

Собираешь свежий glibc для ядра 2.2.

Единственное для чего я пересобирал - это опция "--enable-kernel=version", которая и не сработала.

И зачем тебе такое древнее ведро? 2.6.18-4хх или 2.6.32-5хх не устраивают?

На той 486 машине есть только флоп. С его помощью я установил BasicLinux (http://distro.ibiblio.org/baslinux/). Не представляю, как ставить ядро новее, имея в распоряжении только 1.44Мб дискеты.

anonymous
()
Ответ на: комментарий от devl547

Нет. Видимо один способ - собирать тулчейн?

anonymous
()

вангую, что смысл сабжевой опции в поддержке фич новых версий ядра, а вовсе не совместимость с устаревшими

annulen ★★★★★
()

Просто используй самое последнее ядро. Удаляли поддержку 386, не 486.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.