From 3a9ef487215ea7597b3ec7c165892848377fc90f Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Fri, 27 Jan 2023 16:04:29 +0100 Subject: [PATCH] dde_linux: separate virt_linux from wireguard Preparation to support further hardware-agnostic dde_linux components (incl. lxip and tests). Fixes #4774 --- repos/dde_linux/lib/import/import-lx_emul.mk | 12 -- .../lib/import/import-virt_lx_emul.mk | 37 ++++ .../lib/mk/{lx_emul.mk => virt_lx_emul.mk} | 0 repos/dde_linux/lib/mk/wireguard.inc | 8 +- .../lib/mk/wireguard_lx_inc_dirs.inc | 3 +- .../recipes/src/wireguard/content.mk | 29 +-- repos/dde_linux/run/wg_fetchurl.run | 9 +- repos/dde_linux/src/app/wireguard/dummies.c | 155 --------------- repos/dde_linux/src/app/wireguard/lx_emul.c | 25 --- .../wireguard/spec/arm_64/generated_dummies.c | 5 - .../src/app/wireguard/spec/arm_64/source.list | 13 +- .../wireguard/spec/x86_64/generated_dummies.c | 5 - .../src/app/wireguard/spec/x86_64/source.list | 1 + .../virt_linux}/lx_kit/device.h | 14 ++ .../spec/arm/lx_emul/initcall_order.h | 121 ++++++++++++ .../spec/arm_64/lx_emul/initcall_order.h | 0 .../spec/x86_32/lx_emul/initcall_order.h | 179 ++++++++++++++++++ .../spec/x86_64/lx_emul/initcall_order.h | 49 +++-- .../src/lib/lx_emul/virt/common_dummies.c | 169 +++++++++++++++++ .../wireguard => lib/lx_emul/virt}/irq.cc | 13 ++ .../lx_emul/virt}/spec/arm_64/dummies_arch.c | 0 .../lx_emul/virt/spec/x86}/dummies_arch.c | 0 repos/dde_linux/src/virt_linux/arm/target.mk | 40 ++++ 23 files changed, 628 insertions(+), 259 deletions(-) delete mode 100644 repos/dde_linux/lib/import/import-lx_emul.mk create mode 100644 repos/dde_linux/lib/import/import-virt_lx_emul.mk rename repos/dde_linux/lib/mk/{lx_emul.mk => virt_lx_emul.mk} (100%) rename repos/dde_linux/src/{app/wireguard => include/virt_linux}/lx_kit/device.h (64%) create mode 100644 repos/dde_linux/src/include/virt_linux/spec/arm/lx_emul/initcall_order.h rename repos/dde_linux/src/{app/wireguard => include/virt_linux}/spec/arm_64/lx_emul/initcall_order.h (100%) create mode 100644 repos/dde_linux/src/include/virt_linux/spec/x86_32/lx_emul/initcall_order.h rename repos/dde_linux/src/{app/wireguard => include/virt_linux}/spec/x86_64/lx_emul/initcall_order.h (85%) create mode 100644 repos/dde_linux/src/lib/lx_emul/virt/common_dummies.c rename repos/dde_linux/src/{app/wireguard => lib/lx_emul/virt}/irq.cc (52%) rename repos/dde_linux/src/{app/wireguard => lib/lx_emul/virt}/spec/arm_64/dummies_arch.c (100%) rename repos/dde_linux/src/{app/wireguard/spec/x86_64 => lib/lx_emul/virt/spec/x86}/dummies_arch.c (100%) create mode 100644 repos/dde_linux/src/virt_linux/arm/target.mk diff --git a/repos/dde_linux/lib/import/import-lx_emul.mk b/repos/dde_linux/lib/import/import-lx_emul.mk deleted file mode 100644 index 4411a696de..0000000000 --- a/repos/dde_linux/lib/import/import-lx_emul.mk +++ /dev/null @@ -1,12 +0,0 @@ -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/import/import-virt_lx_emul.mk b/repos/dde_linux/lib/import/import-virt_lx_emul.mk new file mode 100644 index 0000000000..76a762dd2c --- /dev/null +++ b/repos/dde_linux/lib/import/import-virt_lx_emul.mk @@ -0,0 +1,37 @@ +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 + +INC_DIR += $(REP_DIR)/src/include/virt_linux + +ifeq ($(filter-out $(SPECS),x86_32),) + INC_DIR += $(REP_DIR)/src/include/virt_linux/spec/x86_32 +endif +ifeq ($(filter-out $(SPECS),x86_64),) + INC_DIR += $(REP_DIR)/src/include/virt_linux/spec/x86_64 +endif +ifeq ($(filter-out $(SPECS),arm),) + INC_DIR += $(REP_DIR)/src/include/virt_linux/spec/arm +endif +ifeq ($(filter-out $(SPECS),arm_64),) + INC_DIR += $(REP_DIR)/src/include/virt_linux/spec/arm_64 +endif + +-include $(call select_from_repositories,lib/import/import-lx_emul_common.inc) + +SRC_C += lx_emul/shadow/drivers/char/random.c +SRC_C += lx_emul/virt/common_dummies.c +SRC_CC += lx_emul/virt/irq.cc +SRC_CC += lx_kit/memory_non_dma.cc + +ifeq ($(filter-out $(SPECS),x86),) + SRC_C += lx_emul/virt/spec/x86/dummies_arch.c +endif +ifeq ($(filter-out $(SPECS),arm_64),) + SRC_C += lx_emul/virt/spec/arm_64/dummies_arch.c +endif diff --git a/repos/dde_linux/lib/mk/lx_emul.mk b/repos/dde_linux/lib/mk/virt_lx_emul.mk similarity index 100% rename from repos/dde_linux/lib/mk/lx_emul.mk rename to repos/dde_linux/lib/mk/virt_lx_emul.mk diff --git a/repos/dde_linux/lib/mk/wireguard.inc b/repos/dde_linux/lib/mk/wireguard.inc index 38f88d6f33..aad804a4f9 100644 --- a/repos/dde_linux/lib/mk/wireguard.inc +++ b/repos/dde_linux/lib/mk/wireguard.inc @@ -1,7 +1,8 @@ LIBS += base net jitterentropy wireguard_lx_inc_dirs -INC_DIR += $(REP_DIR)/src/app/wireguard -INC_DIR += $(REP_DIR)/src/include +INC_DIR += $(REP_DIR)/src/app/wireguard +INC_DIR += $(REP_DIR)/src/include/virt_linux +INC_DIR += $(REP_DIR)/src/include SRC_CC += arp_cache.cc SRC_CC += arp_waiter.cc @@ -10,10 +11,9 @@ SRC_CC += config_model.cc SRC_CC += dhcp_client.cc SRC_CC += ipv4_address_prefix.cc SRC_CC += ipv4_config.cc -SRC_CC += irq.cc +SRC_CC += lx_emul/random.cc SRC_CC += main.cc SRC_CC += nic_connection.cc -SRC_CC += lx_emul/random.cc SRC_CC += uplink_connection.cc vpath %.cc $(REP_DIR)/src/app/wireguard diff --git a/repos/dde_linux/lib/mk/wireguard_lx_inc_dirs.inc b/repos/dde_linux/lib/mk/wireguard_lx_inc_dirs.inc index c881e4d1ab..24a9be102c 100644 --- a/repos/dde_linux/lib/mk/wireguard_lx_inc_dirs.inc +++ b/repos/dde_linux/lib/mk/wireguard_lx_inc_dirs.inc @@ -13,7 +13,6 @@ GEN_PRG_DIR := $(PRG_DIR)/../.. SRC_C += $(notdir $(wildcard $(PRG_DIR)/generated_dummies.c)) SRC_C += dummies.c -SRC_C += dummies_arch.c SRC_C += lx_emul.c SRC_C += wireguard.c SRC_C += genode_c_api_arch.c @@ -25,7 +24,7 @@ vpath %.c $(GEN_PRG_DIR) INC_DIR += $(PRG_DIR) INC_DIR += $(GEN_PRG_DIR) -LIBS += lx_emul virt_linux_generated +LIBS += virt_lx_emul virt_linux_generated # # We shadow some files of lx_emul and lx_kit in order to locally apply diff --git a/repos/dde_linux/recipes/src/wireguard/content.mk b/repos/dde_linux/recipes/src/wireguard/content.mk index 176abfc302..ab1836e134 100644 --- a/repos/dde_linux/recipes/src/wireguard/content.mk +++ b/repos/dde_linux/recipes/src/wireguard/content.mk @@ -1,24 +1,25 @@ MIRRORED_FROM_REP_DIR := \ - lib/mk/spec/x86_64/wireguard_lx_inc_dirs.mk \ - lib/mk/spec/x86_64/wireguard.mk \ - lib/mk/spec/arm_64/wireguard_lx_inc_dirs.mk \ - lib/mk/spec/arm_64/wireguard.mk \ - lib/mk/wireguard_lx_inc_dirs.inc \ - lib/mk/wireguard.inc \ - lib/mk/lx_emul.mk \ - lib/import/import-lx_emul.mk \ lib/import/import-lx_emul_common.inc \ - lib/mk/spec/x86_64/virt_linux_generated.mk \ + lib/import/import-virt_lx_emul.mk \ lib/mk/spec/arm_64/virt_linux_generated.mk \ + lib/mk/spec/arm_64/wireguard.mk \ + lib/mk/spec/arm_64/wireguard_lx_inc_dirs.mk \ + lib/mk/spec/x86_64/virt_linux_generated.mk \ + lib/mk/spec/x86_64/wireguard.mk \ + lib/mk/spec/x86_64/wireguard_lx_inc_dirs.mk \ lib/mk/virt_linux_generated.inc \ - src/virt_linux/target.inc \ + lib/mk/virt_lx_emul.mk \ + lib/mk/wireguard.inc \ + lib/mk/wireguard_lx_inc_dirs.inc \ src/app/wireguard \ - src/lib/lx_emul \ - src/lib/lx_kit \ - src/include/spec/x86_64/lx_kit \ - src/include/spec/arm_64/lx_kit \ src/include/lx_emul \ src/include/lx_kit \ + src/include/spec/arm_64/lx_kit \ + src/include/spec/x86_64/lx_kit \ + src/include/virt_linux \ + src/lib/lx_emul \ + src/lib/lx_kit \ + src/virt_linux/target.inc \ src/include/lx_user content: $(MIRRORED_FROM_REP_DIR) diff --git a/repos/dde_linux/run/wg_fetchurl.run b/repos/dde_linux/run/wg_fetchurl.run index 8684cdb843..9fc5b9fd22 100644 --- a/repos/dde_linux/run/wg_fetchurl.run +++ b/repos/dde_linux/run/wg_fetchurl.run @@ -36,7 +36,8 @@ import_from_depot [depot_user]/src/libc \ [depot_user]/src/posix \ [depot_user]/src/vfs \ [depot_user]/src/vfs_lwip \ - [depot_user]/src/zlib + [depot_user]/src/zlib \ + [depot_user]/pkg/wireguard append config { @@ -369,11 +370,11 @@ append config { install_config $config append targets { - core init timer server/nic_router app/wireguard server/report_rom + core init timer server/nic_router server/report_rom app/fetchurl } append boot_modules { - core init timer nic_router wireguard fetchurl report_rom curl.lib.so + core init timer nic_router fetchurl report_rom curl.lib.so ld.lib.so } if $linux { @@ -394,7 +395,7 @@ if $linux { build $targets -build_boot_image $boot_modules +build_boot_image [build_artifacts] append qemu_args "-nographic " diff --git a/repos/dde_linux/src/app/wireguard/dummies.c b/repos/dde_linux/src/app/wireguard/dummies.c index 19976a3a1b..2817603062 100644 --- a/repos/dde_linux/src/app/wireguard/dummies.c +++ b/repos/dde_linux/src/app/wireguard/dummies.c @@ -15,145 +15,11 @@ #include -#include - -int __cpuhp_setup_state(enum cpuhp_state state,const char * name,bool invoke,int (* startup)(unsigned int cpu),int (* teardown)(unsigned int cpu),bool multi_instance) -{ - lx_emul_trace(__func__); - return 0; -} - - -#include -struct pt_regs * __irq_regs = NULL; - - -#include - -int __preempt_count = 0; - - -#include - -void account_process_tick(struct task_struct * p,int user_tick) -{ - lx_emul_trace(__func__); -} - - -#include - -int add_random_ready_callback(struct random_ready_callback * rdy) -{ - lx_emul_trace(__func__); - return 0; -} - - -extern int __init buses_init(void); -int __init buses_init(void) -{ - lx_emul_trace(__func__); - return 0; -} - - -#include - -void calc_global_load(void) -{ - lx_emul_trace(__func__); -} - - -extern int __init classes_init(void); -int __init classes_init(void) -{ - lx_emul_trace(__func__); - return 0; -} - - -extern int __init devices_init(void); -int __init devices_init(void) -{ - lx_emul_trace(__func__); - return 0; -} - - -#include - -int __init early_irq_init(void) -{ - lx_emul_trace(__func__); - return 0; -} - - -#include -#include - -int generic_handle_irq(unsigned int irq) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -const struct trace_print_flags gfpflag_names[] = { {0,NULL}}; - - -#include - -void ignore_signals(struct task_struct * t) -{ - lx_emul_trace(__func__); -} - - #include const struct ipv6_stub *ipv6_stub = NULL; -#include - -unsigned long net_rand_noise; - - -#include - -const struct trace_print_flags pageflag_names[] = { {0,NULL}}; - - -extern int __init platform_bus_init(void); -int __init platform_bus_init(void) -{ - lx_emul_trace(__func__); - return 0; -} - - -#include -#include -#include - -void rcu_barrier(void) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -void rcu_sched_clock_irq(int user) -{ - lx_emul_trace(__func__); -} - - #include int register_netdevice(struct net_device * dev) @@ -196,19 +62,6 @@ void synchronize_net(void) } -#include - -void update_vsyscall(struct timekeeper * tk) -{ - lx_emul_trace(__func__); -} - - -#include - -const struct trace_print_flags vmaflag_names[] = { {0,NULL}}; - - #include void rtnl_lock(void) @@ -283,11 +136,3 @@ __wsum csum_partial(const void * buff,int len,__wsum sum) { lx_emul_trace_and_stop(__func__); } - - -#include - -void kvfree(const void * addr) -{ - lx_emul_trace_and_stop(__func__); -} diff --git a/repos/dde_linux/src/app/wireguard/lx_emul.c b/repos/dde_linux/src/app/wireguard/lx_emul.c index a32acb80eb..c079d36fe3 100644 --- a/repos/dde_linux/src/app/wireguard/lx_emul.c +++ b/repos/dde_linux/src/app/wireguard/lx_emul.c @@ -28,14 +28,6 @@ void __icmp_send(struct sk_buff * skb_in,int type,int code,__be32 info,const str } -#include - -void get_random_bytes(void * buf,int nbytes) -{ - lx_emul_random_gen_bytes(buf, nbytes); -} - - #include int wait_for_random_bytes(void) @@ -45,14 +37,6 @@ int wait_for_random_bytes(void) } -#include - -u32 get_random_u32(void) -{ - return lx_emul_random_gen_u32(); -} - - #include u32 prandom_u32(void) @@ -61,15 +45,6 @@ u32 prandom_u32(void) } -#include - -int __must_check get_random_bytes_arch(void * buf, int nbytes) -{ - lx_emul_random_gen_bytes(buf, nbytes); - return nbytes; -} - - #include void * kvmalloc_node(size_t size,gfp_t flags,int node) diff --git a/repos/dde_linux/src/app/wireguard/spec/arm_64/generated_dummies.c b/repos/dde_linux/src/app/wireguard/spec/arm_64/generated_dummies.c index 974b8083fd..e2d5a65703 100644 --- a/repos/dde_linux/src/app/wireguard/spec/arm_64/generated_dummies.c +++ b/repos/dde_linux/src/app/wireguard/spec/arm_64/generated_dummies.c @@ -92,11 +92,6 @@ struct sk_buff * __skb_gso_segment(struct sk_buff * skb,netdev_features_t featur } -#include - -const unsigned char _ctype[] = {}; - - #include atomic_long_t _totalram_pages; diff --git a/repos/dde_linux/src/app/wireguard/spec/arm_64/source.list b/repos/dde_linux/src/app/wireguard/spec/arm_64/source.list index 1cf85b061c..a0026aa395 100644 --- a/repos/dde_linux/src/app/wireguard/spec/arm_64/source.list +++ b/repos/dde_linux/src/app/wireguard/spec/arm_64/source.list @@ -1,18 +1,17 @@ arch/arm64/crypto/chacha-neon-core.S -arch/arm64/crypto/poly1305-glue.c arch/arm64/crypto/chacha-neon-glue.c +arch/arm64/crypto/poly1305-glue.c arch/arm64/kernel/entry-fpsimd.S arch/arm64/kernel/fpsimd.c -arch/arm64/lib/memcmp.S arch/arm64/lib/memchr.S +arch/arm64/lib/memcmp.S arch/arm64/lib/strcmp.S arch/arm64/lib/strlen.S -crypto/skcipher.c -crypto/api.c -lib/hweight.c crypto/algapi.c +crypto/api.c crypto/memneq.c crypto/scatterwalk.c +crypto/skcipher.c drivers/net/wireguard/allowedips.c drivers/net/wireguard/cookie.c drivers/net/wireguard/device.c @@ -43,8 +42,8 @@ kernel/time/clocksource.c kernel/time/hrtimer.c kernel/time/jiffies.c kernel/time/ntp.c -kernel/time/tick-broadcast.c kernel/time/tick-broadcast-hrtimer.c +kernel/time/tick-broadcast.c kernel/time/tick-common.c kernel/time/tick-oneshot.c kernel/time/tick-sched.c @@ -63,7 +62,9 @@ lib/crypto/chacha20poly1305.c lib/crypto/curve25519-generic.c lib/crypto/curve25519-hacl64.c lib/crypto/libchacha.c +lib/ctype.c lib/find_bit.c +lib/hweight.c lib/idr.c lib/nlattr.c lib/radix-tree.c diff --git a/repos/dde_linux/src/app/wireguard/spec/x86_64/generated_dummies.c b/repos/dde_linux/src/app/wireguard/spec/x86_64/generated_dummies.c index 8b9969ecce..2a0abfff90 100644 --- a/repos/dde_linux/src/app/wireguard/spec/x86_64/generated_dummies.c +++ b/repos/dde_linux/src/app/wireguard/spec/x86_64/generated_dummies.c @@ -71,11 +71,6 @@ unsigned long _copy_to_user(void __user * to,const void * from,unsigned long n) } -#include - -const unsigned char _ctype[] = {}; - - extern const char * _parse_integer_fixup_radix(const char * s,unsigned int * base); const char * _parse_integer_fixup_radix(const char * s,unsigned int * base) { diff --git a/repos/dde_linux/src/app/wireguard/spec/x86_64/source.list b/repos/dde_linux/src/app/wireguard/spec/x86_64/source.list index e04f0c5516..92af60630a 100644 --- a/repos/dde_linux/src/app/wireguard/spec/x86_64/source.list +++ b/repos/dde_linux/src/app/wireguard/spec/x86_64/source.list @@ -61,6 +61,7 @@ lib/crypto/chacha20poly1305.c lib/crypto/curve25519-generic.c lib/crypto/curve25519-hacl64.c lib/crypto/libchacha.c +lib/ctype.c lib/find_bit.c lib/idr.c lib/nlattr.c diff --git a/repos/dde_linux/src/app/wireguard/lx_kit/device.h b/repos/dde_linux/src/include/virt_linux/lx_kit/device.h similarity index 64% rename from repos/dde_linux/src/app/wireguard/lx_kit/device.h rename to repos/dde_linux/src/include/virt_linux/lx_kit/device.h index 9093d97c25..ac93a1957d 100644 --- a/repos/dde_linux/src/app/wireguard/lx_kit/device.h +++ b/repos/dde_linux/src/include/virt_linux/lx_kit/device.h @@ -1,3 +1,17 @@ +/* + * \brief Dummy device interface for virt_linux + * \author Martin Stein + * \author Christian Helmuth + * \date 2023-03-24 + */ + +/* + * Copyright (C) 2023 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + #ifndef _LX_KIT__DEVICE_H_ #define _LX_KIT__DEVICE_H_ diff --git a/repos/dde_linux/src/include/virt_linux/spec/arm/lx_emul/initcall_order.h b/repos/dde_linux/src/include/virt_linux/spec/arm/lx_emul/initcall_order.h new file mode 100644 index 0000000000..6ce1d7b0c5 --- /dev/null +++ b/repos/dde_linux/src/include/virt_linux/spec/arm/lx_emul/initcall_order.h @@ -0,0 +1,121 @@ +/* + * \brief Array defining order of Linux Kernel initcalls + * \author Automatically generated file - do no edit + * \date 2023-01-27 + */ + +#pragma once + +static const char * lx_emul_initcall_order[] = { + "__initcall_spawn_ksoftirqdearly", + "__initcall_start", + "__initcall_initialize_ptr_randomearly", + "__initcall_net_ns_init0", + "__initcall_inet_frag_wq_init0", + "__initcall_ptrace_break_init1", + "__initcall_ksysfs_init1", + "__initcall_rcu_set_runtime_mode1", + "__initcall_dma_init_reserved_memory1", + "__initcall_init_jiffies_clocksource1", + "__initcall_prandom_init_early1", + "__initcall_virtio_init1", + "__initcall_sock_init1", + "__initcall_net_defaults_init1", + "__initcall_init_default_flow_dissectors1", + "__initcall_netlink_proto_init1", + "__initcall_genl_init1", + "__initcall_bdi_class_init2", + "__initcall_mm_sysfs_init2", + "__initcall_init_per_zone_wmark_min2", + "__initcall_tty_class_init2", + "__initcall_vtconsole_class_init2", + "__initcall_devlink_class_init2", + "__initcall_software_node_init2", + "__initcall_kobject_uevent_init2", + "__initcall_customize_machine3", + "__initcall_exceptions_init3", + "__initcall_of_platform_default_populate_init3s", + "__initcall_topology_init4", + "__initcall_uid_cache_init4", + "__initcall_user_namespace_sysctl_init4", + "__initcall_default_bdi_init4", + "__initcall_percpu_enable_async4", + "__initcall_init_admin_reserve4", + "__initcall_init_user_reserve4", + "__initcall_aes_init4", + "__initcall_prng_mod_init4", + "__initcall_misc_init4", + "__initcall_input_init4", + "__initcall_net_dev_init4", + "__initcall_neigh_init4", + "__initcall_fib_notifier_init4", + "__initcall_ethnl_init4", + "__initcall_nexthop_init4", + "__initcall_iomem_init_inode5", + "__initcall_clocksource_done_booting5", + "__initcall_init_pipe_fs5", + "__initcall_anon_inode_init5", + "__initcall_init_ramfs_fs5", + "__initcall_chr_dev_init5", + "__initcall_eth_offload_init5", + "__initcall_inet_init5", + "__initcall_ipv4_offload_init5", + "__initcall_ipv6_offload_init5", + "__initcall_populate_rootfsrootfs", + "__initcall_blake2s_arm_mod_init6", + "__initcall_chacha_simd_mod_init6", + "__initcall_arm_poly1305_mod_init6", + "__initcall_irq_gc_init_ops6", + "__initcall_timekeeping_init_ops6", + "__initcall_alarmtimer_init6", + "__initcall_sched_clock_syscore_init6", + "__initcall_kswapd_init6", + "__initcall_workingset_init6", + "__initcall_fcntl_init6", + "__initcall_start_dirtytime_writeback6", + "__initcall_init_devpts_fs6", + "__initcall_crypto_algapi_init6", + "__initcall_jent_mod_init6", + "__initcall_mod_init6", + "__initcall_mod_init6", + "__initcall_mod_init6", + "__initcall_of_fixed_factor_clk_driver_init6", + "__initcall_of_fixed_clk_driver_init6", + "__initcall_gpio_clk_driver_init6", + "__initcall_n_null_init6", + "__initcall_pty_init6", + "__initcall_init6", + "__initcall_hwrng_modinit6", + "__initcall_timeriomem_rng_driver_init6", + "__initcall_topology_sysfs_init6", + "__initcall_cacheinfo_sysfs_init6", + "__initcall_mod_init6", + "__initcall_net_olddevs_init6", + "__initcall_blackhole_netdev_init6", + "__initcall_virtio_net_driver_init6", + "__initcall_net_failover_init6", + "__initcall_sock_diag_init6", + "__initcall_failover_init6", + "__initcall_gre_offload_init6", + "__initcall_tunnel4_init6", + "__initcall_inet_diag_init6", + "__initcall_tcp_diag_init6", + "__initcall_cubictcp_register6", + "__initcall_inet6_init6", + "__initcall_sit_init6", + "__initcall_init_machine_late7", + "__initcall_init_oops_id7", + "__initcall_printk_late_init7", + "__initcall_prandom_init_late7", + "__initcall_sync_state_resume_initcall7", + "__initcall_deferred_probe_initcall7", + "__initcall_tcp_congestion_default7", + "__initcall_udp_tunnel_nic_init_module7", + "__initcall_ip_auto_config7", + "__initcall_clk_disable_unused7s", + "__initcall_of_platform_sync_state_init7s", + "__initcall_con_initcon", + "__initcall_end", + "__initcall_hvc_console_initcon", + "END_OF_INITCALL_ORDER_ARRAY_DUMMY_ENTRY" +}; diff --git a/repos/dde_linux/src/app/wireguard/spec/arm_64/lx_emul/initcall_order.h b/repos/dde_linux/src/include/virt_linux/spec/arm_64/lx_emul/initcall_order.h similarity index 100% rename from repos/dde_linux/src/app/wireguard/spec/arm_64/lx_emul/initcall_order.h rename to repos/dde_linux/src/include/virt_linux/spec/arm_64/lx_emul/initcall_order.h diff --git a/repos/dde_linux/src/include/virt_linux/spec/x86_32/lx_emul/initcall_order.h b/repos/dde_linux/src/include/virt_linux/spec/x86_32/lx_emul/initcall_order.h new file mode 100644 index 0000000000..447b2c3315 --- /dev/null +++ b/repos/dde_linux/src/include/virt_linux/spec/x86_32/lx_emul/initcall_order.h @@ -0,0 +1,179 @@ +/* + * \brief Array defining order of Linux Kernel initcalls + * \author Automatically generated file - do no edit + * \date 2023-01-27 + */ + +#pragma once + +static const char * lx_emul_initcall_order[] = { + "__initcall_init_hw_perf_eventsearly", + "__initcall_start", + "__initcall_init_real_modeearly", + "__initcall_validate_x2apicearly", + "__initcall_register_nmi_cpu_backtrace_handlerearly", + "__initcall_spawn_ksoftirqdearly", + "__initcall_migration_initearly", + "__initcall_srcu_bootup_announceearly", + "__initcall_rcu_spawn_gp_kthreadearly", + "__initcall_check_cpu_stall_initearly", + "__initcall_rcu_sysrq_initearly", + "__initcall_cpu_stop_initearly", + "__initcall_init_zero_pfnearly", + "__initcall_initialize_ptr_randomearly", + "__initcall_init_mmap_min_addr0", + "__initcall_pci_realloc_setup_params0", + "__initcall_net_ns_init0", + "__initcall_inet_frag_wq_init0", + "__initcall_cpufreq_register_tsc_scaling1", + "__initcall_reboot_init1", + "__initcall_ksysfs_init1", + "__initcall_schedutil_gov_init1", + "__initcall_rcu_set_runtime_mode1", + "__initcall_init_jiffies_clocksource1", + "__initcall_init_elf_binfmt1", + "__initcall_prandom_init_early1", + "__initcall_virtio_init1", + "__initcall_cpufreq_core_init1", + "__initcall_cpufreq_gov_performance_init1", + "__initcall_sock_init1", + "__initcall_net_defaults_init1", + "__initcall_init_default_flow_dissectors1", + "__initcall_netlink_proto_init1", + "__initcall_genl_init1", + "__initcall_bdi_class_init2", + "__initcall_mm_sysfs_init2", + "__initcall_init_per_zone_wmark_min2", + "__initcall_pcibus_class_init2", + "__initcall_pci_driver_init2", + "__initcall_tty_class_init2", + "__initcall_vtconsole_class_init2", + "__initcall_devlink_class_init2", + "__initcall_software_node_init2", + "__initcall_amd_postcore_init2", + "__initcall_kobject_uevent_init2", + "__initcall_bts_init3", + "__initcall_pt_init3", + "__initcall_sbf_init3", + "__initcall_arch_kdebugfs_init3", + "__initcall_init_pit_clocksource3", + "__initcall_intel_pconfig_init3", + "__initcall_pci_arch_init3", + "__initcall_fixup_ht_bug4", + "__initcall_topology_init4", + "__initcall_uid_cache_init4", + "__initcall_user_namespace_sysctl_init4", + "__initcall_oom_init4", + "__initcall_default_bdi_init4", + "__initcall_percpu_enable_async4", + "__initcall_init_user_reserve4", + "__initcall_init_admin_reserve4", + "__initcall_init_reserve_notifier4", + "__initcall_aes_init4", + "__initcall_prng_mod_init4", + "__initcall_misc_init4", + "__initcall_input_init4", + "__initcall_net_dev_init4", + "__initcall_neigh_init4", + "__initcall_fib_notifier_init4", + "__initcall_ethnl_init4", + "__initcall_nexthop_init4", + "__initcall_pci_subsys_init4", + "__initcall_nmi_warning_debugfs5", + "__initcall_init_amd_nbs5", + "__initcall_iomem_init_inode5", + "__initcall_clocksource_done_booting5", + "__initcall_init_pipe_fs5", + "__initcall_anon_inode_init5", + "__initcall_init_ramfs_fs5", + "__initcall_chr_dev_init5", + "__initcall_eth_offload_init5", + "__initcall_ipv4_offload_init5", + "__initcall_inet_init5", + "__initcall_ipv6_offload_init5", + "__initcall_pcibios_assign_resources5", + "__initcall_pci_apply_final_quirks5s", + "__initcall_populate_rootfsrootfs", + "__initcall_pci_iommu_initrootfs", + "__initcall_rapl_pmu_init6", + "__initcall_amd_uncore_init6", + "__initcall_amd_ibs_init6", + "__initcall_msr_init6", + "__initcall_intel_uncore_init6", + "__initcall_cstate_pmu_init6", + "__initcall_register_kernel_offset_dumper6", + "__initcall_i8259A_init_ops6", + "__initcall_init_tsc_clocksource6", + "__initcall_add_rtc_cmos6", + "__initcall_i8237A_init_ops6", + "__initcall_umwait_init6", + "__initcall_ioapic_init_ops6", + "__initcall_sysfb_init6", + "__initcall_timekeeping_init_ops6", + "__initcall_alarmtimer_init6", + "__initcall_perf_event_sysfs_init6", + "__initcall_kswapd_init6", + "__initcall_mm_compute_batch_init6", + "__initcall_workingset_init6", + "__initcall_fcntl_init6", + "__initcall_start_dirtytime_writeback6", + "__initcall_init_devpts_fs6", + "__initcall_crypto_algapi_init6", + "__initcall_jent_mod_init6", + "__initcall_mod_init6", + "__initcall_mod_init6", + "__initcall_mod_init6", + "__initcall_percpu_counter_startup6", + "__initcall_gpio_clk_driver_init6", + "__initcall_plt_clk_driver_init6", + "__initcall_virtio_pci_driver_init6", + "__initcall_n_null_init6", + "__initcall_pty_init6", + "__initcall_init6", + "__initcall_hwrng_modinit6", + "__initcall_timeriomem_rng_driver_init6", + "__initcall_mod_init6", + "__initcall_mod_init6", + "__initcall_mod_init6", + "__initcall_mod_init6", + "__initcall_topology_sysfs_init6", + "__initcall_cacheinfo_sysfs_init6", + "__initcall_mod_init6", + "__initcall_net_olddevs_init6", + "__initcall_blackhole_netdev_init6", + "__initcall_virtio_net_driver_init6", + "__initcall_net_failover_init6", + "__initcall_intel_pstate_init6", + "__initcall_pmc_atom_init6", + "__initcall_sock_diag_init6", + "__initcall_failover_init6", + "__initcall_gre_offload_init6", + "__initcall_tunnel4_init6", + "__initcall_inet_diag_init6", + "__initcall_tcp_diag_init6", + "__initcall_cubictcp_register6", + "__initcall_inet6_init6", + "__initcall_sit_init6", + "__initcall_update_mp_table7", + "__initcall_lapic_insert_resource7", + "__initcall_print_ipi_mode7", + "__initcall_print_ICs7", + "__initcall_create_tlb_single_page_flush_ceiling7", + "__initcall_init_oops_id7", + "__initcall_sched_clock_init_late7", + "__initcall_printk_late_init7", + "__initcall_check_early_ioremap_leak7", + "__initcall_prandom_init_late7", + "__initcall_pci_resource_alignment_sysfs_init7", + "__initcall_pci_sysfs_init7", + "__initcall_sync_state_resume_initcall7", + "__initcall_deferred_probe_initcall7", + "__initcall_tcp_congestion_default7", + "__initcall_udp_tunnel_nic_init_module7", + "__initcall_ip_auto_config7", + "__initcall_clk_disable_unused7s", + "__initcall_con_initcon", + "__initcall_end", + "__initcall_hvc_console_initcon", + "END_OF_INITCALL_ORDER_ARRAY_DUMMY_ENTRY" +}; diff --git a/repos/dde_linux/src/app/wireguard/spec/x86_64/lx_emul/initcall_order.h b/repos/dde_linux/src/include/virt_linux/spec/x86_64/lx_emul/initcall_order.h similarity index 85% rename from repos/dde_linux/src/app/wireguard/spec/x86_64/lx_emul/initcall_order.h rename to repos/dde_linux/src/include/virt_linux/spec/x86_64/lx_emul/initcall_order.h index b275b472e0..30b7f06465 100644 --- a/repos/dde_linux/src/app/wireguard/spec/x86_64/lx_emul/initcall_order.h +++ b/repos/dde_linux/src/include/virt_linux/spec/x86_64/lx_emul/initcall_order.h @@ -1,7 +1,7 @@ /* * \brief Array defining order of Linux Kernel initcalls * \author Automatically generated file - do no edit - * \date 2022-01-06 + * \date 2023-01-27 */ #pragma once @@ -13,6 +13,12 @@ static const char * lx_emul_initcall_order[] = { "__initcall_validate_x2apicearly", "__initcall_register_nmi_cpu_backtrace_handlerearly", "__initcall_spawn_ksoftirqdearly", + "__initcall_migration_initearly", + "__initcall_srcu_bootup_announceearly", + "__initcall_rcu_spawn_gp_kthreadearly", + "__initcall_check_cpu_stall_initearly", + "__initcall_rcu_sysrq_initearly", + "__initcall_cpu_stop_initearly", "__initcall_static_call_initearly", "__initcall_init_zero_pfnearly", "__initcall_initialize_ptr_randomearly", @@ -20,12 +26,17 @@ static const char * lx_emul_initcall_order[] = { "__initcall_pci_realloc_setup_params0", "__initcall_net_ns_init0", "__initcall_inet_frag_wq_init0", + "__initcall_cpufreq_register_tsc_scaling1", "__initcall_reboot_init1", "__initcall_ksysfs_init1", + "__initcall_schedutil_gov_init1", "__initcall_rcu_set_runtime_mode1", "__initcall_init_jiffies_clocksource1", "__initcall_init_elf_binfmt1", "__initcall_prandom_init_early1", + "__initcall_virtio_init1", + "__initcall_cpufreq_core_init1", + "__initcall_cpufreq_gov_performance_init1", "__initcall_sock_init1", "__initcall_net_defaults_init1", "__initcall_init_default_flow_dissectors1", @@ -40,7 +51,6 @@ static const char * lx_emul_initcall_order[] = { "__initcall_vtconsole_class_init2", "__initcall_devlink_class_init2", "__initcall_software_node_init2", - "__initcall_i2c_init2", "__initcall_amd_postcore_init2", "__initcall_kobject_uevent_init2", "__initcall_bts_init3", @@ -63,9 +73,6 @@ static const char * lx_emul_initcall_order[] = { "__initcall_aes_init4", "__initcall_prng_mod_init4", "__initcall_misc_init4", - "__initcall_vga_arb_device_init4", - "__initcall_phy_init4", - "__initcall_serio_init4", "__initcall_input_init4", "__initcall_net_dev_init4", "__initcall_neigh_init4", @@ -111,6 +118,7 @@ static const char * lx_emul_initcall_order[] = { "__initcall_alarmtimer_init6", "__initcall_perf_event_sysfs_init6", "__initcall_kswapd_init6", + "__initcall_mm_compute_batch_init6", "__initcall_workingset_init6", "__initcall_fcntl_init6", "__initcall_start_dirtytime_writeback6", @@ -120,16 +128,13 @@ static const char * lx_emul_initcall_order[] = { "__initcall_mod_init6", "__initcall_mod_init6", "__initcall_mod_init6", + "__initcall_percpu_counter_startup6", "__initcall_gpio_clk_driver_init6", "__initcall_plt_clk_driver_init6", + "__initcall_virtio_pci_driver_init6", "__initcall_n_null_init6", "__initcall_pty_init6", - "__initcall_serial8250_init6", - "__initcall_serial_pci_driver_init6", - "__initcall_exar_pci_driver_init6", - "__initcall_dw8250_platform_driver_init6", - "__initcall_lpss8250_pci_driver_init6", - "__initcall_mid8250_pci_driver_init6", + "__initcall_init6", "__initcall_hwrng_modinit6", "__initcall_timeriomem_rng_driver_init6", "__initcall_mod_init6", @@ -140,23 +145,12 @@ static const char * lx_emul_initcall_order[] = { "__initcall_mod_init6", "__initcall_net_olddevs_init6", "__initcall_blackhole_netdev_init6", - "__initcall_e100_init_module6", - "__initcall_e1000_init_module6", - "__initcall_e1000_init_module6", - "__initcall_igb_init_module6", - "__initcall_igc_init_module6", - "__initcall_igbvf_init_module6", - "__initcall_ixgbe_init_module6", - "__initcall_i40e_init_module6", - "__initcall_ixgb_init_module6", - "__initcall_i8042_init6", - "__initcall_serport_init6", - "__initcall_atkbd_init6", - "__initcall_psmouse_init6", - "__initcall_hid_init6", - "__initcall_hid_generic_init6", + "__initcall_virtio_net_driver_init6", + "__initcall_net_failover_init6", + "__initcall_intel_pstate_init6", "__initcall_pmc_atom_init6", "__initcall_sock_diag_init6", + "__initcall_failover_init6", "__initcall_gre_offload_init6", "__initcall_tunnel4_init6", "__initcall_inet_diag_init6", @@ -166,6 +160,7 @@ static const char * lx_emul_initcall_order[] = { "__initcall_sit_init6", "__initcall_update_mp_table7", "__initcall_lapic_insert_resource7", + "__initcall_print_ipi_mode7", "__initcall_print_ICs7", "__initcall_create_tlb_single_page_flush_ceiling7", "__initcall_init_oops_id7", @@ -183,6 +178,6 @@ static const char * lx_emul_initcall_order[] = { "__initcall_clk_disable_unused7s", "__initcall_con_initcon", "__initcall_end", - "__initcall_univ8250_console_initcon", + "__initcall_hvc_console_initcon", "END_OF_INITCALL_ORDER_ARRAY_DUMMY_ENTRY" }; diff --git a/repos/dde_linux/src/lib/lx_emul/virt/common_dummies.c b/repos/dde_linux/src/lib/lx_emul/virt/common_dummies.c new file mode 100644 index 0000000000..8c5209f370 --- /dev/null +++ b/repos/dde_linux/src/lib/lx_emul/virt/common_dummies.c @@ -0,0 +1,169 @@ +/* + * \brief Common dummy definitions of Linux Kernel functions for virt_linux + * \author Christian Helmuth + * \date 2023-01-31 + */ + +/* + * Copyright (C) 2023 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#include + + +extern int __init platform_bus_init(void); +int __init platform_bus_init(void) +{ + lx_emul_trace(__func__); + return 0; +} + + +#include + +void account_process_tick(struct task_struct * p,int user_tick) +{ + lx_emul_trace(__func__); +} + + +#include + +int add_random_ready_callback(struct random_ready_callback * rdy) +{ + lx_emul_trace(__func__); + return 0; +} + + +extern int __init buses_init(void); +int __init buses_init(void) +{ + lx_emul_trace(__func__); + return 0; +} + + +#include + +void calc_global_load(void) +{ + lx_emul_trace(__func__); +} + + +extern int __init classes_init(void); +int __init classes_init(void) +{ + lx_emul_trace(__func__); + return 0; +} + + +extern int __init devices_init(void); +int __init devices_init(void) +{ + lx_emul_trace(__func__); + return 0; +} + + +#include + +int __init early_irq_init(void) +{ + lx_emul_trace(__func__); + return 0; +} + + +#include +#include + +int generic_handle_irq(unsigned int irq) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +int __cpuhp_setup_state(enum cpuhp_state state,const char * name,bool invoke,int (* startup)(unsigned int cpu),int (* teardown)(unsigned int cpu),bool multi_instance) +{ + lx_emul_trace(__func__); + return 0; +} + + +#include +struct pt_regs * __irq_regs = NULL; + + +#include + +int __preempt_count = 0; + + +#include + +unsigned long net_rand_noise; + + +#include + +const struct trace_print_flags gfpflag_names[] = { {0,NULL}}; + + +#include + +const struct trace_print_flags pageflag_names[] = { {0,NULL}}; + + +#include + +const struct trace_print_flags vmaflag_names[] = { {0,NULL}}; + + +#include +#include +#include + +void rcu_barrier(void) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +void rcu_sched_clock_irq(int user) +{ + lx_emul_trace(__func__); +} + + +#include + +void kvfree(const void * addr) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +void update_vsyscall(struct timekeeper * tk) +{ + lx_emul_trace(__func__); +} + + +#include + +void ignore_signals(struct task_struct * t) +{ + lx_emul_trace(__func__); +} diff --git a/repos/dde_linux/src/app/wireguard/irq.cc b/repos/dde_linux/src/lib/lx_emul/virt/irq.cc similarity index 52% rename from repos/dde_linux/src/app/wireguard/irq.cc rename to repos/dde_linux/src/lib/lx_emul/virt/irq.cc index c8cc4fcd13..786be5fc19 100644 --- a/repos/dde_linux/src/app/wireguard/irq.cc +++ b/repos/dde_linux/src/lib/lx_emul/virt/irq.cc @@ -1,3 +1,16 @@ +/* + * \brief Dummy IRQ emulation for virt_linux + * \author Martin Stein + * \author Christian Helmuth + * \date 2023-03-24 + */ + +/* + * Copyright (C) 2023 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ #include #include diff --git a/repos/dde_linux/src/app/wireguard/spec/arm_64/dummies_arch.c b/repos/dde_linux/src/lib/lx_emul/virt/spec/arm_64/dummies_arch.c similarity index 100% rename from repos/dde_linux/src/app/wireguard/spec/arm_64/dummies_arch.c rename to repos/dde_linux/src/lib/lx_emul/virt/spec/arm_64/dummies_arch.c diff --git a/repos/dde_linux/src/app/wireguard/spec/x86_64/dummies_arch.c b/repos/dde_linux/src/lib/lx_emul/virt/spec/x86/dummies_arch.c similarity index 100% rename from repos/dde_linux/src/app/wireguard/spec/x86_64/dummies_arch.c rename to repos/dde_linux/src/lib/lx_emul/virt/spec/x86/dummies_arch.c diff --git a/repos/dde_linux/src/virt_linux/arm/target.mk b/repos/dde_linux/src/virt_linux/arm/target.mk new file mode 100644 index 0000000000..529f269443 --- /dev/null +++ b/repos/dde_linux/src/virt_linux/arm/target.mk @@ -0,0 +1,40 @@ +TARGET := arm_virt_linux +REQUIRES := arm + +CUSTOM_TARGET_DEPS := kernel_build.phony + +LX_DIR := $(call select_from_ports,linux)/src/linux +PWD := $(shell pwd) + +# options for Linux kernel build to not depend on current time, user and host +LX_MK_REPRODUCIBLE = KBUILD_BUILD_TIMESTAMP=no_timestamp KBUILD_BUILD_USER=genode KBUILD_BUILD_HOST=genode +LX_MK_ARGS = ARCH=arm CROSS_COMPILE=$(CROSS_DEV_PREFIX) CC=$(CC) $(LX_MK_REPRODUCIBLE) + +# +# 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)$(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 + $(MSG_BUILD)Linux + $(VERBOSE)$(MAKE) $(LX_MK_ARGS) $(BUILD_OUTPUT_FILTER)