Forum: PC-Programmierung Kernel Kompilierung auf virtueller Maschine


von Jojo (Gast)


Lesenswert?

Hallo zusammen,

ich hab eine Frage bezüglich der Linux-Kernel-Kompilierung. Es geht 
darum, daß ich einen neuen Kernel für einen SBC (RPi ähnlich) bauen 
möchte. Auf meinem Linux-PC geht das mittels der passenden 
Cross-Compiler-Toolchain wunderbar.

Dann hab ich hier einen Windows7-Rechner. Auf dem hab ich eine virtuelle 
Maschine aufgesetzt (Linux Mint 16, gleiches wie am Linux-PC) und die 
gleiche Toolchain wie am Linux-PC installiert.

Dennoch schlägt das Kompilieren in der virtuellen Maschine fehl.

Es erscheinen Meldungen wie (Auszug, nicht vollständig):
1
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:164:2: warning: asm operand 2 probably doesn’t match constraints [enabled by default]
2
  __asm__("@ __pv_stub\n"    \
3
  ^
4
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:175:2: note: in expansion of macro ‘__pv_stub’
5
  __pv_stub(x, t, "add", __PV_BITS_31_24);
6
  ^
7
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:164:2: error: impossible constraint in ‘asm’
8
  __asm__("@ __pv_stub\n"    \
9
  ^
10
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:175:2: note: in expansion of macro ‘__pv_stub’
11
  __pv_stub(x, t, "add", __PV_BITS_31_24);
12
  ^
13
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:164:2: error: impossible constraint in ‘asm’
14
  __asm__("@ __pv_stub\n"    \
15
  ^
16
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:175:2: note: in expansion of macro ‘__pv_stub’
17
  __pv_stub(x, t, "add", __PV_BITS_31_24);
18
  ^
19
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:164:2: error: impossible constraint in ‘asm’
20
  __asm__("@ __pv_stub\n"    \
21
  ^
22
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:175:2: note: in expansion of macro ‘__pv_stub’
23
  __pv_stub(x, t, "add", __PV_BITS_31_24);
24
  ^
25
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:164:2: error: impossible constraint in ‘asm’
26
  __asm__("@ __pv_stub\n"    \
27
  ^
28
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:175:2: note: in expansion of macro ‘__pv_stub’
29
  __pv_stub(x, t, "add", __PV_BITS_31_24);
30
  ^
31
make[1]: *** [init/main.o] Fehler 1
32
make: *** [init] Fehler 2

Kann da jemand weiterhelfen oder weiß jemand den Grund?

Gruß

von SI (Gast)


Lesenswert?

Sieht so aus als bei ./configure etwas falsch gelaufen ist, will sagen, 
vielleicht die falsche Plattform angegeben.

Das Genörgel heisst grob übersetzt "mit dem Assembler kann ich auf der 
Plattform nix anfangen".

Allerdings kenn ich genug Bugs bei den Cross-Compilern, bei denen schon 
das ändern von -O auf -O2 hilft.

von Jojo (Gast)


Lesenswert?

Hi und danke für die Antwort!

Also die Ausgabe beim Konfigurieren sieht so aus:
1
jojo@jojo-VirtualBox ~/linux-kernel $ sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sun7i_defconfig
2
[sudo] password for jojo: 
3
#
4
# configuration written to .config
5
#

Das sieht für mich erstmal doch ok aus, oder?!

Dann mache ich:
1
jojo@jojo-VirtualBox ~/linux-kernel $ sudo make -j1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage modules
2
scripts/kconfig/conf --silentoldconfig Kconfig
3
  CHK     include/linux/version.h
4
  CHK     include/generated/utsrelease.h
5
make[1]: »include/generated/mach-types.h« ist bereits aktualisiert.
6
  CALL    scripts/checksyscalls.sh
7
  CC      init/main.o
8
In file included from /home/jojo/linux-kernel/arch/arm/include/asm/page.h:170:0,
9
                 from include/linux/mmzone.h:20,
10
                 from include/linux/gfp.h:4,
11
                 from include/linux/kmod.h:22,
12
                 from include/linux/module.h:13,
13
                 from init/main.c:13:
14
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h: In function ‘start_kernel’:
15
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:164:2: warning: asm operand 2 probably doesn’t match constraints [enabled by default]
16
  __asm__("@ __pv_stub\n"    \
17
  ^
18
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:175:2: note: in expansion of macro ‘__pv_stub’
19
  __pv_stub(x, t, "add", __PV_BITS_31_24);
20
  ^
21
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:164:2: warning: asm operand 2 probably doesn’t match constraints [enabled by default]
22
  __asm__("@ __pv_stub\n"    \
23
  ^
24
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:175:2: note: in expansion of macro ‘__pv_stub’
25
  __pv_stub(x, t, "add", __PV_BITS_31_24);
26
  ^
27
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:164:2: warning: asm operand 2 probably doesn’t match constraints [enabled by default]
28
  __asm__("@ __pv_stub\n"    \
29
  ^
30
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:175:2: note: in expansion of macro ‘__pv_stub’
31
  __pv_stub(x, t, "add", __PV_BITS_31_24);
32
  ^
33
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:164:2: warning: asm operand 2 probably doesn’t match constraints [enabled by default]
34
  __asm__("@ __pv_stub\n"    \
35
  ^
36
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:175:2: note: in expansion of macro ‘__pv_stub’
37
  __pv_stub(x, t, "add", __PV_BITS_31_24);
38
  ^
39
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:164:2: error: impossible constraint in ‘asm’
40
  __asm__("@ __pv_stub\n"    \
41
  ^
42
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:175:2: note: in expansion of macro ‘__pv_stub’
43
  __pv_stub(x, t, "add", __PV_BITS_31_24);
44
  ^
45
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:164:2: error: impossible constraint in ‘asm’
46
  __asm__("@ __pv_stub\n"    \
47
  ^
48
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:175:2: note: in expansion of macro ‘__pv_stub’
49
  __pv_stub(x, t, "add", __PV_BITS_31_24);
50
  ^
51
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:164:2: error: impossible constraint in ‘asm’
52
  __asm__("@ __pv_stub\n"    \
53
  ^
54
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:175:2: note: in expansion of macro ‘__pv_stub’
55
  __pv_stub(x, t, "add", __PV_BITS_31_24);
56
  ^
57
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:164:2: error: impossible constraint in ‘asm’
58
  __asm__("@ __pv_stub\n"    \
59
  ^
60
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:175:2: note: in expansion of macro ‘__pv_stub’
61
  __pv_stub(x, t, "add", __PV_BITS_31_24);
62
  ^
63
make[1]: *** [init/main.o] Fehler 1
64
make: *** [init] Fehler 2

und das scheint nicht mehr zu gehen. Ich hab mich bei den Befehlen 
strikt an ein Tutorial gehalten. Und wie gesagt, auf meinem Linux-PC ein 
Cross-Compiling für ARM durchzuführen funktioniert ja auch genau so o_O 
. Ich bin verwirrt...

Gruß

von ich (Gast)


Lesenswert?

Warum den sudo zum kompilieren, das schreit nach problemen?

An sonsten, bist du sicher dass die Kernelquellen sauber sind und nicht 
schon mal kurz angefangen wurde für x86 zu kompilieren (aus Versehen). 
Mach mal ein make mrproper.

von Jojo (Gast)


Lesenswert?

ich schrieb:
> Warum den sudo zum kompilieren, das schreit nach problemen?

Ja.. also... weil es ohne sudo nicht ging :)
1
jojo@jojo-VirtualBox ~/linux-kernel $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sun7i_defconfig
2
3
*** Error during writing of the configuration.
4
5
make[1]: *** [sun7i_defconfig] Fehler 1
6
make: *** [sun7i_defconfig] Fehler 2

ich schrieb:
> An sonsten, bist du sicher dass die Kernelquellen sauber sind und nicht
> schon mal kurz angefangen wurde für x86 zu kompilieren (aus Versehen).

Joa... da bin ich schon relativ sicher. Ich bin ja nicht der einzige, 
der die benutzt. Wenn es da tiefgreifende Probleme mit der Quelle gäbe, 
hätten das bestimmt schon ein paar mehr Leute bemerkt und gemeldet. Aber 
sowas ist mir eigentlich nicht bekannt. Ich würde die Quellen als OK 
nsehen.

ich schrieb:
> Mach mal ein make mrproper.

Ok, hab ich gerade gemacht:
1
jojo@jojo-VirtualBox ~/linux-kernel $ make mrproper
2
  CLEAN   .
3
rm: das Entfernen von »./kernel/bounds.s“ ist nicht möglich: Keine Berechtigung
4
make[1]: *** [__clean] Fehler 1
5
make: *** [_clean_.] Fehler 2
6
jojo@jojo-VirtualBox ~/linux-kernel $ sudo make mrproper
7
[sudo] password for jojo: 
8
  CLEAN   .
9
  CLEAN   usr
10
  CLEAN   .tmp_versions
11
  CLEAN   scripts/basic
12
  CLEAN   scripts/genksyms
13
  CLEAN   scripts/kconfig
14
  CLEAN   scripts/mod
15
  CLEAN   scripts
16
  CLEAN   include/config include/generated arch/arm/include/generated
17
  CLEAN   .config .config.old .version include/linux/version.h

Gruß

von ich (Gast)


Lesenswert?

na wenn du als root compiliert hast kannst du die dateien natürlich auch 
nur als root wieder löschen...
Am besten machst du mal ein (mit sudo) "chown -R jojo 
[kernelverzeichnis]" und arbeitest dann nicht mehr mit root daran rum. 
Dann gibt es zumindest eine Probleme mehr mit Berechtigungen.
Und nach dem mrproper dann wieder neu anfangen zu kompilieren.

von SI (Gast)


Lesenswert?

Davon ausgehend, dass du den (sauberen) Urzustand wie von "ich" 
vorgeschlagen hergestellt hast, probier mal eine andere Plattform.
Was ich damit meine ist, statt:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sun7i_defconfig

das:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- arm_defconfig

sun7i sehe ich als nicht als mögliche Plattform. Siehe
http://events.linuxfoundation.org/sites/events/files/slides/Shuah_Khan_cross_compile_linux.pdf

von ich (Gast)


Lesenswert?

Ich denke er verwendet den linux-sunxi fork, da gibt es sun7i_defconfig. 
Der letzte nightly build mit sun7i_defconfig lief auch ohne Probleme, es 
sollte also nicht am Kernel liegen.

von Jojo (Gast)


Lesenswert?

Nochmal vielen Dank für deine Hilfe.

Hab alles wie beschrieben gemacht. Ich habe die entsprechenden 
Berechtigungen und dann nach dem mrproper nochmal von vorn angefangen. 
Leider hat sich an dem Ergebnis nichts geändert :( .

Hier nochmal der Konsolenauszug:
1
jojo@jojo-VirtualBox ~ $ sudo chown -R jojo ~/linux-kernel
2
[sudo] password for jojo: 
3
jojo@jojo-VirtualBox ~ $ ls -la
4
insgesamt 148
5
...
6
drwxr-xr-x 28 jojo root 4096 Mai 22 13:23 linux-kernel
7
...
8
9
jojo@jojo-VirtualBox ~ $ cd linux-kernel
10
jojo@jojo-VirtualBox ~/linux-kernel $ make mrproper
11
  CLEAN   .
12
  CLEAN   .tmp_versions
13
  CLEAN   scripts/basic
14
  CLEAN   scripts/genksyms
15
  CLEAN   scripts/kconfig
16
  CLEAN   scripts/mod
17
  CLEAN   scripts
18
  CLEAN   include/config include/generated arch/arm/include/generated
19
  CLEAN   .config include/linux/version.h
20
jojo@jojo-VirtualBox ~/linux-kernel $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sun7i_defconfig
21
  HOSTCC  scripts/basic/fixdep
22
  HOSTCC  scripts/kconfig/conf.o
23
  SHIPPED scripts/kconfig/zconf.tab.c
24
  SHIPPED scripts/kconfig/zconf.lex.c
25
  SHIPPED scripts/kconfig/zconf.hash.c
26
  HOSTCC  scripts/kconfig/zconf.tab.o
27
  HOSTLD  scripts/kconfig/conf
28
#
29
# configuration written to .config
30
#
31
jojo@jojo-VirtualBox ~/linux-kernel $ make -j1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage modules
32
scripts/kconfig/conf --silentoldconfig Kconfig
33
  WRAP    arch/arm/include/generated/asm/auxvec.h
34
  WRAP    arch/arm/include/generated/asm/bitsperlong.h
35
  WRAP    arch/arm/include/generated/asm/cputime.h
36
  WRAP    arch/arm/include/generated/asm/emergency-restart.h
37
  WRAP    arch/arm/include/generated/asm/errno.h
38
  WRAP    arch/arm/include/generated/asm/ioctl.h
39
  WRAP    arch/arm/include/generated/asm/irq_regs.h
40
  WRAP    arch/arm/include/generated/asm/kdebug.h
41
  WRAP    arch/arm/include/generated/asm/local.h
42
  WRAP    arch/arm/include/generated/asm/local64.h
43
  WRAP    arch/arm/include/generated/asm/percpu.h
44
  WRAP    arch/arm/include/generated/asm/poll.h
45
  WRAP    arch/arm/include/generated/asm/resource.h
46
  WRAP    arch/arm/include/generated/asm/sections.h
47
  WRAP    arch/arm/include/generated/asm/siginfo.h
48
  WRAP    arch/arm/include/generated/asm/sizes.h
49
  CHK     include/linux/version.h
50
  UPD     include/linux/version.h
51
  CHK     include/generated/utsrelease.h
52
  UPD     include/generated/utsrelease.h
53
  Generating include/generated/mach-types.h
54
  CC      kernel/bounds.s
55
  GEN     include/generated/bounds.h
56
  CC      arch/arm/kernel/asm-offsets.s
57
  GEN     include/generated/asm-offsets.h
58
  CALL    scripts/checksyscalls.sh
59
  HOSTCC  scripts/genksyms/genksyms.o
60
  SHIPPED scripts/genksyms/lex.lex.c
61
  SHIPPED scripts/genksyms/keywords.hash.c
62
  SHIPPED scripts/genksyms/parse.tab.h
63
  HOSTCC  scripts/genksyms/lex.lex.o
64
  SHIPPED scripts/genksyms/parse.tab.c
65
  HOSTCC  scripts/genksyms/parse.tab.o
66
  HOSTLD  scripts/genksyms/genksyms
67
  CC      scripts/mod/empty.o
68
  HOSTCC  scripts/mod/mk_elfconfig
69
  MKELF   scripts/mod/elfconfig.h
70
  HOSTCC  scripts/mod/file2alias.o
71
  HOSTCC  scripts/mod/modpost.o
72
  HOSTCC  scripts/mod/sumversion.o
73
  HOSTLD  scripts/mod/modpost
74
  HOSTCC  scripts/kallsyms
75
  HOSTCC  scripts/pnmtologo
76
  HOSTCC  scripts/conmakehash
77
  HOSTCC  scripts/bin2c
78
  CC      init/main.o
79
In file included from /home/jojo/linux-kernel/arch/arm/include/asm/page.h:170:0,
80
                 from include/linux/mmzone.h:20,
81
                 from include/linux/gfp.h:4,
82
                 from include/linux/kmod.h:22,
83
                 from include/linux/module.h:13,
84
                 from init/main.c:13:
85
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h: In function ‘start_kernel’:
86
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:164:2: warning: asm operand 2 probably doesn’t match constraints [enabled by default]
87
  __asm__("@ __pv_stub\n"    \
88
  ^
89
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:175:2: note: in expansion of macro ‘__pv_stub’
90
  __pv_stub(x, t, "add", __PV_BITS_31_24);
91
  ^
92
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:164:2: warning: asm operand 2 probably doesn’t match constraints [enabled by default]
93
  __asm__("@ __pv_stub\n"    \
94
  ^
95
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:175:2: note: in expansion of macro ‘__pv_stub’
96
  __pv_stub(x, t, "add", __PV_BITS_31_24);
97
  ^
98
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:164:2: warning: asm operand 2 probably doesn’t match constraints [enabled by default]
99
  __asm__("@ __pv_stub\n"    \
100
  ^
101
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:175:2: note: in expansion of macro ‘__pv_stub’
102
  __pv_stub(x, t, "add", __PV_BITS_31_24);
103
  ^
104
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:164:2: warning: asm operand 2 probably doesn’t match constraints [enabled by default]
105
  __asm__("@ __pv_stub\n"    \
106
  ^
107
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:175:2: note: in expansion of macro ‘__pv_stub’
108
  __pv_stub(x, t, "add", __PV_BITS_31_24);
109
  ^
110
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:164:2: error: impossible constraint in ‘asm’
111
  __asm__("@ __pv_stub\n"    \
112
  ^
113
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:175:2: note: in expansion of macro ‘__pv_stub’
114
  __pv_stub(x, t, "add", __PV_BITS_31_24);
115
  ^
116
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:164:2: error: impossible constraint in ‘asm’
117
  __asm__("@ __pv_stub\n"    \
118
  ^
119
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:175:2: note: in expansion of macro ‘__pv_stub’
120
  __pv_stub(x, t, "add", __PV_BITS_31_24);
121
  ^
122
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:164:2: error: impossible constraint in ‘asm’
123
  __asm__("@ __pv_stub\n"    \
124
  ^
125
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:175:2: note: in expansion of macro ‘__pv_stub’
126
  __pv_stub(x, t, "add", __PV_BITS_31_24);
127
  ^
128
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:164:2: error: impossible constraint in ‘asm’
129
  __asm__("@ __pv_stub\n"    \
130
  ^
131
/home/jojo/linux-kernel/arch/arm/include/asm/memory.h:175:2: note: in expansion of macro ‘__pv_stub’
132
  __pv_stub(x, t, "add", __PV_BITS_31_24);
133
  ^
134
make[1]: *** [init/main.o] Fehler 1
135
make: *** [init] Fehler 2

Sieht nicht gut aus, oder? Ich würde mich ja auch mit der Antwort "Auf 
virtuellen Maschinen geht das nicht." zufrieden geben ;) ...

Gruß

von Jojo (Gast)


Lesenswert?

ich schrieb:
> Ich denke er verwendet den linux-sunxi fork, da gibt es
> sun7i_defconfig.
> Der letzte nightly build mit sun7i_defconfig lief auch ohne Probleme, es
> sollte also nicht am Kernel liegen.

So ist es :) . Sorry, hatte ich nicht erwähnt...

von SI (Gast)


Lesenswert?

ich schrieb:
> Ich denke er verwendet den linux-sunxi fork, da gibt es sun7i_defconfig.
> Der letzte nightly build mit sun7i_defconfig lief auch ohne Probleme, es
> sollte also nicht am Kernel liegen.

Ah. Aber sollte man das nicht mit "make 'boardtype' 
CROSS_COMPILE=arm-linux-gnueabihf-" kompilieren?

von Jojo (Gast)


Lesenswert?

Hm... das weiß ich nicht :( . Ich hab die Befehle nur so aus den 
Tutorials übernommen -_- . Ich werde ich gleich nochmal genau so an dem 
Linux-PC versuchen.

Hab auch grad versucht einen Patch per git anzuwenden. Das ging auch 
nicht.

Gruß

von JPG-For (Gast)


Lesenswert?

$ make V=1

dann siehst Du, ob tatsächlich auch der richtige Compiler
verwendet wird.

von Rolf Magnus (Gast)


Lesenswert?

Jojo schrieb:
> Ich würde mich ja auch mit der Antwort "Auf virtuellen Maschinen geht das
> nicht." zufrieden geben ;)

Ich halte es für sehr unwahrscheinlich, daß diese Antwort korrekt wäre. 
Den Compiler juckt das eigentlich überhaupt nicht, ob der direkt auf 
einem realen System oder in einer VM läuft. Es muß da noch irgend ein 
anderer Unterschied zwischen den beiden Systemen sein.

von SI (Gast)


Lesenswert?

Probier doch mal die Schritte unter 
http://linux-sunxi.org/Linux_Kernel#Compilation.

Wenn es dann immer noch hakt, stimmt mit der Toolchain etwas nicht.

von Georg (Gast)


Lesenswert?

Jojo schrieb:
> Ich würde mich ja auch mit der Antwort "Auf
> virtuellen Maschinen geht das nicht." zufrieden geben

Ein Cross-Compiler ist doch von der System-Umgebung, in der er läuft, 
völlig unabhängig, das ist im Prinzip eine reine Text rein - Binär raus 
Maschine. Was sollte es denn einen Z80-Compiler interessieren, welche 
DLLs in Windows installiert sind, der verarbeitet nur seine Z80 
Libraries usw.

Georg

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.