LINUX.ORG.RU

linux-3.10.x на 32

 , , , ,


0

2

Понадобилось мне тут на 32 собрать ядро-3.x.y в общем, получилось собрать 3.10.108 на slackware-14.2_32 (на данной версии gcc5), собирал в VBox. Но получилось не сразу, пробовал ручками собирать, так и по build-all-kernels.sh из current

config брал из 14.1 для config-x86_3.10.17 (в 14.1 - gcc4, на всякий случай информирую мало ли в этом дело), .config принимался - вопросов никаких не задавало, huge собирался, но вот когда доходило дело до config-generic-smp-3.10.17-smp > .config, то после make oldconfig (make mrproper делал перед > .config), подавал

make bzImage modules modules_install , к слову, на 64 с gcc5 до этого просто пробовал там все успешно завершалось,

# tar xvf /tmp/linux-3.10.108.tar.xz
# cd linux-3.10.108/

# cat /tmp/config-x86/config-huge-smp-3.10.17-smp > .config
# make oldconfig
# make bzImage

# make mrproper
# cat /tmp/config-x86/config-generic-smp-3.10.17-smp > .config
# make oldconfig
# make bzImage modules modules_install

а на 14.2_32_gcc5 оно постоянно завершалось с ошибкой, как на .108, так и на .107 (последнее, которое кстати в slackware-14.1/patches есть) и попробовал с build-all-kernels.sh собрать, аналогичная ошибка, а именно:

Kernel: arch/x86/boot/bzImage is ready  (#1)
  Building modules, stage 2.
  MODPOST 3328 modules
ERROR: "lguest_entry" [drivers/lguest/lg.ko] undefined!
/usr/src/linux-3.10.108/scripts/Makefile.modpost:88: recipe for target '__modpost' failed
make[1]: *** [__modpost] Error 1
Makefile:950: recipe for target 'modules' failed
make: *** [modules] Error 2
воспользовавшись google, аналогичную ошибку увидал у ребят из manjaro: [linux310] only 32bit, в ссылке есть решение, а именно в виде патча:
> lguest-asmlinkage.patch::https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/patch/drivers/lguest/x86/core.c?id=cdd77e87eae52b7251acc5990207a1c4500a84ce'
> patch -p1 -i "${srcdir}/lguest-asmlinkage.patch"
накатил этот патч на 3.10.108 только после этого модули сумел собрать

И тут вот вопрос к тем кто не раз собирал ядро, помогите пожалуйста найти или https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/patch/driv...
есть кого-нибудь какие-нибудь идеи почему данное исправление не вошло в релиз ядра на kernel.org? В ссылке же, мантейнер ядро еще на 3.10.80 собирал

★★★★★

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

-smp

-huge

Пробовал вначале собрать без?

Оно тебе надо, или собирал из первого попавшегося конфига?

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

собирал из первого попавшегося конфига?

если ты про .config, собирал просто по конфигу, который ближе всего приближен к дистру (для пробы пера) и который в репозитории был для старой версии (3.10.x) ядра

-huge -smp

ну -smp точно надо, -huge с ним проблем нет - собралось

на ```make bzImage modules modules_install``` ошибка, если без патча собирать, вылазит

NK ★★★★★
() автор топика

Не понял вопроса.
Патчем правится синтаксис в drivers/lguest/x86/core.c в ассемблерной вставке с более понятного на более рабочий, устраняя потенциальную проблему сборки на случай включенной LTO (link type optimization), снабжая линкер дополнительной необходимой информацией.

При сборке без LTO проблемы нет.

Ну и 32 бита все меньше получают внимания разработчиков...

bormant ★★★★★
()
Последнее исправление: bormant (всего исправлений: 3)
Ответ на: комментарий от bormant

спасибо

вопрос был в том почему данный патч / изменение в ядро не приехало(
вот здесь пытаюсь найти обсуждение хотя бы в трекере https://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git
почитать хотел как раз про то что вы мне написали и на будущее знать по баг-трекеру-исправлений в каком разделе искать. И конечно же выяснить:

насколько опасно, точнее что я могу потерять при данной сборке и последующей установкой для использования полученного ядра через данный патч?

NK ★★★★★
() автор топика
Последнее исправление: NK (всего исправлений: 1)
Ответ на: комментарий от NK

-huge

Оно скорее надо, чем не надо.

-smp точно надо

Окда, но попробуй собрать вначале без.

ошибка

Кинь конфиг с сорцами (и патчами, если они отдельно), я у себя попробую собрать. Если взлетит, кину тебе тарболл.

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

что я могу потерять при данной сборке и последующей установкой для использования полученного ядра через данный патч?

Ничего не потеряешь. Ну а если не будет загружаться — просто загрузишься со старого ядра (не выпиливай его, пока не убедишься, что новое работает).

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

я у себя попробую собрать

уже даже интересно стало, ладно ловите:
- .config - там с smp и без http://slackware.osuosl.org/slackware-14.1/source/k/config-x86/
- 3.10.108.tar.xz https://cdn.kernel.org/pub/linux/kernel/v3.x/linux-3.10.108.tar.xz
- ядро задумка собрать для 32 и ванильным без патчей, но что бы у i-INTEL и виделись, работали-нагружались все процессоры

пока не убедишься, что новое работает

убедился, работает

NK ★★★★★
() автор топика
Последнее исправление: NK (всего исправлений: 2)
Ответ на: комментарий от NK

потерять

Без патча будет собираться только с отключенным LTO.
С патчем будет собираться и с отключенным, и с включенным.

На функционирование кода патч не влияет вообще никак, только обслуживает проброс дополнительной информации линкеру. Там патча две строки, почему б не посмотреть их глазами и не устранить все сомнения?

-	asm volatile("pushf; lcall *lguest_entry"
+	asm volatile("pushf; lcall *%4"

-		     : "0"(pages), "1"(__pa(cpu->lg->pgdirs[cpu->cpu_pgd].pgdir))
+		     : "0"(pages), 
+		       "1"(__pa(cpu->lg->pgdirs[cpu->cpu_pgd].pgdir)),
+		       "m"(lguest_entry)
bormant ★★★★★
()
Последнее исправление: bormant (всего исправлений: 2)
Ответ на: комментарий от bormant

... другой вариант — передать линкеру при сборке "-fno-lto".

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

Взял конфиг -huge-smp, взял сорцы, никаких левых патчей не накладывал, просто сделал make silentoldconfig, make -j6 bzImage modules, и оно с первого раза собралось.

Хост: Linux nightmare 4.18.9-gentoo #1 SMP Tue Sep 25 04:38:23 +05 2018 x86_64 Intel(R) Core(TM) i7-4770K CPU @ 3.50GHz GenuineIntel GNU/Linux

Загружаться в не пробовал (в виртуалке не вижу смысла; реальное железо занято вычислениями, не стану ребутаться).

bzImage + modules + firmware + log

Могу скинуть модифицированные конфигурацией сорцы ядра, если надо.

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

спасибо, не стоит, но всеж хмм

make -j6 bzImage modules

а если еще сделать с этим ядром make -j6 modules_install?

Хотя, ты же huge собрал, ладно, не знаю пока что

NK ★★★★★
() автор топика
Последнее исправление: NK (всего исправлений: 1)
Ответ на: комментарий от bormant

почему б не посмотреть

да это я посмотреть могу, тут дело в том что мало опыта сборки ядра, в основном либо готовое брал ядро из дистра, либо у кого-то .config

LTO (link type optimization

вот вы мне намекнули про LTO, а я и как-то со скрежетом вспоминаю, что давно было где-то что-то, но вспомнить для чего (и может даже от кого (asm/gcc)) не могу

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

make -j6 modules_install

А смысл? Оно же только перетаскивает файлы из builddir в libdir, и не важно, во сколько потоков их перетаскивать — коммит в fs скорее всего будет не на каждый отдельный файл.

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

не ну, то что у вас собралось хорошо, дело конечно еще может быть в версии какого-то ПО, что и неисключено

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

дело конечно еще может быть в версии какого-то ПО

Закономерно. У меня, например, не работает make nconfig (у меня ncurses-6.1) этому ядру (пробежался по конфигу через make menuconfig, только ради любопытства).

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

Давайте глянем заодно

Ах да, совсем забыл…

 % gcc --version
gcc (Gentoo 8.2.0-r3 p1.3) 8.2.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE

 % gcc -v |& tr ' ' '\n' | grep lto
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/lto-wrapper
--enable-lto

r3lgar ★★★★★
()
Ответ на: комментарий от bormant
bash-4.3# gcc --version
gcc (GCC) 5.5.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

bash-4.3# gcc -v |& tr ' ' '\n' | grep lto
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/i586-slackware-linux/5.5.0/lto-wrapper
--enable-languages=ada,c,c++,fortran,go,java,lto,objc
--enable-lto
NK ★★★★★
() автор топика
Ответ на: комментарий от r3lgar

Хост: Linux nightmare 4.18.9-gentoo #1 SMP Tue Sep 25 04:38:23 +05 2018 x86_64 Intel(R) Core(TM) i7-4770K CPU @ 3.50GHz GenuineIntel GNU/Linux

COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/lto-wrapper

погодите, так вы на 64 собрали получается, ну на 64 у меня тоже собирается, только на 32 данная ошибка

NK ★★★★★
() автор топика
Последнее исправление: NK (всего исправлений: 1)
Ответ на: комментарий от NK

так вы на 64 собрали получается

У меня нет машин с x86.

ну на 64 у меня тоже собирается

Тогда bormant прав с проблемой с LTO.

только на 32 данная ошибка

Изначально я понял так, что ошибка при сборке x86 (таргет), а не при сборке на хосте x86.

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

и оно с первого раза собралось

Ну-ну... А если в лог посмотреть? Начиная от строки так 13307 примерно:

ERROR: "lguest_entry" [drivers/lguest/lg.ko] undefined!
make[1]: *** [/home/r3lgar/Downloads/linux-3.10.108/scripts/Makefile.modpost:88: __modpost] Error 1
make: *** [Makefile:952: modules] Error 2
make: *** Waiting for unfinished jobs....
Ну и в /lib/modules/3.10.108-smp/kernel/drivers/lguest/ ожидаемо пусто, никакого lg.ko не наблюдается...

Так что пока никаких чудес...

bormant ★★★★★
()
Последнее исправление: bormant (всего исправлений: 2)
Ответ на: комментарий от bormant

Косяк, не заметил… exit code 0, потому особо не разглядывал лог.

Так что пока никаких чудес...

Я на них и не рассчитывал.

ERROR: «lguest_entry» [drivers/lguest/lg.ko] undefined!

Конфиг я вообще не трогал, потому если где какой косяк по вине конфига — на этом наши полномочия как бы всё.

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

ERROR: «lguest_entry» [drivers/lguest/lg.ko] undefined!

Конфиг я вообще не трогал, потому если где какой косяк по вине конфига — на этом наши полномочия как бы всё

Не в конфиге дело. Ежели что, с этой ошибки всё и начиналось.
Вон в стартовом сообщении темы — и сама проблема при линковке с LTO (ровно та же), и ее решение в виде ссылки на патч с добавлением информации для линкера про lguest_entry.

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

ради теста в VBox поставил 14.1_32 (там gcc4 и)

bash-4.2# gcc --version
gcc (GCC) 4.8.2
...
bash-4.2# gcc -v |& tr ' ' '\n' | grep lto
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/i486-slackware-linux/4.8.2/lto-wrapper
--enable-languages=ada,c,c++,fortran,go,java,lto,objc
--enable-lto

и все собирается, как без патча, так и без ошибки, запускается и работает

Я-то что, в этой теме не хотел про слаку поднимать вопрос, меня больше всего заботило почему исправление из kernel/git/torvalds/linux.git (torvalds!) не попало в релиз ядра (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id...)

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

А надо глянуть, при сборке включена ли по умолчанию LTO, могла в 4.8.х быть выключена по дефолту и требовать для включения отдельного ключика. Тогда все сходится.

bormant ★★★★★
()
Последнее исправление: bormant (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.