Ядро 4.12, виртуальная машина VM не работает [закрыта]

Это признанная ошибка: Ошибка # 1132584

Решение слишком просто:

Если владельцы Cedarview (Intel Atom D2500 / D2700 / N2600 / N2800) хотят использовать это модуль, им предлагается выполнить чистую установку Ubuntu 12.04.1. После установки 12.04.1 пользователи не должны устанавливать более новые пакеты lts-kernel или lts-xserver, так как они должны запускать ядро ​​3.2.x, чтобы модуль работал правильно.

Надеюсь, это вас будет интересовать.

3
задан 10 July 2017 в 22:38

4 ответа

это работало на Ubuntu 16.04, x86_64 Kernel 4.12 (4.12.0-041200-generic)

Переход в каталог источника Virtualbox

cd /usr/share/virtualbox/src

Изменить в каталог источника Virtualbox

sudo wget http://paste.siduction.org/20170629003423

применить patch

sudo patch -Np0 < 20170629003423

применить patch

/sbin/vboxconfig

получить удовольствие!

источник: https://forum.siduction.org/index. php? topic = 6769.0 плюс мой собственный опыт

4
ответ дан 18 July 2018 в 10:42

На странице, связанной с @koleygr, патч, связанный с melmarker, кажется, работает. Я могу скомпилировать Gentoo Linux под управлением 4.12, хотя я не уверен в Ubuntu.

Патч:

diff -ruN vboxhost.orig/vboxdrv/linux/SUPDrv-linux.c vboxhost/vboxdrv/linux/SUPDrv-linux.c --- vboxhost.orig/vboxdrv/linux/SUPDrv-linux.c 2016-08-22 00:00:00.000000000 +0200 +++ vboxhost/vboxdrv/linux/SUPDrv-linux.c 2017-05-31 19:00:22.887324690 +0200 @@ -1397,7 +1397,7 @@ SUPR0DECL(uint32_t) SUPR0GetKernelFeatures(void) { uint32_t fFlags = 0; -#ifdef CONFIG_PAX_KERNEXEC +#if defined(CONFIG_PAX_KERNEXEC) || LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) fFlags |= SUPKERNELFEATURES_GDT_READ_ONLY; #endif #if defined(VBOX_STRICT) || defined(VBOX_WITH_EFLAGS_AC_SET_IN_VBOXDRV) diff -ruN vboxhost.orig/vboxdrv/r0drv/linux/alloc-r0drv-linux.c vboxhost/vboxdrv/r0drv/linux/alloc-r0drv-linux.c --- vboxhost.orig/vboxdrv/r0drv/linux/alloc-r0drv-linux.c 2016-08-22 00:00:00.000000000 +0200 +++ vboxhost/vboxdrv/r0drv/linux/alloc-r0drv-linux.c 2017-05-31 19:03:32.465413475 +0200 @@ -35,7 +35,10 @@ #include <iprt/assert.h> #include <iprt/err.h> #include "r0drv/alloc-r0drv.h" - +#include <linux/kmemleak.h> +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) +#include <asm/set_memory.h> +#endif #if (defined(RT_ARCH_AMD64) || defined(DOXYGEN_RUNNING)) && !defined(RTMEMALLOC_EXEC_HEAP) # if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 23) diff -ruN vboxhost.orig/vboxdrv/r0drv/linux/memobj-r0drv-linux.c vboxhost/vboxdrv/r0drv/linux/memobj-r0drv-linux.c --- vboxhost.orig/vboxdrv/r0drv/linux/memobj-r0drv-linux.c 2017-02-02 16:54:00.000000000 +0100 +++ vboxhost/vboxdrv/r0drv/linux/memobj-r0drv-linux.c 2017-05-31 19:23:05.187059423 +0200 @@ -899,6 +899,9 @@ unsigned long pfn; struct page *pPage; pte_t *pEntry; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) + p4d_t p4d; +#endif union { pgd_t Global; @@ -917,9 +920,18 @@ u.Global = *pgd_offset(current->active_mm, ulAddr); if (RT_UNLIKELY(pgd_none(u.Global))) return NULL; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) + p4d = *p4d_offset(&u.Global, ulAddr); + if (RT_UNLIKELY(p4d_none(p4d) || p4d_large(p4d) || !p4d_present(p4d))) + return NULL; +#endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) + u.Upper = *pud_offset(&p4d, ulAddr); +#else u.Upper = *pud_offset(&u.Global, ulAddr); +#endif if (RT_UNLIKELY(pud_none(u.Upper))) return NULL; # if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25) @@ -1463,13 +1475,23 @@ { int rc = -ENOMEM; pgd_t *pgd; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) + p4d_t *p4d; +#endif spin_lock(&mm->page_table_lock); pgd = pgd_offset(mm, ulAddr); if (!pgd_none(*pgd) && !pgd_bad(*pgd)) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) + p4d = p4d_offset(*pgd, ulAddr); + if (p4d_none(*p4d)) + goto exit; + pmd_t *pmd = pmd_offset(p4d, ulAddr); +#else pmd_t *pmd = pmd_offset(pgd, ulAddr); +#endif if (!pmd_none(*pmd)) { pte_t *ptep = pte_offset_map(pmd, ulAddr); @@ -1487,6 +1509,9 @@ } } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) +exit: +#endif spin_unlock(&mm->page_table_lock); return rc; }
-1
ответ дан 18 July 2018 в 10:42

это работало на Ubuntu 16.04, x86_64 Kernel 4.12 (4.12.0-041200-generic)

Переход в каталог источника Virtualbox

cd /usr/share/virtualbox/src

Изменить в каталог источника Virtualbox

sudo wget http://paste.siduction.org/20170629003423

применить patch

sudo patch -Np0 < 20170629003423

применить patch

/sbin/vboxconfig

получить удовольствие!

источник: https://forum.siduction.org/index. php? topic = 6769.0 плюс мой собственный опыт

4
ответ дан 24 July 2018 в 19:38
  • 1
    У меня есть только: nls / & quot; & Quot; VBox.sh & Quot; & Амп; & Quot; VBoxSysInfo.sh & Quot; внутри / usr / share / virtualbox – Tzahi Serruya 9 July 2017 в 14:45
  • 2
    Хороший ответ спас меня! – George Udosen 11 July 2017 в 22:31
  • 3
    Если каталог src не существует, удалите виртуальный бокс и установите последний пакет с сайта virtualbox.org, затем примените патч и запустите sudo / sbin / vboxconfig – Oskenso Kashi 14 July 2017 в 22:15
  • 4
    Работал для меня - спасибо. – Vanessa Deagan 15 July 2017 в 01:53

На странице, связанной с @koleygr, патч, связанный с melmarker, кажется, работает. Я могу скомпилировать Gentoo Linux под управлением 4.12, хотя я не уверен в Ubuntu.

Патч:

diff -ruN vboxhost.orig/vboxdrv/linux/SUPDrv-linux.c vboxhost/vboxdrv/linux/SUPDrv-linux.c --- vboxhost.orig/vboxdrv/linux/SUPDrv-linux.c 2016-08-22 00:00:00.000000000 +0200 +++ vboxhost/vboxdrv/linux/SUPDrv-linux.c 2017-05-31 19:00:22.887324690 +0200 @@ -1397,7 +1397,7 @@ SUPR0DECL(uint32_t) SUPR0GetKernelFeatures(void) { uint32_t fFlags = 0; -#ifdef CONFIG_PAX_KERNEXEC +#if defined(CONFIG_PAX_KERNEXEC) || LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) fFlags |= SUPKERNELFEATURES_GDT_READ_ONLY; #endif #if defined(VBOX_STRICT) || defined(VBOX_WITH_EFLAGS_AC_SET_IN_VBOXDRV) diff -ruN vboxhost.orig/vboxdrv/r0drv/linux/alloc-r0drv-linux.c vboxhost/vboxdrv/r0drv/linux/alloc-r0drv-linux.c --- vboxhost.orig/vboxdrv/r0drv/linux/alloc-r0drv-linux.c 2016-08-22 00:00:00.000000000 +0200 +++ vboxhost/vboxdrv/r0drv/linux/alloc-r0drv-linux.c 2017-05-31 19:03:32.465413475 +0200 @@ -35,7 +35,10 @@ #include <iprt/assert.h> #include <iprt/err.h> #include "r0drv/alloc-r0drv.h" - +#include <linux/kmemleak.h> +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) +#include <asm/set_memory.h> +#endif #if (defined(RT_ARCH_AMD64) || defined(DOXYGEN_RUNNING)) && !defined(RTMEMALLOC_EXEC_HEAP) # if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 23) diff -ruN vboxhost.orig/vboxdrv/r0drv/linux/memobj-r0drv-linux.c vboxhost/vboxdrv/r0drv/linux/memobj-r0drv-linux.c --- vboxhost.orig/vboxdrv/r0drv/linux/memobj-r0drv-linux.c 2017-02-02 16:54:00.000000000 +0100 +++ vboxhost/vboxdrv/r0drv/linux/memobj-r0drv-linux.c 2017-05-31 19:23:05.187059423 +0200 @@ -899,6 +899,9 @@ unsigned long pfn; struct page *pPage; pte_t *pEntry; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) + p4d_t p4d; +#endif union { pgd_t Global; @@ -917,9 +920,18 @@ u.Global = *pgd_offset(current->active_mm, ulAddr); if (RT_UNLIKELY(pgd_none(u.Global))) return NULL; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) + p4d = *p4d_offset(&u.Global, ulAddr); + if (RT_UNLIKELY(p4d_none(p4d) || p4d_large(p4d) || !p4d_present(p4d))) + return NULL; +#endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) + u.Upper = *pud_offset(&p4d, ulAddr); +#else u.Upper = *pud_offset(&u.Global, ulAddr); +#endif if (RT_UNLIKELY(pud_none(u.Upper))) return NULL; # if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25) @@ -1463,13 +1475,23 @@ { int rc = -ENOMEM; pgd_t *pgd; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) + p4d_t *p4d; +#endif spin_lock(&mm->page_table_lock); pgd = pgd_offset(mm, ulAddr); if (!pgd_none(*pgd) && !pgd_bad(*pgd)) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) + p4d = p4d_offset(*pgd, ulAddr); + if (p4d_none(*p4d)) + goto exit; + pmd_t *pmd = pmd_offset(p4d, ulAddr); +#else pmd_t *pmd = pmd_offset(pgd, ulAddr); +#endif if (!pmd_none(*pmd)) { pte_t *ptep = pte_offset_map(pmd, ulAddr); @@ -1487,6 +1509,9 @@ } } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) +exit: +#endif spin_unlock(&mm->page_table_lock); return rc; }
-1
ответ дан 24 July 2018 в 19:38

Другие вопросы по тегам:

Похожие вопросы: