LINUX.ORG.RU

Не компилируется модуль ядра virtualbox

 , , ,


0

1

Сборка вылетает, едва начавшись:

*** Building 'vboxdrv' module ***
make[1]: вход в каталог «/tmp/SBo/virtualbox-kernel-5.0.40/vboxdrv»
make KBUILD_VERBOSE= SUBDIRS=/tmp/SBo/virtualbox-kernel-5.0.40/vboxdrv SRCROOT=/tmp/SBo/virtualbox-kernel-5.0.40/vboxdrv CONFIG_MODULE_SIG= -C /lib/modules/4.18.20-ll/build modules
make[2]: вход в каталог «/arsenal/Builds/linux-4.18.20»
  CC [M]  /tmp/SBo/virtualbox-kernel-5.0.40/vboxdrv/linux/SUPDrv-linux.o
In file included from ./include/linux/atomic.h:5:0,
                 from ./include/linux/jump_label.h:189,
                 from ./arch/x86/include/asm/string_64.h:6,
                 from ./arch/x86/include/asm/string.h:5,
                 from ./include/linux/string.h:20,
                 from /tmp/SBo/virtualbox-kernel-5.0.40/vboxdrv/include/iprt/string.h:37,
                 from /tmp/SBo/virtualbox-kernel-5.0.40/vboxdrv/linux/../SUPDrvInternal.h:43,
                 from /tmp/SBo/virtualbox-kernel-5.0.40/vboxdrv/linux/SUPDrv-linux.c:32:
./arch/x86/include/asm/atomic.h: В функции «arch_atomic_try_cmpxchg»:
./arch/x86/include/asm/atomic.h:197:2: ошибка: неопределенный именованный операнд «new»
  return try_cmpxchg(&v->counter, old, new);
  ^
./arch/x86/include/asm/atomic.h:197:2: ошибка: неопределенный именованный операнд «new»
./arch/x86/include/asm/atomic.h:197:2: ошибка: неопределенный именованный операнд «new»
./arch/x86/include/asm/atomic.h:197:2: ошибка: неопределенный именованный операнд «new»
In file included from ./arch/x86/include/asm/atomic.h:280:0,
                 from ./include/linux/atomic.h:5,
                 from ./include/linux/jump_label.h:189,
                 from ./arch/x86/include/asm/string_64.h:6,
                 from ./arch/x86/include/asm/string.h:5,
                 from ./include/linux/string.h:20,
                 from /tmp/SBo/virtualbox-kernel-5.0.40/vboxdrv/include/iprt/string.h:37,
                 from /tmp/SBo/virtualbox-kernel-5.0.40/vboxdrv/linux/../SUPDrvInternal.h:43,
                 from /tmp/SBo/virtualbox-kernel-5.0.40/vboxdrv/linux/SUPDrv-linux.c:32:
./arch/x86/include/asm/atomic64_64.h: В функции «arch_atomic64_try_cmpxchg»:
./arch/x86/include/asm/atomic64_64.h:183:2: ошибка: неопределенный именованный операнд «new»
  return try_cmpxchg(&v->counter, old, new);
  ^
./arch/x86/include/asm/atomic64_64.h:183:2: ошибка: неопределенный именованный операнд «new»
./arch/x86/include/asm/atomic64_64.h:183:2: ошибка: неопределенный именованный операнд «new»
./arch/x86/include/asm/atomic64_64.h:183:2: ошибка: неопределенный именованный операнд «new»
scripts/Makefile.build:317: ошибка выполнения рецепта для цели «/tmp/SBo/virtualbox-kernel-5.0.40/vboxdrv/linux/SUPDrv-linux.o»
make[3]: *** [/tmp/SBo/virtualbox-kernel-5.0.40/vboxdrv/linux/SUPDrv-linux.o] Ошибка 1
Makefile:1505: ошибка выполнения рецепта для цели «_module_/tmp/SBo/virtualbox-kernel-5.0.40/vboxdrv»
make[2]: *** [_module_/tmp/SBo/virtualbox-kernel-5.0.40/vboxdrv] Ошибка 2
make[2]: выход из каталога «/arsenal/Builds/linux-4.18.20»
Makefile:299: ошибка выполнения рецепта для цели «vboxdrv»
make[1]: *** [vboxdrv] Ошибка 2
make[1]: выход из каталога «/tmp/SBo/virtualbox-kernel-5.0.40/vboxdrv»
Makefile:39: ошибка выполнения рецепта для цели «all»
make: *** [all] Ошибка 2

Что оно пытается донести?

Slackware 14.2, слакбилд с SBo, ядро 4.18.20.

Донести оно пытается, что в ядре с момента выхода того VB сильно поменялись интерфейсы вызовов, о чем старый VB не в курсе.

Староват VB 5.0.40 для ядра 4.18.
Возьмите VB 5.2.26 или 6.0.4, если 32 бита не нужны.

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

Да, у меня уже было такое, VirtualBox вообще достаточно капризный в плане сборки. Но в этот раз не компилируется даже со стоковым ядром, и вообще никакие сочетания ядер 4.4.* - 4.18 и VirtualBox 5.*. 6-й портабельный с офсайта компилирует модуль, но не может запустить ни одну машину, ни из под юзера, ни из под рута. Из сырцов с офсайта VirtualBox актуальных версий не собирается, так как требует PAM.

Видимо, пора осваивать QEMU.

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

не компилируется даже со стоковым ядром

Странно, проверю, фикс под обновленное 4.4.х (которое с поломанным API) в текущем virtualbox-kernel на SBo имеется:
https://git.slackbuilds.org/slackbuilds/commit/system/virtualbox-kernel?h=14....

# Work around API break introduced in kernel 4.4.168
if [ "$KERNEL_MINOR" = 4 -a "$KERNEL_PATCH" -ge 168 ]; then
  sed -i "s|KERNEL_VERSION(4, 9, 0)|KERNEL_VERSION(4, 4, 168)|" vboxdrv/r0drv/linux/memobj-r0drv-linux.c
fi
А поскольку 4.4.172 приехало совсем недавно, правки весьма свежие, собираться должно.


Могу попробовать собрать у себя, но без hardening, нужно?

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

Проверил. На стоковых 4.4.х, в том числе и на 4.4.172 все в порядке, как и ожидалось.

# uname -rm
4.4.172 x86_64

# HARDENING=no sbopkg -i acpica -i virtualbox-kernel -i virtualbox
...
  Building package acpica-20170531-x86_64-1_SBo.txz ... OK
  Building package virtualbox-kernel-5.0.40_4.4.172-x86_64-2_SBo.txz ... OK
  Building package virtualbox-5.0.40-x86_64-1_SBo.txz ... OK

Собиралось без 32-битного слоя, но переносимо, без HARDENING, если такое нужно, могу куда-то залить.

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

Я вспомнил, что пересобирал ядро с BFS-патчами. Вернул стоковое, всё собралось и запустилось. Интересно, конечно, как BFS может конфликтовать с vboxdrv, но факт остаётся фактом.

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

Интересно, конечно, как BFS может конфликтовать с vboxdrv

Если действительно интересно, достаточно посмотреть на ошибки сборки и изучить разницу в коде применительно к источнику тех ошибок.

bormant ★★★★★ ()

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

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

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

Ну тут-то как раз никакого сюрприза.
Все, кто использует те или иные возможности ядра в собственных ядерных модулях, зависят от них опционально либо безусловно; отключив одно естественным образом теряется другое, а в последнем случае (при безусловной зависимости) — уже на этапе сборки.

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