dde_linux: separate virt_linux from wireguard

Preparation to support further hardware-agnostic dde_linux components
(incl. lxip and tests).

Fixes #4774
This commit is contained in:
Christian Helmuth 2023-01-27 16:04:29 +01:00
parent 4016c799f2
commit 3a9ef48721
23 changed files with 628 additions and 259 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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 "

View File

@ -15,145 +15,11 @@
#include <lx_emul.h>
#include <linux/cpuhotplug.h>
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 <asm/irq_regs.h>
struct pt_regs * __irq_regs = NULL;
#include <asm/preempt.h>
int __preempt_count = 0;
#include <linux/kernel_stat.h>
void account_process_tick(struct task_struct * p,int user_tick)
{
lx_emul_trace(__func__);
}
#include <linux/random.h>
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 <linux/sched/loadavg.h>
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 <linux/interrupt.h>
int __init early_irq_init(void)
{
lx_emul_trace(__func__);
return 0;
}
#include <linux/irq.h>
#include <linux/irqdesc.h>
int generic_handle_irq(unsigned int irq)
{
lx_emul_trace_and_stop(__func__);
}
#include <linux/tracepoint-defs.h>
const struct trace_print_flags gfpflag_names[] = { {0,NULL}};
#include <linux/sched/signal.h>
void ignore_signals(struct task_struct * t)
{
lx_emul_trace(__func__);
}
#include <net/ipv6_stubs.h>
const struct ipv6_stub *ipv6_stub = NULL;
#include <linux/prandom.h>
unsigned long net_rand_noise;
#include <linux/tracepoint-defs.h>
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 <linux/types.h>
#include <linux/kernel.h>
#include <linux/rcupdate.h>
void rcu_barrier(void)
{
lx_emul_trace_and_stop(__func__);
}
#include <linux/rcupdate.h>
void rcu_sched_clock_irq(int user)
{
lx_emul_trace(__func__);
}
#include <linux/netdevice.h>
int register_netdevice(struct net_device * dev)
@ -196,19 +62,6 @@ void synchronize_net(void)
}
#include <linux/timekeeper_internal.h>
void update_vsyscall(struct timekeeper * tk)
{
lx_emul_trace(__func__);
}
#include <linux/tracepoint-defs.h>
const struct trace_print_flags vmaflag_names[] = { {0,NULL}};
#include <linux/rtnetlink.h>
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 <linux/rcutree.h>
void kvfree(const void * addr)
{
lx_emul_trace_and_stop(__func__);
}

View File

@ -28,14 +28,6 @@ void __icmp_send(struct sk_buff * skb_in,int type,int code,__be32 info,const str
}
#include <linux/random.h>
void get_random_bytes(void * buf,int nbytes)
{
lx_emul_random_gen_bytes(buf, nbytes);
}
#include <linux/random.h>
int wait_for_random_bytes(void)
@ -45,14 +37,6 @@ int wait_for_random_bytes(void)
}
#include <linux/random.h>
u32 get_random_u32(void)
{
return lx_emul_random_gen_u32();
}
#include <linux/prandom.h>
u32 prandom_u32(void)
@ -61,15 +45,6 @@ u32 prandom_u32(void)
}
#include <linux/random.h>
int __must_check get_random_bytes_arch(void * buf, int nbytes)
{
lx_emul_random_gen_bytes(buf, nbytes);
return nbytes;
}
#include <linux/mm.h>
void * kvmalloc_node(size_t size,gfp_t flags,int node)

View File

@ -92,11 +92,6 @@ struct sk_buff * __skb_gso_segment(struct sk_buff * skb,netdev_features_t featur
}
#include <linux/ctype.h>
const unsigned char _ctype[] = {};
#include <linux/mm.h>
atomic_long_t _totalram_pages;

View File

@ -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

View File

@ -71,11 +71,6 @@ unsigned long _copy_to_user(void __user * to,const void * from,unsigned long n)
}
#include <linux/ctype.h>
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)
{

View File

@ -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

View File

@ -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_

View File

@ -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"
};

View File

@ -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"
};

View File

@ -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"
};

View File

@ -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 <lx_emul.h>
extern int __init platform_bus_init(void);
int __init platform_bus_init(void)
{
lx_emul_trace(__func__);
return 0;
}
#include <linux/kernel_stat.h>
void account_process_tick(struct task_struct * p,int user_tick)
{
lx_emul_trace(__func__);
}
#include <linux/random.h>
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 <linux/sched/loadavg.h>
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 <linux/interrupt.h>
int __init early_irq_init(void)
{
lx_emul_trace(__func__);
return 0;
}
#include <linux/irq.h>
#include <linux/irqdesc.h>
int generic_handle_irq(unsigned int irq)
{
lx_emul_trace_and_stop(__func__);
}
#include <linux/cpuhotplug.h>
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 <asm/irq_regs.h>
struct pt_regs * __irq_regs = NULL;
#include <asm/preempt.h>
int __preempt_count = 0;
#include <linux/prandom.h>
unsigned long net_rand_noise;
#include <linux/tracepoint-defs.h>
const struct trace_print_flags gfpflag_names[] = { {0,NULL}};
#include <linux/tracepoint-defs.h>
const struct trace_print_flags pageflag_names[] = { {0,NULL}};
#include <linux/tracepoint-defs.h>
const struct trace_print_flags vmaflag_names[] = { {0,NULL}};
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/rcupdate.h>
void rcu_barrier(void)
{
lx_emul_trace_and_stop(__func__);
}
#include <linux/rcupdate.h>
void rcu_sched_clock_irq(int user)
{
lx_emul_trace(__func__);
}
#include <linux/rcutree.h>
void kvfree(const void * addr)
{
lx_emul_trace_and_stop(__func__);
}
#include <linux/timekeeper_internal.h>
void update_vsyscall(struct timekeeper * tk)
{
lx_emul_trace(__func__);
}
#include <linux/sched/signal.h>
void ignore_signals(struct task_struct * t)
{
lx_emul_trace(__func__);
}

View File

@ -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 <lx_emul/irq.h>
#include <lx_kit/env.h>

View File

@ -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)