From 6205eafd4ce3141ebf1e756793b80219006f9d58 Mon Sep 17 00:00:00 2001 From: Andrey Turkin Date: Thu, 14 Nov 2024 06:54:10 +0300 Subject: [PATCH] Fix make qemu rasperry pi 3b emulation --- mk/podman.mk | 2 +- mk/qemu.mk | 73 +++++++++++++++++++++++++++++++--------------------- 2 files changed, 45 insertions(+), 30 deletions(-) diff --git a/mk/podman.mk b/mk/podman.mk index cd9e214..3bea7df 100644 --- a/mk/podman.mk +++ b/mk/podman.mk @@ -10,7 +10,7 @@ PODMAN_HOME?=$(ROOT)/build/podman ## Podman command with its many arguments PODMAN_VOLUMES?=--volume $(ROOT):$(CONTAINER_WORKDIR):Z --volume $(PODMAN_HOME):/home:Z PODMAN_ENV?=--env PATH=/home/poduser/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin --env PODMAN_BUILD=0 -PODMAN_CONFIG?=--env ARCH=$(ARCH) --env CONFIG_NAME=$(CONFIG_NAME) --env FILESYSTEM_CONFIG=$(FILESYSTEM_CONFIG) +PODMAN_CONFIG?=--env ARCH=$(ARCH) --env BOARD=$(BOARD) --env CONFIG_NAME=$(CONFIG_NAME) --env FILESYSTEM_CONFIG=$(FILESYSTEM_CONFIG) PODMAN_OPTIONS?=--rm --workdir $(CONTAINER_WORKDIR) --userns keep-id --user `id -u` --interactive --tty --env TERM=$(TERM) PODMAN_RUN?=podman run $(PODMAN_OPTIONS) $(PODMAN_VOLUMES) $(PODMAN_ENV) $(PODMAN_CONFIG) $(IMAGE_TAG) diff --git a/mk/qemu.mk b/mk/qemu.mk index 191b27f..6eedf78 100644 --- a/mk/qemu.mk +++ b/mk/qemu.mk @@ -32,25 +32,35 @@ else ifeq ($(ARCH),aarch64) # Default to UEFI as U-Boot doesn't set up a framebuffer for us and we don't yet support # setting up a framebuffer ourself. uefi?=yes - live=yes + live?=yes QEMU_ARCH=aarch64 QEMU_MACHINE?=virt QEMU_CPU=max QEMU_SMP?=1 QEMU_MEM?=2048 ifeq ($(BOARD),raspi3bp) - FIRMWARE=$(BUILD)/raspi3bp_uboot.rom + QEMU_KERNEL=$(BUILD)/raspi3bp_uboot.rom disk?=sdcard - else ifeq ($(uefi),yes) - FIRMWARE=/usr/share/AAVMF/AAVMF_CODE.fd + QEMU_MACHINE:=raspi3b + QEMU_SMP:=4 + QEMU_MEM:=1024 + net:=usb-net + audio:=no + ifneq ($(usb),no) + QEMUFLAGS+=-usb -device usb-kbd -device usb-tablet + endif else - FIRMWARE=$(BUILD)/qemu_uboot.rom - endif - ifneq ($(gpu),no) - QEMUFLAGS+=-device ramfb - endif - ifneq ($(usb),no) - QEMUFLAGS+=-device qemu-xhci -device usb-kbd -device usb-tablet + ifeq ($(uefi),yes) + FIRMWARE=/usr/share/AAVMF/AAVMF_CODE.fd + else + FIRMWARE=$(BUILD)/qemu_uboot.rom + endif + ifneq ($(gpu),no) + QEMUFLAGS+=-device ramfb + endif + ifneq ($(usb),no) + QEMUFLAGS+=-device qemu-xhci -device usb-kbd -device usb-tablet + endif endif else ifeq ($(ARCH),riscv64gc) live=no @@ -92,6 +102,10 @@ ifneq ($(FIRMWARE),) QEMUFLAGS+=-bios $(FIRMWARE) endif +ifneq ($(QEMU_KERNEL),) + QEMUFLAGS+=-kernel $(QEMU_KERNEL) +endif + ifeq ($(live),yes) DISK=$(BUILD)/livedisk.iso else @@ -123,26 +137,25 @@ endif ifeq ($(net),no) QEMUFLAGS+=-net none -else ifeq ($(net),rtl8139) - # RTL8139 - QEMUFLAGS+=-netdev user,id=net0 -device rtl8139,netdev=net0 \ - -object filter-dump,id=f1,netdev=net0,file=$(BUILD)/network.pcap -else ifeq ($(net),virtio) - # virtio-net - QEMUFLAGS+=-netdev user,id=net0 -device virtio-net,netdev=net0 \ - -object filter-dump,id=f1,netdev=net0,file=$(BUILD)/network.pcap else - ifneq ($(bridge),) - QEMUFLAGS+=-netdev bridge,br=$(bridge),id=net0 -device e1000,netdev=net0,id=nic0 + ifeq ($(net),rtl8139) # RTL8139 + QEMUFLAGS+=-device rtl8139,netdev=net0 + else ifeq ($(net),virtio) # virtio-net + QEMUFLAGS+=-device virtio-net,netdev=net0 + else ifeq ($(net),usb-net) + QEMUFLAGS+=-device usb-net,netdev=net0 else - ifeq ($(net),redir) - # port 8080 and 8083 - webservers - # port 64126 - our gdbserver implementation - QEMUFLAGS+=-netdev user,id=net0,hostfwd=tcp::8080-:8080,hostfwd=tcp::8083-:8083,hostfwd=tcp::64126-:64126 -device e1000,netdev=net0,id=nic0 - else - QEMUFLAGS+=-netdev user,id=net0 -device e1000,netdev=net0 \ - -object filter-dump,id=f1,netdev=net0,file=$(BUILD)/network.pcap - endif + QEMUFLAGS+=-device e1000,netdev=net0,id=nic0 + endif + + ifneq ($(bridge),) + QEMUFLAGS+=-netdev bridge,br=$(bridge),id=net0 + else ifeq ($(net),redir) + # port 8080 and 8083 - webservers + # port 64126 - our gdbserver implementation + QEMUFLAGS+=-netdev user,id=net0,hostfwd=tcp::8080-:8080,hostfwd=tcp::8083-:8083,hostfwd=tcp::64126-:64126 + else + QEMUFLAGS+=-netdev user,id=net0 -object filter-dump,id=f1,netdev=net0,file=$(BUILD)/network.pcap endif endif @@ -221,6 +234,8 @@ endif qemu-deps:$(FIRMWARE) +qemu-deps:$(QEMU_KERNEL) + qemu-deps: $(PFLASH0) ifneq ($(PFLASH1),)