1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
device: 0.146
other: 0.102
permissions: 0.097
semantic: 0.095
PID: 0.082
socket: 0.074
files: 0.066
debug: 0.062
boot: 0.057
network: 0.055
graphic: 0.053
performance: 0.041
KVM: 0.037
vnc: 0.032
device: 0.203
boot: 0.141
PID: 0.127
socket: 0.085
files: 0.081
vnc: 0.081
debug: 0.078
other: 0.052
performance: 0.049
semantic: 0.046
network: 0.019
graphic: 0.019
KVM: 0.010
permissions: 0.010
qemu-system-arm segmentation fault with cpu cortex-m*
I try to run an emulation with qemu-system-arm under a cpu cortex-m3 but any execution under the processor result by a segmentation fault.
My command is : qemu-system-arm -m 256 -M versatilepb -cpu cortex-m3 -kernel ~/qemu/wheezy/vmlinuz-3.2.0-4-versatile -initrd ~/qemu/wheezy/initrd.img-3.2.0-4-versatile -hda ~/qemu/wheezy/hda.img -append 'root=/dev/sda1'
If a lauch the emulation without specifying a cpu equivalent to cortex-m*, the vm opens up well and works but I absolutely need to run it under cortex-m3.
Do you have any idea why I have this problem only with this type of processor ?
I also try with other boards different from versatilepb but I have the same result.
I am under ubuntu 17 64bits during my test.
On 29 October 2017 at 19:24, Kevin <email address hidden> wrote:
> I try to run an emulation with qemu-system-arm under a cpu cortex-m3 but
> any execution under the processor result by a segmentation fault.
>
> My command is : qemu-system-arm -m 256 -M versatilepb -cpu cortex-m3
> -kernel ~/qemu/wheezy/vmlinuz-3.2.0-4-versatile -initrd
> ~/qemu/wheezy/initrd.img-3.2.0-4-versatile -hda ~/qemu/wheezy/hda.img
> -append 'root=/dev/sda1'
This command line is never going to work, for multiple reasons.
Unfortunately QEMU currently doesn't do a good job of identifying
option combinations which we know are wrong (like -cpu cortex-m3
with -M versatilepb) and printing an error message.
The major problem here is that the cortex-m3 is a microcontroller,
which is significantly different from the 'A-profile' devices
that Linux runs on. It has no MMU and usually 16MB of RAM or less:
why are you trying to run Linux on it? This will never work.
Secondly, the "versatilepb" board is not a board which you can
use a Cortex-M3 with -- it's only intended to work with certain
CPUs, mainly the arm926.
Thirdly, that looks like a prebuilt versatile kernel image -- it
probably won't work with a random CPU that's not the one the
versatile has, and it *definitely* won't work with the M3.
Basic rule of thumb for QEMU ARM boards -- don't try to specify
"-cpu" unless you have documentation that specifically tells you
to. You're much more likely to create something that's just
a broken config that guest software can't handle. This is
always true for the Cortex-M3 -- unless the board is intended
to work with the M3 and is creating the correct interrupt
controller, you'll just end up with a broken model.
If you need to use the Cortex-M3 then use one of the boards
which works with it -- lm3s6965evb, lm3s811evb, mps2-an385,
mps2-an511, or netduino2. You'll also need to run guest code
which is actually built for the board you're using and for
the Cortex-M3 (likely some kind of RTOS, or bare metal code.)
The MPS2 boards have the most RAM, but they're only in recent
QEMU versions.
thanks
-- PMM
Thank you for you answer.
I wanted to emulate under cortex-M3 because I need to exéutute an executable who will install a kernel but only runs under cortex-M3, for then realized fuzzing on this kernel.
But, I will try with freeRTOS.
I'm closing this bug as it's a command line issue. Please open a new bug if you have further problems.
|