virtualbox kernel-Modul

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
guennid

virtualbox kernel-Modul

Beitrag von guennid » 24.02.2008 17:17:49

Ich habe einen aktuellen kernel (2.6.24.2) aus den quellen kompliert und installiert. Die sourcen sind danach nicht verändert. Ich kriege das VB-kernel-Modul mit /etc/init.d/vboxdrv setup nicht gebacken. Ich werde verwiesen auf die Melduungen in /var/log/vbox-install.log. Da steht das hier:

Code: Alles auswählen

make KBUILD_VERBOSE=1 -C /lib/modules/2.6.24.2/build SUBDIRS=/tmp/vbox.4 SRCROOT=/tmp/vbox.4 modules
make[1]: Entering directory `/usr/src/linux-2.6.24.2'
test -e include/linux/autoconf.h -a -e include/config/auto.conf || (		\
	echo;								\
	echo "  ERROR: Kernel configuration is invalid.";		\
	echo "         include/linux/autoconf.h or include/config/auto.conf are missing.";	\
	echo "         Run 'make oldconfig && make prepare' on kernel src to fix it.";	\
	echo;								\
	/bin/false)
mkdir -p /tmp/vbox.4/.tmp_versions ; rm -f /tmp/vbox.4/.tmp_versions/*
make -f scripts/Makefile.build obj=/tmp/vbox.4
  gcc -m32 -Wp,-MD,/tmp/vbox.4/linux/.SUPDrv-linux.o.d  -nostdinc -isystem /usr/lib/gcc/i486-linux-gnu/4.1.2/include -D__KERNEL__ -Iinclude  -include include/linux/autoconf.h -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Os -pipe -msoft-float -mregparm=3 -freg-struct-return -mpreferred-stack-boundary=2  -march=k8 -ffreestanding -maccumulate-outgoing-args -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -Iinclude/asm-x86/mach-default -fomit-frame-pointer  -fno-stack-protector -Wdeclaration-after-statement -Wno-pointer-sign   -I/lib/modules/2.6.24.2/build/include  -I/tmp/vbox.4/ -I/tmp/vbox.4/include -I/tmp/vbox.4/r0drv/linux -D__KERNEL__ -DMODULE -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DCONFIG_VBOXDRV_AS_MISC -DRT_ARCH_X86 -DUSE_NEW_OS_INTERFACE_FOR_MM   -DMODULE -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(SUPDrv_linux)"  -D"KBUILD_MODNAME=KBUILD_STR(vboxdrv)" -c -o /tmp/vbox.4/linux/SUPDrv-linux.o /tmp/vbox.4/linux/SUPDrv-linux.c
In file included from /tmp/vbox.4/include/iprt/types.h:72,
                 from /tmp/vbox.4/include/VBox/types.h:21,
                 from /tmp/vbox.4/SUPDRV.h:26,
                 from /tmp/vbox.4/linux/SUPDrv-linux.c:22:
include/linux/types.h:40: error: redefinition of typedef 'uintptr_t'
/tmp/vbox.4/include/iprt/stdint.h:118: error: previous declaration of 'uintptr_t' was here
In file included from include/linux/thread_info.h:33,
                 from include/linux/preempt.h:9,
                 from include/linux/spinlock.h:49,
                 from /tmp/vbox.4/SUPDRV.h:84,
                 from /tmp/vbox.4/linux/SUPDrv-linux.c:22:
include/linux/bitops.h:6:1: warning: "BIT" redefined
In file included from /tmp/vbox.4/include/VBox/cdefs.h:20,
                 from /tmp/vbox.4/SUPDRV.h:25,
                 from /tmp/vbox.4/linux/SUPDrv-linux.c:22:
/tmp/vbox.4/include/iprt/cdefs.h:1019:1: warning: this is the location of the previous definition
make[2]: *** [/tmp/vbox.4/linux/SUPDrv-linux.o] Fehler 1
make[1]: *** [_module_/tmp/vbox.4] Fehler 2
make[1]: Leaving directory `/usr/src/linux-2.6.24.2'
make: *** [vboxdrv] Fehler 2
Die vermissten Dateien (autoconf.h und auto.conf) sind aber in den genannten Verzeichnissen unter /usr/src/linux-2.6.24.2/ vorhanden. Wieso findet VB die nicht?

Ein

Code: Alles auswählen

make oldconfig && make prepare
läuft fehlerfrei durch, aber danach wird's auch nicht besser.

Grüße, Günther

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Beitrag von Spasswolf » 24.02.2008 17:41:50

Die Dateien werden gefunden, sonst würde er abbrechen, die Ausgabe ist nur missverständlich.
Das Problem sind hier die Quellen des Virtualboxkernelmoduls, du müsstest die Deklarationen aus dem vbox Headern löschen, und vorher überprüfen ob im Kernel das gleiche deklariert wird.
Konkret:
Im neuen Kernel wird in ../include/linux/types.h deklariert:

Code: Alles auswählen

typedef unsigned long           uintptr_t;
Und dieses Makro wird in ../include/linux/bitops.h definiert:

Code: Alles auswählen

#define BIT(nr)                 (1UL << (nr))
Sollten die Deklaration/Definition mit der aus den vbox Headern (./vbox.4/include/iprt/stdint.h und ./vbox.4/include/iprt/cdefs.h) identisch sein, kannst du die Deklaration/Definition aus den vbox Headern entfernen.

guennid

Beitrag von guennid » 24.02.2008 17:56:10

Ach du meine Sch...
Dafür brauche ich ein wenig, bis ich das verdaut habe.
Zunächst: Ich habe vorher das Modul für einen 23er Kernel gebaut. Lief problemlos, d.h. "make oldconfig ..." musste cih wohl schon ausführen, weiß ich aber nicht mehr sicher. VB rennt mit diesem kernel. Kann das Problem damit zusammenhängen?

Konkret:
Über welche Pfade reden wir. Das, was du in den beiden code-tags beschreibst, liegt doch unter /usr/src/[linux-version] Ist das korrekt?

Beziehen sich die danach genannten (unvollständigen?) Pfade auch darauf oder sind wir hier in /usr/share/virtualbox/?

Grüße, Günther

guennid

Beitrag von guennid » 24.02.2008 18:37:32

So, ich finde in /usr/src/linux-2.6.24.2/include/linux/types.h

Code: Alles auswählen

typedef unsigned long           uintptr_t;
das gleiche code-Stück finde ich in /usr/share/virtualbox/src/include/iprtr/stdint.h

Code: Alles auswählen

#define BIT(nr)                 (1UL << (nr))
finde ich nur in

/usr/src/linux-2.6.24.2/include/linux/bitops.h, nicht aber in

/usr/share/virtualbox/src/include/iprtr/cdefs.h

Grüße, Günther

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Beitrag von Spasswolf » 24.02.2008 18:39:45

[cZunächst: Ich habe vorher das Modul für einen 23er Kernel gebaut. Lief problemlos, d.h. "make oldconfig ..." musste cih wohl schon ausführen, weiß ich aber nicht mehr sicher. VB rennt mit diesem kernel. Kann das Problem damit zusammenhängen? ode]
[/code]
Das Problem liegt ist das der Virtualbox Code nicht an Kernel 2.6.24 angepasst ist.

Code: Alles auswählen

Konkret:
Über welche Pfade reden wir. Das, was du in den beiden code-tags beschreibst, liegt doch unter /usr/src/[linux-version] Ist das korrekt?
Ja.

Code: Alles auswählen


Beziehen sich die danach genannten (unvollständigen?) Pfade auch darauf oder sind wir hier in /usr/share/virtualbox/? 
Bei diesen Pfaden ist vbox.4 das Verzeichnis in dem der Virtualbox Quelltext liegt.

Anstatt den Quelltext selbst zu ändern kannst du auch auf eine neue Version warten die schon an Kernel 2.6.24 angepasst ist.

guennid

Beitrag von guennid » 24.02.2008 18:48:37

guck dir noch mal meinen letzten post an. Das hat sich wohl überschnitten.

Ein Verzeichnis vbox.4 habe ich nicht. Ich benutze die debian-Version, nicht OSE.

Kann ich noch da weitermachen, was du zuerst angestoßen hast, oder muss ich warten?

Grüße, Günther

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Beitrag von Spasswolf » 24.02.2008 20:40:05

Welche Version benutzt du denn genau?
Die Version 1.5.6 von hier sollte mit Kernel 2.6.24 funktionieren:
http://www.virtualbox.org/wiki/Downloads

guennid

Beitrag von guennid » 24.02.2008 21:30:58

Meine Version ist 1.5.0. Wenn ich die Seite richtig verstehe, dann sollte 1.5.6 mit etch möglich sein.

Geht das über die sources.list mit apt-get oder muss ich manuell installieren?

Grüße, Günther

[edit:] Tja, Faulheit kommt vor den Fall - oder wie das Sprichwort heißt. Hab' gerade bis unten hin gescollt :oops:

guennid

Beitrag von guennid » 26.02.2008 21:14:21

Bevor ich diese neue VB-Version installiere: Was ist mit der bestehenden? Kann ich upgraden oder muss die zuvor runter (so was in der Art habe ich gelesen).
Und -- wichtiger: Was ist mit dem Modul für den 23er Kernel? funktioniert das weiter oder geht das ganze Theater von vorne los. Dann lass ich's nämlich lieber.

Grüße, Günther

Clio

Beitrag von Clio » 27.02.2008 15:25:51

Also ich habe die 1.5.6 über die 1.5.4 installiert, ohne Probleme.
Die Module müssen dann natürlich wieder neu gebaut werden, wie gehabt.

Antworten