From 9713014130b68de09e275138414a35c5a057d879 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Mon, 7 Mar 2022 15:32:00 +0100 Subject: [PATCH] dde_linux: add virt_linux lx_emul flavor To support device-less protocol-stacks only ports, we can use a Virt I/O Linux kernel flavor, and export the lx_kit/lx_emul parts not depending on platform API and devices. Ref #4397 --- repos/dde_linux/lib/import/import-lx_emul.mk | 12 ++++++ repos/dde_linux/lib/mk/lx_emul.mk | 2 + .../mk/spec/x86_64/virt_linux_generated.mk | 3 ++ .../dde_linux/lib/mk/virt_linux_generated.inc | 30 +++++++++++++++ repos/dde_linux/src/virt_linux/README | 14 +++++++ repos/dde_linux/src/virt_linux/target.inc | 35 ++++++++++++++++++ .../dde_linux/src/virt_linux/x86_32/target.mk | 37 +++++++++++++++++++ .../dde_linux/src/virt_linux/x86_64/target.mk | 37 +++++++++++++++++++ 8 files changed, 170 insertions(+) create mode 100644 repos/dde_linux/lib/import/import-lx_emul.mk create mode 100644 repos/dde_linux/lib/mk/lx_emul.mk create mode 100644 repos/dde_linux/lib/mk/spec/x86_64/virt_linux_generated.mk create mode 100644 repos/dde_linux/lib/mk/virt_linux_generated.inc create mode 100644 repos/dde_linux/src/virt_linux/README create mode 100644 repos/dde_linux/src/virt_linux/target.inc create mode 100644 repos/dde_linux/src/virt_linux/x86_32/target.mk create mode 100644 repos/dde_linux/src/virt_linux/x86_64/target.mk diff --git a/repos/dde_linux/lib/import/import-lx_emul.mk b/repos/dde_linux/lib/import/import-lx_emul.mk new file mode 100644 index 0000000000..fe19478aaf --- /dev/null +++ b/repos/dde_linux/lib/import/import-lx_emul.mk @@ -0,0 +1,12 @@ +LIBS += virt_linux_generated + +LX_SRC_DIR := $(call select_from_ports,linux)/src/linux +ifeq ($(wildcard $(LX_SRC_DIR)),) +LX_SRC_DIR := $(call select_from_repositories,src/linux) +endif + +LX_GEN_DIR := $(LIB_CACHE_DIR)/virt_linux_generated + +-include $(call select_from_repositories,lib/import/import-lx_emul_common.inc) + +SRC_CC += lx_kit/memory_non_dma.cc diff --git a/repos/dde_linux/lib/mk/lx_emul.mk b/repos/dde_linux/lib/mk/lx_emul.mk new file mode 100644 index 0000000000..24e4f4520d --- /dev/null +++ b/repos/dde_linux/lib/mk/lx_emul.mk @@ -0,0 +1,2 @@ +# the lx_emul libray exists only for the import file + diff --git a/repos/dde_linux/lib/mk/spec/x86_64/virt_linux_generated.mk b/repos/dde_linux/lib/mk/spec/x86_64/virt_linux_generated.mk new file mode 100644 index 0000000000..0ce815f48c --- /dev/null +++ b/repos/dde_linux/lib/mk/spec/x86_64/virt_linux_generated.mk @@ -0,0 +1,3 @@ +LINUX_ARCH=x86_64 + +include $(REP_DIR)/lib/mk/virt_linux_generated.inc diff --git a/repos/dde_linux/lib/mk/virt_linux_generated.inc b/repos/dde_linux/lib/mk/virt_linux_generated.inc new file mode 100644 index 0000000000..2c5495fb85 --- /dev/null +++ b/repos/dde_linux/lib/mk/virt_linux_generated.inc @@ -0,0 +1,30 @@ +CUSTOM_TARGET_DEPS := kernel_build.phony + +LX_DIR := $(call select_from_ports,linux)/src/linux +PWD := $(shell pwd) + +LX_MK_ARGS = ARCH=$(LINUX_ARCH) CROSS_COMPILE=$(CROSS_DEV_PREFIX) + +# +# Linux kernel configuration +# + +# define 'LX_ENABLE' and 'LX_DISABLE' +include $(REP_DIR)/src/virt_linux/target.inc + +# filter for make output of kernel build system +BUILD_OUTPUT_FILTER = 2>&1 | sed "s/^/ [Linux] /" + +kernel_config.tag: + $(MSG_CONFIG)Linux + $(VERBOSE)$(MAKE) -C $(LX_DIR) O=$(PWD) $(LX_MK_ARGS) tinyconfig $(BUILD_OUTPUT_FILTER) + $(VERBOSE)$(LX_DIR)/scripts/config $(addprefix --enable ,$(LX_ENABLE)) + $(VERBOSE)$(LX_DIR)/scripts/config $(addprefix --disable ,$(LX_DISABLE)) + $(VERBOSE)$(MAKE) $(LX_MK_ARGS) olddefconfig $(BUILD_OUTPUT_FILTER) + $(VERBOSE)$(MAKE) $(LX_MK_ARGS) prepare $(BUILD_OUTPUT_FILTER) + $(VERBOSE)touch $@ + +# update Linux kernel config on makefile changes +kernel_config.tag: $(MAKEFILE_LIST) + +kernel_build.phony: kernel_config.tag diff --git a/repos/dde_linux/src/virt_linux/README b/repos/dde_linux/src/virt_linux/README new file mode 100644 index 0000000000..e647bb2675 --- /dev/null +++ b/repos/dde_linux/src/virt_linux/README @@ -0,0 +1,14 @@ + +# RUN virt_linux under Qemu (x86_64) + +qemu-system-x86_64 \ + -no-kvm -m 512 \ + -chardev stdio,id=virtiocon0 \ + -device virtio-serial \ + -device virtconsole,chardev=virtiocon0 \ + -netdev tap,id=net0,ifname=tap0,script=no,downscript=no \ + -net nic,model=virtio,netdev=net0 \ + -kernel virt_linux/x86_64/arch/x86_64/boot/bzImage \ + -initrd busybox/initramfs.cpio.gz \ + -append "console=hvc0 ip=dhcp" + diff --git a/repos/dde_linux/src/virt_linux/target.inc b/repos/dde_linux/src/virt_linux/target.inc new file mode 100644 index 0000000000..dd8f184c19 --- /dev/null +++ b/repos/dde_linux/src/virt_linux/target.inc @@ -0,0 +1,35 @@ +# +# Linux kernel configuration +# + +# kernel fundamentals +LX_ENABLE += TTY SERIAL_EARLYCON SERIAL_OF_PLATFORM PRINTK HAS_IOMEM + +# initrd support +LX_ENABLE += BINFMT_ELF BLK_DEV_INITRD + +# network infrastructure +LX_ENABLE += NET NETDEVICES + +# PCI support +LX_ENABLE += PCI + +# Virtio devices +LX_ENABLE += VIRTIO_MENU VIRTIO_PCI VIRTIO_NET VIRTIO_CONSOLE + +# network protocols +LX_ENABLE += INET IP_PNP IP_PNP_DHCP + +# random number generator +LX_ENABLE += HW_RANDOM ARCH_RANDOM RANDOM_TRUST_CPU RANDOM_TRUST_BOOTLOADER +LX_ENABLE += CRYPTO_JITTERENTROPY CRYPTO_ANSI_CPRNG HW_RANDOM_TIMERIOMEM + +# wireguard driver +LX_ENABLE += WIREGUARD WIREGUARD_DEBUG + +# disable optimization not possible in PIC code under Genode +LX_DISABLE += CC_HAS_ASM_GOTO + +# slim down kernel by removing superfluous drivers +LX_DISABLE += HID HID_GENERIC USB_HID VGA_CONSOLE DUMMY_CONSOLE NLS VGA_ARB DEBUG_LIST +LX_DISABLE += INPUT_KEYBOARD INPUT_MOUSE WLAN WIRELESS ETHERNET diff --git a/repos/dde_linux/src/virt_linux/x86_32/target.mk b/repos/dde_linux/src/virt_linux/x86_32/target.mk new file mode 100644 index 0000000000..53ccfcdaf9 --- /dev/null +++ b/repos/dde_linux/src/virt_linux/x86_32/target.mk @@ -0,0 +1,37 @@ +TARGET := x86_32_virt_linux +REQUIRES := x86_32 + +CUSTOM_TARGET_DEPS := kernel_build.phony + +LX_DIR := $(call select_from_ports,linux)/src/linux +PWD := $(shell pwd) + +LX_MK_ARGS = ARCH=x86 CROSS_COMPILE=$(CROSS_DEV_PREFIX) + +# +# Linux kernel configuration +# +# Start with 'make tinyconfig', enable/disable options via 'scripts/config', +# and resolve config dependencies via 'make olddefconfig'. +# + +# define 'LX_ENABLE' and 'LX_DISABLE' +include $(REP_DIR)/src/virt_linux/target.inc + +# filter for make output of kernel build system +BUILD_OUTPUT_FILTER = 2>&1 | sed "s/^/ [Linux] /" + +kernel_config.tag: + $(MSG_CONFIG)Linux + $(VERBOSE)$(MAKE) -C $(LX_DIR) O=$(PWD) $(LX_MK_ARGS) tinyconfig $(BUILD_OUTPUT_FILTER) + $(VERBOSE)$(LX_DIR)/scripts/config --file $(PWD)/.config $(addprefix --enable ,$(LX_ENABLE)) + $(VERBOSE)$(LX_DIR)/scripts/config --file $(PWD)/.config $(addprefix --disable ,$(LX_DISABLE)) + $(VERBOSE)$(MAKE) $(LX_MK_ARGS) olddefconfig $(BUILD_OUTPUT_FILTER) + $(VERBOSE)touch $@ + +# update Linux kernel config on makefile changes +kernel_config.tag: $(MAKEFILE_LIST) + +kernel_build.phony: kernel_config.tag + $(MSG_BUILD)Linux + $(VERBOSE)$(MAKE) $(LX_MK_ARGS) bzImage $(BUILD_OUTPUT_FILTER) diff --git a/repos/dde_linux/src/virt_linux/x86_64/target.mk b/repos/dde_linux/src/virt_linux/x86_64/target.mk new file mode 100644 index 0000000000..bde70321bf --- /dev/null +++ b/repos/dde_linux/src/virt_linux/x86_64/target.mk @@ -0,0 +1,37 @@ +TARGET := x86_64_virt_linux +REQUIRES := x86_64 + +CUSTOM_TARGET_DEPS := kernel_build.phony + +LX_DIR := $(call select_from_ports,linux)/src/linux +PWD := $(shell pwd) + +LX_MK_ARGS = ARCH=x86_64 CROSS_COMPILE=$(CROSS_DEV_PREFIX) + +# +# Linux kernel configuration +# +# Start with 'make tinyconfig', enable/disable options via 'scripts/config', +# and resolve config dependencies via 'make olddefconfig'. +# + +# define 'LX_ENABLE' and 'LX_DISABLE' +include $(REP_DIR)/src/virt_linux/target.inc + +# filter for make output of kernel build system +BUILD_OUTPUT_FILTER = 2>&1 | sed "s/^/ [Linux] /" + +kernel_config.tag: + $(MSG_CONFIG)Linux + $(VERBOSE)$(MAKE) -C $(LX_DIR) O=$(PWD) $(LX_MK_ARGS) tinyconfig $(BUILD_OUTPUT_FILTER) + $(VERBOSE)$(LX_DIR)/scripts/config --file $(PWD)/.config $(addprefix --enable ,$(LX_ENABLE)) + $(VERBOSE)$(LX_DIR)/scripts/config --file $(PWD)/.config $(addprefix --disable ,$(LX_DISABLE)) + $(VERBOSE)$(MAKE) $(LX_MK_ARGS) olddefconfig $(BUILD_OUTPUT_FILTER) + $(VERBOSE)touch $@ + +# update Linux kernel config on makefile changes +kernel_config.tag: $(MAKEFILE_LIST) + +kernel_build.phony: kernel_config.tag + $(MSG_BUILD)Linux + $(VERBOSE)$(MAKE) $(LX_MK_ARGS) bzImage $(BUILD_OUTPUT_FILTER)