Skip to content

Commit c0a8c41

Browse files
edersondisouzadkalowsk
authored andcommitted
boards/qemu/x86: Add qemu_x86_64_kvm
New kvm-enabled qemu board definition, which also includes CET support. Note that to have CET support on qemu, one needs a fairly recent Linux kernel (at least 6.18) and qemu (at least version 11.0). Also note that current Zephyr SDK (as of this patch, 1.0.1) qemu-x86_64 does not support CET (as it's still on version 10.x). So to use it, one needs to point to a supporting qemu (for instance, by using `QEMU_BIN_PATH` when building). Signed-off-by: Ederson de Souza <ederson.desouza@intel.com>
1 parent 2b0b932 commit c0a8c41

8 files changed

Lines changed: 69 additions & 5 deletions

File tree

boards/qemu/x86/Kconfig

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ config BOARD_QEMU_X86
66
bool
77
default y
88
select CPU_HAS_FPU if BOARD_QEMU_X86 || BOARD_QEMU_X86_LAKEMONT || BOARD_QEMU_X86_TINY
9-
select X86_64 if BOARD_QEMU_X86_64
9+
select X86_64 if BOARD_QEMU_X86_64 || BOARD_QEMU_X86_64_KVM
10+
select X86_CPU_HAS_CET if BOARD_QEMU_X86_64_KVM

boards/qemu/x86/Kconfig.defconfig

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
# SPDX-License-Identifier: Apache-2.0
22
# Copyright (c) 2019 Intel Corp.
33

4-
if BOARD_QEMU_X86 || BOARD_QEMU_X86_64 || BOARD_QEMU_X86_LAKEMONT || BOARD_QEMU_X86_TINY
4+
if BOARD_QEMU_X86 || BOARD_QEMU_X86_64 || BOARD_QEMU_X86_LAKEMONT || BOARD_QEMU_X86_TINY || \
5+
BOARD_QEMU_X86_64_KVM
56

67
# The EEPROM emulator must be initialized after the flash simulator
78
config EEPROM_INIT_PRIORITY
@@ -17,7 +18,7 @@ config QEMU_TARGET
1718
config HAS_COVERAGE_SUPPORT
1819
default y
1920

20-
endif # BOARD_QEMU_X86 || BOARD_QEMU_X86_64 || BOARD_QEMU_X86_LAKEMONT || BOARD_QEMU_X86_TINY
21+
endif # BOARD_QEMU_X86 || BOARD_QEMU_X86_64 || BOARD_QEMU_X86_LAKEMONT || BOARD_QEMU_X86_TINY...
2122

2223

2324
if BOARD_QEMU_X86
@@ -47,7 +48,7 @@ config QEMU_ICOUNT_SHIFT
4748
endif # BOARD_QEMU_X86
4849

4950

50-
if BOARD_QEMU_X86_64
51+
if BOARD_QEMU_X86_64 || BOARD_QEMU_X86_64_KVM
5152

5253
config KERNEL_VM_SIZE
5354
default 0x10000000 if ACPI
@@ -107,3 +108,10 @@ config DEMAND_PAGING_PAGE_FRAMES_RESERVE
107108
default 6 if NEWLIB_LIBC || (COMMON_LIBC_MALLOC && COMMON_LIBC_MALLOC_ARENA_SIZE != 0)
108109

109110
endif # BOARD_QEMU_X86_TINY
111+
112+
if BOARD_QEMU_X86_64_KVM
113+
114+
config SYS_CLOCK_HW_CYCLES_PER_SEC
115+
default $(dt_node_int_prop_int,/cpus/cpu@0,clock-frequency)
116+
117+
endif # BOARD_QEMU_X86_64_KVM
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Copyright (c) 2026 Intel Corporation
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
5+
config BOARD_QEMU_X86_64_KVM
6+
select SOC_ATOM

boards/qemu/x86/board.cmake

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33

44
set(SUPPORTED_EMU_PLATFORMS qemu)
55

6-
if(CONFIG_X86_64)
6+
if(CONFIG_BOARD_QEMU_X86_64_KVM)
7+
set(QEMU_BINARY_SUFFIX x86_64)
8+
set(QEMU_CPU_TYPE host,+x2apic)
9+
list(APPEND QEMU_EXTRA_FLAGS -rtc clock=vm --enable-kvm)
10+
elseif(CONFIG_X86_64)
711
set(QEMU_BINARY_SUFFIX x86_64)
812
set(QEMU_CPU_TYPE qemu64,+x2apic)
913
if("${CONFIG_MP_MAX_NUM_CPUS}" STREQUAL "1")

boards/qemu/x86/board.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,10 @@ boards:
3131
vendor: intel
3232
socs:
3333
- name: atom
34+
35+
- name: qemu_x86_64_kvm
36+
full_name: QEMU Emulation for X86 64bit, KVM enabled
37+
socs:
38+
- name: atom
39+
variants:
40+
- name: 'nokpti'
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/*
2+
* Copyright (c) 2026 Intel Corp.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
#include "qemu_x86_64.dts"
6+
7+
&cpu {
8+
clock-frequency = <25000000>;
9+
};
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
identifier: qemu_x86_64_kvm
2+
name: QEMU Emulation for X86_64 (KVM enabled)
3+
type: qemu
4+
arch: x86
5+
toolchain:
6+
- zephyr
7+
supported:
8+
- smp
9+
simulation:
10+
- name: qemu
11+
testing:
12+
default: false
13+
ignore_tags:
14+
- benchmark
15+
- kernel
16+
vendor: qemu
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
CONFIG_PICOLIBC_USE_MODULE=y
2+
CONFIG_PIC_DISABLE=y
3+
CONFIG_LOAPIC=y
4+
CONFIG_CONSOLE=y
5+
CONFIG_SERIAL=y
6+
CONFIG_UART_CONSOLE=y
7+
CONFIG_TEST_RANDOM_GENERATOR=y
8+
CONFIG_X86_DEBUG_INFO=y
9+
CONFIG_SMP=y
10+
CONFIG_MP_MAX_NUM_CPUS=2
11+
CONFIG_X86_MMU=y
12+
CONFIG_X86_VERY_EARLY_CONSOLE=y
13+
CONFIG_QEMU_ICOUNT=n

0 commit comments

Comments
 (0)