我无法为 Linux 2.6.38 构建 VirtualBox 驱动程序

我无法为 Linux 2.6.38 构建 VirtualBox 驱动程序

我正在运行 Debian 6,并决定安装 Unstable 的 2.6.38 内核。我还安装了标头,以便稍后可以:

sudo apt-get install --target-release=unstable linux-image-2.6.38-2-686-bigmem linux-headers-2.6.38-2-686-bigmem

然后我重新安装了virtualbox-ose-dkms可以重建 2.6.38 的 VirtualBox 驱动程序(以便我可以在 2.6.38 下使用 VirtualBox),但我收到此错误:

Building initial module for 2.6.38-2-686-bigmem

Error! Bad return status for module build on kernel: 2.6.38-2-686-bigmem (i686)
Consult the make.log in the build directory
/var/lib/dkms/virtualbox-ose/3.2.10/build/ for more information.
dpkg: error processing virtualbox-ose-dkms (--configure):
 subprocess installed post-installation script returned error exit status 10
configured to not write apport reports
                                      Errors were encountered while processing:
 virtualbox-ose-dkms
E: Sub-process /usr/bin/dpkg returned an error code (1)

这是他们要求我查看的文件内容:

$ cat /var/lib/dkms/virtualbox-ose/3.2.10/build/make.log 
DKMS make.log for virtualbox-ose-3.2.10 for kernel 2.6.38-2-686-bigmem (i686)
Sat Apr  9 14:11:57 SAST 2011
make: Entering directory `/usr/src/linux-headers-2.6.38-2-686-bigmem'
  LD      /var/lib/dkms/virtualbox-ose/3.2.10/build/built-in.o
  LD      /var/lib/dkms/virtualbox-ose/3.2.10/build/vboxdrv/built-in.o
  CC [M]  /var/lib/dkms/virtualbox-ose/3.2.10/build/vboxdrv/linux/SUPDrv-linux.o
In file included from /var/lib/dkms/virtualbox-ose/3.2.10/build/include/VBox/types.h:30,
                 from /var/lib/dkms/virtualbox-ose/3.2.10/build/vboxdrv/linux/../SUPDrvInternal.h:35,
                 from /var/lib/dkms/virtualbox-ose/3.2.10/build/vboxdrv/linux/SUPDrv-linux.c:33:
/var/lib/dkms/virtualbox-ose/3.2.10/build/include/iprt/types.h:97:31: error: linux/autoconf.h: No such file or directory
/var/lib/dkms/virtualbox-ose/3.2.10/build/vboxdrv/linux/SUPDrv-linux.c: In function ‘VBoxDrvLinuxInit’:
/var/lib/dkms/virtualbox-ose/3.2.10/build/vboxdrv/linux/SUPDrv-linux.c:451: error: ‘nmi_watchdog’ undeclared (first use in this function)
/var/lib/dkms/virtualbox-ose/3.2.10/build/vboxdrv/linux/SUPDrv-linux.c:451: error: (Each undeclared identifier is reported only once
/var/lib/dkms/virtualbox-ose/3.2.10/build/vboxdrv/linux/SUPDrv-linux.c:451: error: for each function it appears in.)
/var/lib/dkms/virtualbox-ose/3.2.10/build/vboxdrv/linux/SUPDrv-linux.c:451: error: ‘NMI_IO_APIC’ undeclared (first use in this function)
/var/lib/dkms/virtualbox-ose/3.2.10/build/vboxdrv/linux/SUPDrv-linux.c:465: error: ‘nmi_active’ undeclared (first use in this function)
make[4]: *** [/var/lib/dkms/virtualbox-ose/3.2.10/build/vboxdrv/linux/SUPDrv-linux.o] Error 1
make[3]: *** [/var/lib/dkms/virtualbox-ose/3.2.10/build/vboxdrv] Error 2
make[2]: *** [_module_/var/lib/dkms/virtualbox-ose/3.2.10/build] Error 2
make[1]: *** [sub-make] Error 2
make: *** [all] Error 2
make: Leaving directory `/usr/src/linux-headers-2.6.38-2-686-bigmem'

答案1

autoconf.h 移至include/linuxinclude/generated在Linux中2.6.33。第三方模块的作者必须调整他们的代码;这已经是VirtualBox 上游完成。在此期间,您可以修补模块源或创建符号链接作为解决方法

至于NMI相关的错误,NMI 看门狗在 2.6.37 和 2.6.38 之间发生了很大变化。这看起来需要对模块源代码进行大量的移植工作。与此同时,你可能已经运气好的话只是修补有问题的代码。目的NMI看门狗是调试内核锁定,所以你可以没有它。

答案2

我对内核 2.6.38.2 也有同样的问题,为了完成任务,我以 root 身份做了:

aptitude purge virtualbox-ose virtualbox-ose-dkms
dpkg --list |grep "^rc" | awk '{print $2}' | xargs sudo dpkg --purge
locate -e virtualbox 

我删除了所有相关文件摘录我的 ~/.VirtualBox

然后

- aptitude install virtualbox-ose virtualbox-ose-dkms

因为,我有一个正在运行的 Virtualbox-ose 4.0.2,内核为 2.6.38.2

相关内容