summaryrefslogtreecommitdiffstats
path: root/Documentation/mainboard/emulation/qemu-q35.md
blob: cebbc637d63b7d01eb86cc4fe97db21025df1ed7 (plain)
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
# qemu q35 mainboard

## Running coreboot in qemu
Emulators like qemu don't need a firmware to do hardware init.
The hardware starts in the configured state already.

The coreboot port allows to test non mainboard specific code.
As you can easily attach a debugger, it's a good target for
experimental code.

## coreboot x86_64 support
coreboot historically runs in 32-bit protected mode, even though the
processor supports x86_64 instructions (long mode).

The qemu-q35 mainboard has been ported to x86_64 and will serve as
reference platform to enable additional platforms.

To enable the support set the Kconfig option ``CONFIG_USE_EXP_X86_64_SUPPORT=y``.

## Installing qemu

On debian you can install qemu by running:
```bash
$ sudo apt-get install qemu
```

On redhat you can install qemu by running:
```bash
$ sudo dnf install qemu
```

## Running coreboot
### To run the i386 version of coreboot (default)
Running on qemu-system-i386 will require a 32 bit operating system.

```bash
qemu-system-i386 -bios build/coreboot.rom -serial stdio -M q35
```

### To run the experimental x86_64 version of coreboot
Running on `qemu-system-x86_64` allows to run a 32 bit or 64 bit operating system
and firmware.

```bash
qemu-system-x86_64 -bios build/coreboot.rom -serial stdio -M q35
```

## Finding bugs
To test coreboot's x86 code it's recommended to run on a x86 host and enable KVM.
It will not only run faster, but is closer to real hardware. If you see the
following message:

    KVM internal error. Suberror: 1
    emulation failure

something went wrong. The same bug will likely cause a FAULT on real hardware,
too.

To enable KVM run:

```bash
qemu-system-x86_64 -bios build/coreboot.rom -serial stdio -M q35 -accel kvm -cpu host
```