# ARMv7 mit QEMU emulieren

## schmidicom

Ich möchte mir in einer QEMU-VM ein ARMv7 Gentoo hochziehen, scheitere da aber an zwei Punkten.

- erstes Problem: Maschinentyp

QEMU bietet ja einige Maschinentypen zur Auswahl, nur welcher wäre für ein "stage3-armv7a_hardfp" besten geeignet?

```
Supported machines are:

akita                Akita PDA (PXA270)

borzoi               Borzoi PDA (PXA270)

canon-a1100          Canon PowerShot A1100 IS

cheetah              Palm Tungsten|E aka. Cheetah PDA (OMAP310)

collie               Collie PDA (SA-1110)

connex               Gumstix Connex (PXA255)

cubieboard           cubietech cubieboard

highbank             Calxeda Highbank (ECX-1000)

integratorcp         ARM Integrator/CP (ARM926EJ-S)

kzm                  ARM KZM Emulation Baseboard (ARM1136)

lm3s6965evb          Stellaris LM3S6965EVB

lm3s811evb           Stellaris LM3S811EVB

mainstone            Mainstone II (PXA27x)

midway               Calxeda Midway (ECX-2000)

musicpal             Marvell 88w8618 / MusicPal (ARM926EJ-S)

n800                 Nokia N800 tablet aka. RX-34 (OMAP2420)

n810                 Nokia N810 tablet aka. RX-44 (OMAP2420)

none                 empty machine

nuri                 Samsung NURI board (Exynos4210)

realview-eb          ARM RealView Emulation Baseboard (ARM926EJ-S)

realview-eb-mpcore   ARM RealView Emulation Baseboard (ARM11MPCore)

realview-pb-a8       ARM RealView Platform Baseboard for Cortex-A8

realview-pbx-a9      ARM RealView Platform Baseboard Explore for Cortex-A9

smdkc210             Samsung SMDKC210 board (Exynos4210)

spitz                Spitz PDA (PXA270)

sx1                  Siemens SX1 (OMAP310) V2

sx1-v1               Siemens SX1 (OMAP310) V1

terrier              Terrier PDA (PXA270)

tosa                 Tosa PDA (PXA255)

verdex               Gumstix Verdex (PXA270)

versatileab          ARM Versatile/AB (ARM926EJ-S)

versatilepb          ARM Versatile/PB (ARM926EJ-S)

vexpress-a15         ARM Versatile Express for Cortex-A15

vexpress-a9          ARM Versatile Express for Cortex-A9

virt                 ARM Virtual Machine

xilinx-zynq-a9       Xilinx Zynq Platform Baseboard for Cortex-A9

z2                   Zipit Z2 (PXA27x)
```

- zweites Problem: Kernel

Da crossdev bei mir nicht funktioniert (bitte nicht fragen warum ich weiß es auch nicht) bräuchte ich einen fertig kompilierten Kernel mit dessen Hilfe ein erster boot erfolgreich über die Bühne gehen kann, nur wo findet man sowas?

----------

## Yamakuzure

Das Problem hatte ich auch. qemu kann schlicht keinen Cortex-A8. Die Plattform, mit der ich am weitesten kam, war "cubieboard", aber gebootet wurde dann leider nichts. (Hatte versucht einen Raspberry Pi 2 zu emulieren.)

... vielleicht war mein Kernel auch nicht in Ordnung...

Beim Crossdev gibt es das Problem, zumindest war das bei mir so, dass das mit gcc-4.9 nicht ging. Also habe ich derzeit:

```
 ~ $ eix -I -e gcc -c

[I] cross-armv7a-hardfloat-linux-gnueabi/gcc [1] (4.8.3(4.8.3)@27.02.2015): The GNU Compiler Collection

[I] sys-devel/gcc (4.9.2-r100(4.9)[3]@09.12.2014): The GNU Compiler Collection
```

mit dem 4.8.3 liefs dann wunderbar nach Anleitung, nachdem ich das Folgende gemacht hatte:crossbuild toolchain auf gcc-4.8 limitieren (4.9 schlicht maskieren)Wenn glibc-headers gebaut werden, mit strg+z anhalten, sobald die "prepare" Phase durch ist.Im build Verzeichnis in der Datei dir/sysdeps/arm/sysdep.h die Zeile

"#define __ARM_ARCH_7A__"

hinzufügen. Sonst beendet sich der ganze Krempel mit "unknown architecture" und der ganze Spaß scheitert dann an späterer Stelle.mit "fg" fortführen.(Die "spätere Stelle" ist dann glibc selber, da beendet sich das Konfigurieren mit 

```
checking for .preinit_array/.init_array/.fini_array support... no

configure: error: Need linker with .init_array/.fini_array support.
```

was mich so einige graue Haare gekostet hat.)

----------

## schmidicom

Selbst wenn crossdev bei mir funktionieren würde hätte ich wenig Bock damit mein System zuzumüllen. Echt scheiße das der QEMU keinen Raspberry Pi, geschweige denn Version 2, simulieren kann denn dann müsste man nur ein Abbild der SD-Karte einbinden und könnte sofort loslegen.

----------

## Yamakuzure

 *schmidicom wrote:*   

> Selbst wenn crossdev bei mir funktionieren würde hätte ich wenig Bock damit mein System zuzumüllen. Echt scheiße das der QEMU keinen Raspberry Pi, geschweige denn Version 2, simulieren kann denn dann müsste man nur ein Abbild der SD-Karte einbinden und könnte sofort loslegen.

 Oh, Version 1 funktioniert wunderbar:Installing Gentoo on Raspberry Pi

Und zumüllen, naja, ich will das Teil ja auch aktualisieren können ohne dauernd die SD-Karte umhängen zu müssen, also habe ich mir den Cross-Dev-Kram halt angetan...

----------

## schmidicom

 *Yamakuzure wrote:*   

>  *schmidicom wrote:*   Selbst wenn crossdev bei mir funktionieren würde hätte ich wenig Bock damit mein System zuzumüllen. Echt scheiße das der QEMU keinen Raspberry Pi, geschweige denn Version 2, simulieren kann denn dann müsste man nur ein Abbild der SD-Karte einbinden und könnte sofort loslegen. Oh, Version 1 funktioniert wunderbar:Installing Gentoo on Raspberry Pi

 

Was da aber simuliert wird ist ein "versatilepb" und kein raspberry pi. Mag sein das die sich ähnlich genug sind um den selben Userspace laufen lassen zu können aber deswegen ist es trotzdem noch kein raspberry pi.

 *Yamakuzure wrote:*   

> Und zumüllen, naja, ich will das Teil ja auch aktualisieren können ohne dauernd die SD-Karte umhängen zu müssen, also habe ich mir den Cross-Dev-Kram halt angetan...

  Zumüllen war vermutlich etwas zu emotional ausgedrückt aber ich will bei meiner x86 Softwareauswahl nicht auch noch auf crossdev Rücksicht nehmen müssen. Und nur deswegen ein weiteres Gentoo aufsetzen sehe ich irgendwie auch nicht ein.

----------

## musv

Das ist interessant. Ich hatte mit Crossdev-ARM mal vor 2 Jahren rumgespielt. Wollte damals für einen ARMv5 und für mein Notebook (x86 Atom) compilieren. 

Es war ein Desaster. Die damalige Anleitung war unvollständig. Und selbst hier im Forum konnten die letzten Probleme nicht gelöst werden. 

Manche Pakete hab ich durchaus dazu bewegen können erfolgreich zu bauen. Bei vielen Paketen tauchten jedoch Probleme auf, dass die Configure-Scripte nicht mit den Cross-Dev-Pfaden zurecht kamen und irgendwelche Abhängigkeiten nicht finden konnten, obwohl die entsprechenden Pakete installiert waren. 

Bei Qemu bin ich ebenfalls daran gescheitert, dass ich damals nichts für ARMv5tel gefunden hab.

Gibt's mittlerweile eine brauchbare Anleitung?

----------

## Yamakuzure

 *schmidicom wrote:*   

> Was da aber simuliert wird ist ein "versatilepb" und kein raspberry pi. Mag sein das die sich ähnlich genug sind um den selben Userspace laufen lassen zu können aber deswegen ist es trotzdem noch kein raspberry pi.

 Kleines Mißbverständnis? Was da simuliert wird ist das Board, nicht das Endgerät.  :Wink: 

 *schmidicom wrote:*   

> Zumüllen war vermutlich etwas zu emotional ausgedrückt aber ich will bei meiner x86 Softwareauswahl nicht auch noch auf crossdev Rücksicht nehmen müssen. Und nur deswegen ein weiteres Gentoo aufsetzen sehe ich irgendwie auch nicht ein.

 Du brauchst auf nichts Rücksicht nehmen. In /etc/portage müssen einige Dateien in Verzeichnisse umbenannt werden, dann hat crossdev seine eigenen Versionen von sachen wie keywords und USE flags:

```
 ~ $ ls -1 /etc/portage/*/cross*

/etc/portage/package.env/cross-armv7a-hardfloat-linux-gnueabi

/etc/portage/package.keywords/cross-armv7a-hardfloat-linux-gnueabi

/etc/portage/package.mask/crossdev.mask

/etc/portage/package.use/cross-armv7a-hardfloat-linux-gnueabi

/etc/portage/env/cross-armv7a-hardfloat-linux-gnueabi:

binutils.conf

gcc.conf

gdb.conf

glibc.conf

linux-headers.conf
```

Das ist alles komplett außerhalb deiner normalen Systemverwaltung.

----------

## Funitarzer

 *Yamakuzure wrote:*   

> Das Problem hatte ich auch. qemu kann schlicht keinen Cortex-A8. Die Plattform, mit der ich am weitesten kam, war "cubieboard", aber gebootet wurde dann leider nichts. (Hatte versucht einen Raspberry Pi 2 zu emulieren.)
> 
> ... vielleicht war mein Kernel auch nicht in Ordnung...
> 
> Beim Crossdev gibt es das Problem, zumindest war das bei mir so, dass das mit gcc-4.9 nicht ging. Also habe ich derzeit:
> ...

 

Und wenn nicht Cortex-A8 aber der frühe Modellansatz ist der gleiche?

----------

