From 4e4b515f788e8b785b6627c633d26a748b6c2cd0 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 16 Feb 2025 12:30:21 +0200 Subject: [PATCH] Hello World for linux Kernel Module --- 01_hello/Makefile | 21 + 01_hello/hello.c | 58 ++ 02_better_hello/.Module.symvers.cmd | 1 + 02_better_hello/.hello.ko.cmd | 1 + 02_better_hello/.hello.mod.cmd | 1 + 02_better_hello/.hello.mod.o.cmd | 877 ++++++++++++++++++++++++++++ 02_better_hello/.hello.o.cmd | 845 +++++++++++++++++++++++++++ 02_better_hello/.modules.order.cmd | 1 + 02_better_hello/Makefile | 21 + 02_better_hello/Module.symvers | 0 02_better_hello/hello.c | 102 ++++ 02_better_hello/hello.ko | Bin 0 -> 109536 bytes 02_better_hello/hello.mod | 1 + 02_better_hello/hello.mod.c | 39 ++ 02_better_hello/hello.mod.o | Bin 0 -> 93592 bytes 02_better_hello/hello.o | Bin 0 -> 17272 bytes 02_better_hello/modules.order | 1 + 17 files changed, 1969 insertions(+) create mode 100644 01_hello/Makefile create mode 100644 01_hello/hello.c create mode 100644 02_better_hello/.Module.symvers.cmd create mode 100644 02_better_hello/.hello.ko.cmd create mode 100644 02_better_hello/.hello.mod.cmd create mode 100644 02_better_hello/.hello.mod.o.cmd create mode 100644 02_better_hello/.hello.o.cmd create mode 100644 02_better_hello/.modules.order.cmd create mode 100644 02_better_hello/Makefile create mode 100644 02_better_hello/Module.symvers create mode 100644 02_better_hello/hello.c create mode 100644 02_better_hello/hello.ko create mode 100644 02_better_hello/hello.mod create mode 100644 02_better_hello/hello.mod.c create mode 100644 02_better_hello/hello.mod.o create mode 100644 02_better_hello/hello.o create mode 100644 02_better_hello/modules.order diff --git a/01_hello/Makefile b/01_hello/Makefile new file mode 100644 index 0000000..aae36ca --- /dev/null +++ b/01_hello/Makefile @@ -0,0 +1,21 @@ + +#This variable is used to specify all the object file +#which will be loaded and compile as kernel module for +#usage. And the compilation for obj file from .c file +#is done automatically. + +obj-m += hello.o + +# M variable used here tells the "make" to look in +# current path to build bootable kernel module from +# .c files in specified current path. + +# modules: It is the target that is used to build the kernel +# modules. +# clean: It is used to clean the build targets, compile and +# generated files which would be created. +all: + make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules + +clean: + make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean \ No newline at end of file diff --git a/01_hello/hello.c b/01_hello/hello.c new file mode 100644 index 0000000..c024fa6 --- /dev/null +++ b/01_hello/hello.c @@ -0,0 +1,58 @@ +#include +#include + + +/* +* insmod: It's the command to insert the +* loadable kernel module to the +* kernel. +* +* rmmod: It's the command to remove the +* loadable kernel module from the +* kernel. +*/ + +/* +* There are two imp. events for linux driver +* The loading of driver on kernel and unloading +* of driver from kernel. +*/ + +/* +* Function to use when this is +* module is loaded to the kernel. +*/ +int +my_init(void){ + + + /* + * We don't use printf for linux driver + * because printf writes to standard IO + * and there is no standard IO for kernel + * There is only kernel's log. Kernel's log + * is buffer which stores whatever is written + * onto that buffer. It can me printed using + * command: dmesg + */ + + printk("hello - Hello, Kernel!\n"); + return 0; +} + +/* +* Function to execute when module +* is unloaded from the kernel +*/ + +void +my_exit(void){ + + printk("hello - Goodbye, kernel!\n"); +} + +module_init(my_init); +module_exit(my_exit); + + +MODULE_LICENSE("GPL"); \ No newline at end of file diff --git a/02_better_hello/.Module.symvers.cmd b/02_better_hello/.Module.symvers.cmd new file mode 100644 index 0000000..efa89c7 --- /dev/null +++ b/02_better_hello/.Module.symvers.cmd @@ -0,0 +1 @@ +cmd_/home/device-driver/02_better_hello/Module.symvers := sed 's/ko$$/o/' /home/device-driver/02_better_hello/modules.order | scripts/mod/modpost -m -o /home/device-driver/02_better_hello/Module.symvers -e -i Module.symvers -T - diff --git a/02_better_hello/.hello.ko.cmd b/02_better_hello/.hello.ko.cmd new file mode 100644 index 0000000..16c5e4f --- /dev/null +++ b/02_better_hello/.hello.ko.cmd @@ -0,0 +1 @@ +cmd_/home/device-driver/02_better_hello/hello.ko := ld -r -m elf_x86_64 -z noexecstack --no-warn-rwx-segments --build-id=sha1 -T arch/x86/module.lds -o /home/device-driver/02_better_hello/hello.ko /home/device-driver/02_better_hello/hello.o /home/device-driver/02_better_hello/hello.mod.o; true diff --git a/02_better_hello/.hello.mod.cmd b/02_better_hello/.hello.mod.cmd new file mode 100644 index 0000000..30727b4 --- /dev/null +++ b/02_better_hello/.hello.mod.cmd @@ -0,0 +1 @@ +cmd_/home/device-driver/02_better_hello/hello.mod := printf '%s\n' hello.o | awk '!x[$$0]++ { print("/home/device-driver/02_better_hello/"$$0) }' > /home/device-driver/02_better_hello/hello.mod diff --git a/02_better_hello/.hello.mod.o.cmd b/02_better_hello/.hello.mod.o.cmd new file mode 100644 index 0000000..03f31fc --- /dev/null +++ b/02_better_hello/.hello.mod.o.cmd @@ -0,0 +1,877 @@ +cmd_/home/device-driver/02_better_hello/hello.mod.o := gcc-12 -Wp,-MMD,/home/device-driver/02_better_hello/.hello.mod.o.d -nostdinc -I/usr/src/linux-headers-6.1.0-31-common/arch/x86/include -I./arch/x86/include/generated -I/usr/src/linux-headers-6.1.0-31-common/include -I./include -I/usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi -I./arch/x86/include/generated/uapi -I/usr/src/linux-headers-6.1.0-31-common/include/uapi -I./include/generated/uapi -include /usr/src/linux-headers-6.1.0-31-common/include/linux/compiler-version.h -include /usr/src/linux-headers-6.1.0-31-common/include/linux/kconfig.h -include /usr/src/linux-headers-6.1.0-31-common/include/linux/compiler_types.h -D__KERNEL__ -fmacro-prefix-map=/usr/src/linux-headers-6.1.0-31-common/= -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Wno-format-security -std=gnu11 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -fcf-protection=none -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -mtune=generic -mno-red-zone -mcmodel=kernel -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -mharden-sls=all -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation -Wno-format-overflow -Wno-address-of-packed-member -O2 -fno-allow-store-data-races -Wframe-larger-than=2048 -fstack-protector-strong -Wno-main -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-dangling-pointer -ftrivial-auto-var-init=zero -fno-stack-clash-protection -pg -mrecord-mcount -mfentry -DCC_USING_FENTRY -Wvla -Wno-pointer-sign -Wcast-function-type -Wno-stringop-truncation -Wno-stringop-overflow -Wno-restrict -Wno-maybe-uninitialized -Wno-array-bounds -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -fno-strict-overflow -fno-stack-check -fconserve-stack -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wno-packed-not-aligned -g -DMODULE -DKBUILD_BASENAME='"hello.mod"' -DKBUILD_MODNAME='"hello"' -D__KBUILD_MODNAME=kmod_hello -c -o /home/device-driver/02_better_hello/hello.mod.o /home/device-driver/02_better_hello/hello.mod.c + +source_/home/device-driver/02_better_hello/hello.mod.o := /home/device-driver/02_better_hello/hello.mod.c + +deps_/home/device-driver/02_better_hello/hello.mod.o := \ + $(wildcard include/config/MODULE_UNLOAD) \ + $(wildcard include/config/RETPOLINE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/compiler-version.h \ + $(wildcard include/config/CC_VERSION_TEXT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kconfig.h \ + $(wildcard include/config/CPU_BIG_ENDIAN) \ + $(wildcard include/config/BOOGER) \ + $(wildcard include/config/FOO) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/compiler_types.h \ + $(wildcard include/config/DEBUG_INFO_BTF) \ + $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \ + $(wildcard include/config/HAVE_ARCH_COMPILER_H) \ + $(wildcard include/config/CC_HAS_ASM_INLINE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/compiler_attributes.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/compiler-gcc.h \ + $(wildcard include/config/GCC_ASM_GOTO_OUTPUT_WORKAROUND) \ + $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \ + $(wildcard include/config/SHADOW_CALL_STACK) \ + $(wildcard include/config/KCOV) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/module.h \ + $(wildcard include/config/MODULES) \ + $(wildcard include/config/SYSFS) \ + $(wildcard include/config/MODULES_TREE_LOOKUP) \ + $(wildcard include/config/LIVEPATCH) \ + $(wildcard include/config/STACKTRACE_BUILD_ID) \ + $(wildcard include/config/ARCH_USES_CFI_TRAPS) \ + $(wildcard include/config/MODULE_SIG) \ + $(wildcard include/config/ARCH_WANTS_MODULES_DATA_IN_VMALLOC) \ + $(wildcard include/config/GENERIC_BUG) \ + $(wildcard include/config/KALLSYMS) \ + $(wildcard include/config/SMP) \ + $(wildcard include/config/TRACEPOINTS) \ + $(wildcard include/config/TREE_SRCU) \ + $(wildcard include/config/BPF_EVENTS) \ + $(wildcard include/config/JUMP_LABEL) \ + $(wildcard include/config/TRACING) \ + $(wildcard include/config/EVENT_TRACING) \ + $(wildcard include/config/FTRACE_MCOUNT_RECORD) \ + $(wildcard include/config/KPROBES) \ + $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \ + $(wildcard include/config/KUNIT) \ + $(wildcard include/config/PRINTK_INDEX) \ + $(wildcard include/config/CONSTRUCTORS) \ + $(wildcard include/config/FUNCTION_ERROR_INJECTION) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/list.h \ + $(wildcard include/config/DEBUG_LIST) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/container_of.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/build_bug.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/compiler.h \ + $(wildcard include/config/TRACE_BRANCH_PROFILING) \ + $(wildcard include/config/PROFILE_ALL_BRANCHES) \ + $(wildcard include/config/OBJTOOL) \ + $(wildcard include/config/64BIT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/compiler_types.h \ + arch/x86/include/generated/asm/rwonce.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/rwonce.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kasan-checks.h \ + $(wildcard include/config/KASAN_GENERIC) \ + $(wildcard include/config/KASAN_SW_TAGS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/types.h \ + $(wildcard include/config/HAVE_UID16) \ + $(wildcard include/config/UID16) \ + $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \ + $(wildcard include/config/PHYS_ADDR_T_64BIT) \ + $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/types.h \ + arch/x86/include/generated/uapi/asm/types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/int-ll64.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/int-ll64.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/bitsperlong.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/bitsperlong.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/bitsperlong.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/posix_types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/stddef.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/stddef.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/X86_32) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/posix_types_64.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/posix_types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kcsan-checks.h \ + $(wildcard include/config/KCSAN) \ + $(wildcard include/config/KCSAN_WEAK_MEMORY) \ + $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/err.h \ + arch/x86/include/generated/uapi/asm/errno.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/errno.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/errno-base.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/poison.h \ + $(wildcard include/config/ILLEGAL_POINTER_VALUE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/const.h \ + /usr/src/linux-headers-6.1.0-31-common/include/vdso/const.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/const.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/barrier.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/alternative.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/stringify.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/asm.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/extable_fixup_types.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/nops.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/barrier.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/stat.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/stat.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/stat.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/time.h \ + $(wildcard include/config/POSIX_TIMERS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/cache.h \ + $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/kernel.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/sysinfo.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/cache.h \ + $(wildcard include/config/X86_L1_CACHE_SHIFT) \ + $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \ + $(wildcard include/config/X86_VSMP) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/linkage.h \ + $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/export.h \ + $(wildcard include/config/MODVERSIONS) \ + $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \ + $(wildcard include/config/TRIM_UNUSED_KSYMS) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/linkage.h \ + $(wildcard include/config/X86_64) \ + $(wildcard include/config/X86_ALIGNMENT_16) \ + $(wildcard include/config/RETHUNK) \ + $(wildcard include/config/SLS) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/ibt.h \ + $(wildcard include/config/X86_KERNEL_IBT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/math64.h \ + $(wildcard include/config/ARCH_SUPPORTS_INT128) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/math.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/div64.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/div64.h \ + /usr/src/linux-headers-6.1.0-31-common/include/vdso/math64.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/time64.h \ + /usr/src/linux-headers-6.1.0-31-common/include/vdso/time64.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/time.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/time_types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/time32.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/timex.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/timex.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/param.h \ + arch/x86/include/generated/uapi/asm/param.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/param.h \ + $(wildcard include/config/HZ) \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/param.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/timex.h \ + $(wildcard include/config/X86_TSC) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/processor.h \ + $(wildcard include/config/X86_VMX_FEATURE_NAMES) \ + $(wildcard include/config/X86_IOPL_IOPERM) \ + $(wildcard include/config/STACKPROTECTOR) \ + $(wildcard include/config/VM86) \ + $(wildcard include/config/PARAVIRT_XXL) \ + $(wildcard include/config/X86_DEBUGCTLMSR) \ + $(wildcard include/config/CPU_SUP_AMD) \ + $(wildcard include/config/XEN) \ + $(wildcard include/config/X86_SGX) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/PAGE_TABLE_ISOLATION) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/processor-flags.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/mem_encrypt.h \ + $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \ + $(wildcard include/config/AMD_MEM_ENCRYPT) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/mem_encrypt.h \ + $(wildcard include/config/X86_MEM_ENCRYPT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/init.h \ + $(wildcard include/config/STRICT_KERNEL_RWX) \ + $(wildcard include/config/STRICT_MODULE_RWX) \ + $(wildcard include/config/LTO_CLANG) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/cc_platform.h \ + $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/math_emu.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/ptrace.h \ + $(wildcard include/config/PARAVIRT) \ + $(wildcard include/config/IA32_EMULATION) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/segment.h \ + $(wildcard include/config/XEN_PV) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/page_types.h \ + $(wildcard include/config/PHYSICAL_START) \ + $(wildcard include/config/PHYSICAL_ALIGN) \ + $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/KASAN) \ + $(wildcard include/config/DYNAMIC_MEMORY_LAYOUT) \ + $(wildcard include/config/X86_5LEVEL) \ + $(wildcard include/config/RANDOMIZE_BASE) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/kaslr.h \ + $(wildcard include/config/RANDOMIZE_MEMORY) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/ptrace.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/ptrace-abi.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/PGTABLE_LEVELS) \ + $(wildcard include/config/ZERO_CALL_USED_REGS) \ + $(wildcard include/config/PARAVIRT_DEBUG) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/desc_defs.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \ + $(wildcard include/config/X86_PAE) \ + $(wildcard include/config/MEM_SOFT_DIRTY) \ + $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \ + $(wildcard include/config/PROC_FS) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/pgtable_64_types.h \ + $(wildcard include/config/KMSAN) \ + $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/sparsemem.h \ + $(wildcard include/config/SPARSEMEM) \ + $(wildcard include/config/NUMA_KEEP_MEMINFO) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/nospec-branch.h \ + $(wildcard include/config/CPU_UNRET_ENTRY) \ + $(wildcard include/config/CPU_SRSO) \ + $(wildcard include/config/CPU_IBPB_ENTRY) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/static_key.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/jump_label.h \ + $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/jump_label.h \ + $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/objtool.h \ + $(wildcard include/config/FRAME_POINTER) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/cpufeatures.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/required-features.h \ + $(wildcard include/config/X86_MINIMUM_CPU_FAMILY) \ + $(wildcard include/config/MATH_EMULATION) \ + $(wildcard include/config/X86_CMPXCHG64) \ + $(wildcard include/config/X86_CMOV) \ + $(wildcard include/config/X86_P6_NOP) \ + $(wildcard include/config/MATOM) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/disabled-features.h \ + $(wildcard include/config/X86_UMIP) \ + $(wildcard include/config/INTEL_IOMMU_SVM) \ + $(wildcard include/config/INTEL_TDX_GUEST) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/msr-index.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/bits.h \ + /usr/src/linux-headers-6.1.0-31-common/include/vdso/bits.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/unwind_hints.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/orc_types.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/byteorder.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/byteorder/little_endian.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/byteorder/little_endian.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/swab.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/swab.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/swab.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/byteorder/generic.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/percpu.h \ + $(wildcard include/config/X86_64_SMP) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kernel.h \ + $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \ + $(wildcard include/config/PREEMPT_DYNAMIC) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \ + $(wildcard include/config/PREEMPT_) \ + $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \ + $(wildcard include/config/MMU) \ + $(wildcard include/config/PROVE_LOCKING) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/stdarg.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/align.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/limits.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/limits.h \ + /usr/src/linux-headers-6.1.0-31-common/include/vdso/limits.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/bitops.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/typecheck.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/bitops/generic-non-atomic.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/bitops.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/rmwcc.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/bitops/sched.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/arch_hweight.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/bitops/const_hweight.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/bitops/instrumented-atomic.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/instrumented.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kmsan-checks.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/bitops/instrumented-non-atomic.h \ + $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/bitops/instrumented-lock.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/bitops/le.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/bitops/ext2-atomic-setbit.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kstrtox.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/log2.h \ + $(wildcard include/config/ARCH_HAS_ILOG2_U32) \ + $(wildcard include/config/ARCH_HAS_ILOG2_U64) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/minmax.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/panic.h \ + $(wildcard include/config/PANIC_TIMEOUT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/printk.h \ + $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \ + $(wildcard include/config/EARLY_PRINTK) \ + $(wildcard include/config/PRINTK) \ + $(wildcard include/config/DYNAMIC_DEBUG) \ + $(wildcard include/config/DYNAMIC_DEBUG_CORE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kern_levels.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/ratelimit_types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/spinlock_types_raw.h \ + $(wildcard include/config/DEBUG_SPINLOCK) \ + $(wildcard include/config/DEBUG_LOCK_ALLOC) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/spinlock_types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/qspinlock_types.h \ + $(wildcard include/config/NR_CPUS) \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/qrwlock_types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/lockdep_types.h \ + $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \ + $(wildcard include/config/LOCKDEP) \ + $(wildcard include/config/LOCK_STAT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/once_lite.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/dynamic_debug.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/static_call_types.h \ + $(wildcard include/config/HAVE_STATIC_CALL) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/instruction_pointer.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/percpu.h \ + $(wildcard include/config/DEBUG_PREEMPT) \ + $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/threads.h \ + $(wildcard include/config/BASE_SMALL) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/percpu-defs.h \ + $(wildcard include/config/DEBUG_FORCE_WEAK_PER_CPU) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/GEN-for-each-reg.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/proto.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/ldt.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/sigcontext.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/current.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/page.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/page_64.h \ + $(wildcard include/config/DEBUG_VIRTUAL) \ + $(wildcard include/config/FLATMEM) \ + $(wildcard include/config/X86_VSYSCALL_EMULATION) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/range.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/memory_model.h \ + $(wildcard include/config/SPARSEMEM_VMEMMAP) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/pfn.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/getorder.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/msr.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/msr-index.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/cpumask.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/cpumask.h \ + $(wildcard include/config/FORCE_NR_CPUS) \ + $(wildcard include/config/HOTPLUG_CPU) \ + $(wildcard include/config/DEBUG_PER_CPU_MAPS) \ + $(wildcard include/config/CPUMASK_OFFSTACK) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/bitmap.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/find.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/string.h \ + $(wildcard include/config/BINARY_PRINTF) \ + $(wildcard include/config/FORTIFY_SOURCE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/errno.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/errno.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/overflow.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/string.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/string.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/string_64.h \ + $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/fortify-string.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/bug.h \ + $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/bug.h \ + $(wildcard include/config/DEBUG_BUGVERBOSE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/instrumentation.h \ + $(wildcard include/config/NOINSTR_VALIDATION) \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/bug.h \ + $(wildcard include/config/BUG) \ + $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/atomic.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/atomic.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/cmpxchg.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/cmpxchg_64.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/atomic64_64.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/atomic/atomic-arch-fallback.h \ + $(wildcard include/config/GENERIC_ATOMIC64) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/atomic/atomic-long.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/atomic/atomic-instrumented.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/gfp_types.h \ + $(wildcard include/config/KASAN_HW_TAGS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/numa.h \ + $(wildcard include/config/NODES_SHIFT) \ + $(wildcard include/config/NUMA) \ + $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/msr.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/ioctl.h \ + arch/x86/include/generated/uapi/asm/ioctl.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/ioctl.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/ioctl.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/shared/msr.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/tracepoint-defs.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/paravirt.h \ + $(wildcard include/config/PARAVIRT_SPINLOCKS) \ + $(wildcard include/config/DEBUG_ENTRY) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/frame.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/special_insns.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/irqflags.h \ + $(wildcard include/config/TRACE_IRQFLAGS) \ + $(wildcard include/config/PREEMPT_RT) \ + $(wildcard include/config/IRQSOFF_TRACER) \ + $(wildcard include/config/PREEMPT_TRACER) \ + $(wildcard include/config/DEBUG_IRQFLAGS) \ + $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/cleanup.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/irqflags.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/fpu/types.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/vmxfeatures.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/vdso/processor.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/personality.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/personality.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/tsc.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/cpufeature.h \ + $(wildcard include/config/X86_FEATURE_NAMES) \ + /usr/src/linux-headers-6.1.0-31-common/include/vdso/time32.h \ + /usr/src/linux-headers-6.1.0-31-common/include/vdso/time.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/uidgid.h \ + $(wildcard include/config/MULTIUSER) \ + $(wildcard include/config/USER_NS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/highuid.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/buildid.h \ + $(wildcard include/config/CRASH_CORE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/mm_types.h \ + $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \ + $(wildcard include/config/MEMCG) \ + $(wildcard include/config/USERFAULTFD) \ + $(wildcard include/config/SWAP) \ + $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \ + $(wildcard include/config/MEMBARRIER) \ + $(wildcard include/config/AIO) \ + $(wildcard include/config/MMU_NOTIFIER) \ + $(wildcard include/config/TRANSPARENT_HUGEPAGE) \ + $(wildcard include/config/NUMA_BALANCING) \ + $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \ + $(wildcard include/config/HUGETLB_PAGE) \ + $(wildcard include/config/IOMMU_SVA) \ + $(wildcard include/config/KSM) \ + $(wildcard include/config/LRU_GEN) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/mm_types_task.h \ + $(wildcard include/config/SPLIT_PTLOCK_CPUS) \ + $(wildcard include/config/ARCH_ENABLE_SPLIT_PMD_PTLOCK) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/tlbbatch.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/auxvec.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/auxvec.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/auxvec.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kref.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/spinlock.h \ + $(wildcard include/config/PREEMPTION) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/preempt.h \ + $(wildcard include/config/PREEMPT_COUNT) \ + $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \ + $(wildcard include/config/PREEMPT_NOTIFIERS) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/preempt.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/thread_info.h \ + $(wildcard include/config/THREAD_INFO_IN_TASK) \ + $(wildcard include/config/GENERIC_ENTRY) \ + $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \ + $(wildcard include/config/HARDENED_USERCOPY) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/restart_block.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/thread_info.h \ + $(wildcard include/config/COMPAT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/bottom_half.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/lockdep.h \ + $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/smp.h \ + $(wildcard include/config/UP_LATE_INIT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/smp_types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/llist.h \ + $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/smp.h \ + $(wildcard include/config/X86_LOCAL_APIC) \ + $(wildcard include/config/DEBUG_NMI_SELFTEST) \ + arch/x86/include/generated/asm/mmiowb.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/mmiowb.h \ + $(wildcard include/config/MMIOWB) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/spinlock_types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rwlock_types.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/spinlock.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/qspinlock.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/qspinlock.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/qrwlock.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/qrwlock.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rwlock.h \ + $(wildcard include/config/PREEMPT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/spinlock_api_smp.h \ + $(wildcard include/config/INLINE_SPIN_LOCK) \ + $(wildcard include/config/INLINE_SPIN_LOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \ + $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/GENERIC_LOCKBREAK) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rwlock_api_smp.h \ + $(wildcard include/config/INLINE_READ_LOCK) \ + $(wildcard include/config/INLINE_WRITE_LOCK) \ + $(wildcard include/config/INLINE_READ_LOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_LOCK_BH) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_READ_TRYLOCK) \ + $(wildcard include/config/INLINE_WRITE_TRYLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/refcount.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rbtree.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rbtree_types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rcupdate.h \ + $(wildcard include/config/PREEMPT_RCU) \ + $(wildcard include/config/TINY_RCU) \ + $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \ + $(wildcard include/config/TASKS_RCU_GENERIC) \ + $(wildcard include/config/RCU_STALL_COMMON) \ + $(wildcard include/config/NO_HZ_FULL) \ + $(wildcard include/config/KVM_XFER_TO_GUEST_WORK) \ + $(wildcard include/config/RCU_NOCB_CPU) \ + $(wildcard include/config/TASKS_RCU) \ + $(wildcard include/config/TASKS_TRACE_RCU) \ + $(wildcard include/config/TASKS_RUDE_RCU) \ + $(wildcard include/config/TREE_RCU) \ + $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \ + $(wildcard include/config/PROVE_RCU) \ + $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/context_tracking_irq.h \ + $(wildcard include/config/CONTEXT_TRACKING_IDLE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rcutree.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/maple_tree.h \ + $(wildcard include/config/MAPLE_RCU_DISABLED) \ + $(wildcard include/config/DEBUG_MAPLE_TREE_VERBOSE) \ + $(wildcard include/config/DEBUG_MAPLE_TREE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rwsem.h \ + $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_RWSEMS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/osq_lock.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/completion.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/swait.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/wait.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/wait.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/uprobes.h \ + $(wildcard include/config/UPROBES) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/uprobes.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/notifier.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/mutex.h \ + $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_MUTEXES) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/debug_locks.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/srcu.h \ + $(wildcard include/config/TINY_SRCU) \ + $(wildcard include/config/SRCU) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/workqueue.h \ + $(wildcard include/config/DEBUG_OBJECTS_WORK) \ + $(wildcard include/config/FREEZER) \ + $(wildcard include/config/WQ_WATCHDOG) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/timer.h \ + $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/ktime.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/jiffies.h \ + /usr/src/linux-headers-6.1.0-31-common/include/vdso/jiffies.h \ + include/generated/timeconst.h \ + /usr/src/linux-headers-6.1.0-31-common/include/vdso/ktime.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/timekeeping.h \ + $(wildcard include/config/GENERIC_CMOS_UPDATE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/clocksource_ids.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/debugobjects.h \ + $(wildcard include/config/DEBUG_OBJECTS) \ + $(wildcard include/config/DEBUG_OBJECTS_FREE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rcu_segcblist.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/srcutree.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rcu_node_tree.h \ + $(wildcard include/config/RCU_FANOUT) \ + $(wildcard include/config/RCU_FANOUT_LEAF) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/page-flags-layout.h \ + include/generated/bounds.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/seqlock.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/mmu.h \ + $(wildcard include/config/MODIFY_LDT_SYSCALL) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kmod.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/umh.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/gfp.h \ + $(wildcard include/config/HIGHMEM) \ + $(wildcard include/config/ZONE_DMA) \ + $(wildcard include/config/ZONE_DMA32) \ + $(wildcard include/config/ZONE_DEVICE) \ + $(wildcard include/config/COMPACTION) \ + $(wildcard include/config/PM_SLEEP) \ + $(wildcard include/config/CONTIG_ALLOC) \ + $(wildcard include/config/CMA) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/mmzone.h \ + $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \ + $(wildcard include/config/MEMORY_ISOLATION) \ + $(wildcard include/config/ZSMALLOC) \ + $(wildcard include/config/LRU_GEN_STATS) \ + $(wildcard include/config/MEMORY_HOTPLUG) \ + $(wildcard include/config/PAGE_EXTENSION) \ + $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \ + $(wildcard include/config/HAVE_MEMORYLESS_NODES) \ + $(wildcard include/config/SPARSEMEM_EXTREME) \ + $(wildcard include/config/HAVE_ARCH_PFN_VALID) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/nodemask.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/random.h \ + $(wildcard include/config/VMGENID) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/once.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/random.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/irqnr.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/irqnr.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/prandom.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/percpu.h \ + $(wildcard include/config/NEED_PER_CPU_EMBED_FIRST_CHUNK) \ + $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/mmdebug.h \ + $(wildcard include/config/DEBUG_VM) \ + $(wildcard include/config/DEBUG_VM_IRQSOFF) \ + $(wildcard include/config/DEBUG_VM_PGFLAGS) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/archrandom.h \ + $(wildcard include/config/UML) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/pageblock-flags.h \ + $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/page-flags.h \ + $(wildcard include/config/ARCH_USES_PG_UNCACHED) \ + $(wildcard include/config/MEMORY_FAILURE) \ + $(wildcard include/config/PAGE_IDLE_FLAG) \ + $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/local_lock.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/local_lock_internal.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/memory_hotplug.h \ + $(wildcard include/config/HAVE_ARCH_NODEDATA_EXTENSION) \ + $(wildcard include/config/ARCH_HAS_ADD_PAGES) \ + $(wildcard include/config/MEMORY_HOTREMOVE) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/mmzone.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/mmzone_64.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/topology.h \ + $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \ + $(wildcard include/config/SCHED_SMT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/arch_topology.h \ + $(wildcard include/config/ACPI_CPPC_LIB) \ + $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/topology.h \ + $(wildcard include/config/SCHED_MC_PRIO) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/EISA) \ + $(wildcard include/config/X86_MPPARSE) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/mpspec_def.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/x86_init.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/bootparam.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/screen_info.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/screen_info.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/apm_bios.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/apm_bios.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/edd.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/edd.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/ist.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/ist.h \ + /usr/src/linux-headers-6.1.0-31-common/include/video/edid.h \ + $(wildcard include/config/X86) \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/video/edid.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/apicdef.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/topology.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/sysctl.h \ + $(wildcard include/config/SYSCTL) \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/sysctl.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/elf.h \ + $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \ + $(wildcard include/config/ARCH_HAVE_ELF_PROT) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/elf.h \ + $(wildcard include/config/X86_X32_ABI) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/user.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/user_64.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/fsgsbase.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/syscall.h \ + $(wildcard include/config/X86_X32_DISABLED) \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/audit.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/elf-em.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/sched.h \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \ + $(wildcard include/config/SCHED_INFO) \ + $(wildcard include/config/SCHEDSTATS) \ + $(wildcard include/config/SCHED_CORE) \ + $(wildcard include/config/FAIR_GROUP_SCHED) \ + $(wildcard include/config/RT_GROUP_SCHED) \ + $(wildcard include/config/RT_MUTEXES) \ + $(wildcard include/config/UCLAMP_TASK) \ + $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \ + $(wildcard include/config/KMAP_LOCAL) \ + $(wildcard include/config/CGROUP_SCHED) \ + $(wildcard include/config/BLK_DEV_IO_TRACE) \ + $(wildcard include/config/PSI) \ + $(wildcard include/config/COMPAT_BRK) \ + $(wildcard include/config/CGROUPS) \ + $(wildcard include/config/BLK_CGROUP) \ + $(wildcard include/config/PAGE_OWNER) \ + $(wildcard include/config/EVENTFD) \ + $(wildcard include/config/CPU_SUP_INTEL) \ + $(wildcard include/config/TASK_DELAY_ACCT) \ + $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \ + $(wildcard include/config/POSIX_CPUTIMERS) \ + $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \ + $(wildcard include/config/KEYS) \ + $(wildcard include/config/SYSVIPC) \ + $(wildcard include/config/DETECT_HUNG_TASK) \ + $(wildcard include/config/IO_URING) \ + $(wildcard include/config/AUDIT) \ + $(wildcard include/config/AUDITSYSCALL) \ + $(wildcard include/config/UBSAN) \ + $(wildcard include/config/UBSAN_TRAP) \ + $(wildcard include/config/TASK_XACCT) \ + $(wildcard include/config/CPUSETS) \ + $(wildcard include/config/X86_CPU_RESCTRL) \ + $(wildcard include/config/FUTEX) \ + $(wildcard include/config/PERF_EVENTS) \ + $(wildcard include/config/RSEQ) \ + $(wildcard include/config/FAULT_INJECTION) \ + $(wildcard include/config/LATENCYTOP) \ + $(wildcard include/config/FUNCTION_GRAPH_TRACER) \ + $(wildcard include/config/BCACHE) \ + $(wildcard include/config/VMAP_STACK) \ + $(wildcard include/config/SECURITY) \ + $(wildcard include/config/BPF_SYSCALL) \ + $(wildcard include/config/GCC_PLUGIN_STACKLEAK) \ + $(wildcard include/config/X86_MCE) \ + $(wildcard include/config/KRETPROBES) \ + $(wildcard include/config/RETHOOK) \ + $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \ + $(wildcard include/config/RV) \ + $(wildcard include/config/ARCH_TASK_STRUCT_ON_STACK) \ + $(wildcard include/config/PREEMPT_NONE) \ + $(wildcard include/config/PREEMPT_VOLUNTARY) \ + $(wildcard include/config/DEBUG_RSEQ) \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/sched.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/pid.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rculist.h \ + $(wildcard include/config/PROVE_RCU_LIST) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/sem.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/sem.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/ipc.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rhashtable-types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/ipc.h \ + arch/x86/include/generated/uapi/asm/ipcbuf.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/ipcbuf.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/sembuf.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/shm.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/shm.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/hugetlb_encode.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/shmbuf.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/shmbuf.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/shmparam.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kmsan_types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/plist.h \ + $(wildcard include/config/DEBUG_PLIST) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/hrtimer.h \ + $(wildcard include/config/HIGH_RES_TIMERS) \ + $(wildcard include/config/TIME_LOW_RES) \ + $(wildcard include/config/TIMERFD) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/hrtimer_defs.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/timerqueue.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/seccomp.h \ + $(wildcard include/config/SECCOMP) \ + $(wildcard include/config/HAVE_ARCH_SECCOMP_FILTER) \ + $(wildcard include/config/SECCOMP_FILTER) \ + $(wildcard include/config/CHECKPOINT_RESTORE) \ + $(wildcard include/config/SECCOMP_CACHE_DEBUG) \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/seccomp.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/seccomp.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/unistd.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/unistd.h \ + arch/x86/include/generated/uapi/asm/unistd_64.h \ + arch/x86/include/generated/asm/unistd_64_x32.h \ + arch/x86/include/generated/asm/unistd_32_ia32.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/ia32_unistd.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/seccomp.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/unistd.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/resource.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/resource.h \ + arch/x86/include/generated/uapi/asm/resource.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/resource.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/resource.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/latencytop.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/sched/prio.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/sched/types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/signal_types.h \ + $(wildcard include/config/OLD_SIGACTION) \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/signal.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/signal.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/signal.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/signal-defs.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/siginfo.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/siginfo.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/syscall_user_dispatch.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/task_io_accounting.h \ + $(wildcard include/config/TASK_IO_ACCOUNTING) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/posix-timers.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/alarmtimer.h \ + $(wildcard include/config/RTC_CLASS) \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/rseq.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kcsan.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rv.h \ + $(wildcard include/config/RV_REACTORS) \ + arch/x86/include/generated/asm/kmap_size.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/kmap_size.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/vdso.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/elf.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kobject.h \ + $(wildcard include/config/UEVENT_HELPER) \ + $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/sysfs.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kernfs.h \ + $(wildcard include/config/KERNFS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/idr.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/radix-tree.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/xarray.h \ + $(wildcard include/config/XARRAY_MULTI) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kconfig.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/sched/mm.h \ + $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/sync_core.h \ + $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/sync_core.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/ioasid.h \ + $(wildcard include/config/IOASID) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kobject_ns.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/moduleparam.h \ + $(wildcard include/config/ALPHA) \ + $(wildcard include/config/IA64) \ + $(wildcard include/config/PPC64) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rbtree_latch.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/error-injection.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/error-injection.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/module.h \ + $(wildcard include/config/UNWINDER_ORC) \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/module.h \ + $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \ + $(wildcard include/config/MODULES_USE_ELF_REL) \ + $(wildcard include/config/MODULES_USE_ELF_RELA) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/orc_types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/build-salt.h \ + $(wildcard include/config/BUILD_SALT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/elfnote.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/elfnote-lto.h \ + $(wildcard include/config/LTO) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/export-internal.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/vermagic.h \ + $(wildcard include/config/PREEMPT_BUILD) \ + include/generated/utsrelease.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/vermagic.h \ + $(wildcard include/config/M486SX) \ + $(wildcard include/config/M486) \ + $(wildcard include/config/M586) \ + $(wildcard include/config/M586TSC) \ + $(wildcard include/config/M586MMX) \ + $(wildcard include/config/MCORE2) \ + $(wildcard include/config/M686) \ + $(wildcard include/config/MPENTIUMII) \ + $(wildcard include/config/MPENTIUMIII) \ + $(wildcard include/config/MPENTIUMM) \ + $(wildcard include/config/MPENTIUM4) \ + $(wildcard include/config/MK6) \ + $(wildcard include/config/MK7) \ + $(wildcard include/config/MK8) \ + $(wildcard include/config/MELAN) \ + $(wildcard include/config/MCRUSOE) \ + $(wildcard include/config/MEFFICEON) \ + $(wildcard include/config/MWINCHIPC6) \ + $(wildcard include/config/MWINCHIP3D) \ + $(wildcard include/config/MCYRIXIII) \ + $(wildcard include/config/MVIAC3_2) \ + $(wildcard include/config/MVIAC7) \ + $(wildcard include/config/MGEODEGX1) \ + $(wildcard include/config/MGEODE_LX) \ + +/home/device-driver/02_better_hello/hello.mod.o: $(deps_/home/device-driver/02_better_hello/hello.mod.o) + +$(deps_/home/device-driver/02_better_hello/hello.mod.o): diff --git a/02_better_hello/.hello.o.cmd b/02_better_hello/.hello.o.cmd new file mode 100644 index 0000000..6a763d9 --- /dev/null +++ b/02_better_hello/.hello.o.cmd @@ -0,0 +1,845 @@ +cmd_/home/device-driver/02_better_hello/hello.o := gcc-12 -Wp,-MMD,/home/device-driver/02_better_hello/.hello.o.d -nostdinc -I/usr/src/linux-headers-6.1.0-31-common/arch/x86/include -I./arch/x86/include/generated -I/usr/src/linux-headers-6.1.0-31-common/include -I./include -I/usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi -I./arch/x86/include/generated/uapi -I/usr/src/linux-headers-6.1.0-31-common/include/uapi -I./include/generated/uapi -include /usr/src/linux-headers-6.1.0-31-common/include/linux/compiler-version.h -include /usr/src/linux-headers-6.1.0-31-common/include/linux/kconfig.h -include /usr/src/linux-headers-6.1.0-31-common/include/linux/compiler_types.h -D__KERNEL__ -fmacro-prefix-map=/usr/src/linux-headers-6.1.0-31-common/= -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Wno-format-security -std=gnu11 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -fcf-protection=none -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -mtune=generic -mno-red-zone -mcmodel=kernel -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -mharden-sls=all -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation -Wno-format-overflow -Wno-address-of-packed-member -O2 -fno-allow-store-data-races -Wframe-larger-than=2048 -fstack-protector-strong -Wno-main -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-dangling-pointer -ftrivial-auto-var-init=zero -fno-stack-clash-protection -pg -mrecord-mcount -mfentry -DCC_USING_FENTRY -Wvla -Wno-pointer-sign -Wcast-function-type -Wno-stringop-truncation -Wno-stringop-overflow -Wno-restrict -Wno-maybe-uninitialized -Wno-array-bounds -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -fno-strict-overflow -fno-stack-check -fconserve-stack -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wno-packed-not-aligned -g -DMODULE -DKBUILD_BASENAME='"hello"' -DKBUILD_MODNAME='"hello"' -D__KBUILD_MODNAME=kmod_hello -c -o /home/device-driver/02_better_hello/hello.o /home/device-driver/02_better_hello/hello.c ; ./tools/objtool/objtool --hacks=jump_label --hacks=noinstr --orc --retpoline --rethunk --sls --static-call --uaccess --module /home/device-driver/02_better_hello/hello.o + +source_/home/device-driver/02_better_hello/hello.o := /home/device-driver/02_better_hello/hello.c + +deps_/home/device-driver/02_better_hello/hello.o := \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/compiler-version.h \ + $(wildcard include/config/CC_VERSION_TEXT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kconfig.h \ + $(wildcard include/config/CPU_BIG_ENDIAN) \ + $(wildcard include/config/BOOGER) \ + $(wildcard include/config/FOO) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/compiler_types.h \ + $(wildcard include/config/DEBUG_INFO_BTF) \ + $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \ + $(wildcard include/config/HAVE_ARCH_COMPILER_H) \ + $(wildcard include/config/CC_HAS_ASM_INLINE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/compiler_attributes.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/compiler-gcc.h \ + $(wildcard include/config/RETPOLINE) \ + $(wildcard include/config/GCC_ASM_GOTO_OUTPUT_WORKAROUND) \ + $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \ + $(wildcard include/config/SHADOW_CALL_STACK) \ + $(wildcard include/config/KCOV) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/module.h \ + $(wildcard include/config/MODULES) \ + $(wildcard include/config/SYSFS) \ + $(wildcard include/config/MODULES_TREE_LOOKUP) \ + $(wildcard include/config/LIVEPATCH) \ + $(wildcard include/config/STACKTRACE_BUILD_ID) \ + $(wildcard include/config/ARCH_USES_CFI_TRAPS) \ + $(wildcard include/config/MODULE_SIG) \ + $(wildcard include/config/ARCH_WANTS_MODULES_DATA_IN_VMALLOC) \ + $(wildcard include/config/GENERIC_BUG) \ + $(wildcard include/config/KALLSYMS) \ + $(wildcard include/config/SMP) \ + $(wildcard include/config/TRACEPOINTS) \ + $(wildcard include/config/TREE_SRCU) \ + $(wildcard include/config/BPF_EVENTS) \ + $(wildcard include/config/JUMP_LABEL) \ + $(wildcard include/config/TRACING) \ + $(wildcard include/config/EVENT_TRACING) \ + $(wildcard include/config/FTRACE_MCOUNT_RECORD) \ + $(wildcard include/config/KPROBES) \ + $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \ + $(wildcard include/config/KUNIT) \ + $(wildcard include/config/PRINTK_INDEX) \ + $(wildcard include/config/MODULE_UNLOAD) \ + $(wildcard include/config/CONSTRUCTORS) \ + $(wildcard include/config/FUNCTION_ERROR_INJECTION) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/list.h \ + $(wildcard include/config/DEBUG_LIST) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/container_of.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/build_bug.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/compiler.h \ + $(wildcard include/config/TRACE_BRANCH_PROFILING) \ + $(wildcard include/config/PROFILE_ALL_BRANCHES) \ + $(wildcard include/config/OBJTOOL) \ + $(wildcard include/config/64BIT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/compiler_types.h \ + arch/x86/include/generated/asm/rwonce.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/rwonce.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kasan-checks.h \ + $(wildcard include/config/KASAN_GENERIC) \ + $(wildcard include/config/KASAN_SW_TAGS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/types.h \ + $(wildcard include/config/HAVE_UID16) \ + $(wildcard include/config/UID16) \ + $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \ + $(wildcard include/config/PHYS_ADDR_T_64BIT) \ + $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/types.h \ + arch/x86/include/generated/uapi/asm/types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/int-ll64.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/int-ll64.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/bitsperlong.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/bitsperlong.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/bitsperlong.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/posix_types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/stddef.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/stddef.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/X86_32) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/posix_types_64.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/posix_types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kcsan-checks.h \ + $(wildcard include/config/KCSAN) \ + $(wildcard include/config/KCSAN_WEAK_MEMORY) \ + $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/err.h \ + arch/x86/include/generated/uapi/asm/errno.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/errno.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/errno-base.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/poison.h \ + $(wildcard include/config/ILLEGAL_POINTER_VALUE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/const.h \ + /usr/src/linux-headers-6.1.0-31-common/include/vdso/const.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/const.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/barrier.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/alternative.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/stringify.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/asm.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/extable_fixup_types.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/nops.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/barrier.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/stat.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/stat.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/stat.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/time.h \ + $(wildcard include/config/POSIX_TIMERS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/cache.h \ + $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/kernel.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/sysinfo.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/cache.h \ + $(wildcard include/config/X86_L1_CACHE_SHIFT) \ + $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \ + $(wildcard include/config/X86_VSMP) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/linkage.h \ + $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/export.h \ + $(wildcard include/config/MODVERSIONS) \ + $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \ + $(wildcard include/config/TRIM_UNUSED_KSYMS) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/linkage.h \ + $(wildcard include/config/X86_64) \ + $(wildcard include/config/X86_ALIGNMENT_16) \ + $(wildcard include/config/RETHUNK) \ + $(wildcard include/config/SLS) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/ibt.h \ + $(wildcard include/config/X86_KERNEL_IBT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/math64.h \ + $(wildcard include/config/ARCH_SUPPORTS_INT128) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/math.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/div64.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/div64.h \ + /usr/src/linux-headers-6.1.0-31-common/include/vdso/math64.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/time64.h \ + /usr/src/linux-headers-6.1.0-31-common/include/vdso/time64.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/time.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/time_types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/time32.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/timex.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/timex.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/param.h \ + arch/x86/include/generated/uapi/asm/param.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/param.h \ + $(wildcard include/config/HZ) \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/param.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/timex.h \ + $(wildcard include/config/X86_TSC) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/processor.h \ + $(wildcard include/config/X86_VMX_FEATURE_NAMES) \ + $(wildcard include/config/X86_IOPL_IOPERM) \ + $(wildcard include/config/STACKPROTECTOR) \ + $(wildcard include/config/VM86) \ + $(wildcard include/config/PARAVIRT_XXL) \ + $(wildcard include/config/X86_DEBUGCTLMSR) \ + $(wildcard include/config/CPU_SUP_AMD) \ + $(wildcard include/config/XEN) \ + $(wildcard include/config/X86_SGX) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/PAGE_TABLE_ISOLATION) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/processor-flags.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/mem_encrypt.h \ + $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \ + $(wildcard include/config/AMD_MEM_ENCRYPT) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/mem_encrypt.h \ + $(wildcard include/config/X86_MEM_ENCRYPT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/init.h \ + $(wildcard include/config/STRICT_KERNEL_RWX) \ + $(wildcard include/config/STRICT_MODULE_RWX) \ + $(wildcard include/config/LTO_CLANG) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/cc_platform.h \ + $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/math_emu.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/ptrace.h \ + $(wildcard include/config/PARAVIRT) \ + $(wildcard include/config/IA32_EMULATION) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/segment.h \ + $(wildcard include/config/XEN_PV) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/page_types.h \ + $(wildcard include/config/PHYSICAL_START) \ + $(wildcard include/config/PHYSICAL_ALIGN) \ + $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/KASAN) \ + $(wildcard include/config/DYNAMIC_MEMORY_LAYOUT) \ + $(wildcard include/config/X86_5LEVEL) \ + $(wildcard include/config/RANDOMIZE_BASE) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/kaslr.h \ + $(wildcard include/config/RANDOMIZE_MEMORY) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/ptrace.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/ptrace-abi.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/PGTABLE_LEVELS) \ + $(wildcard include/config/ZERO_CALL_USED_REGS) \ + $(wildcard include/config/PARAVIRT_DEBUG) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/desc_defs.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \ + $(wildcard include/config/X86_PAE) \ + $(wildcard include/config/MEM_SOFT_DIRTY) \ + $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \ + $(wildcard include/config/PROC_FS) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/pgtable_64_types.h \ + $(wildcard include/config/KMSAN) \ + $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/sparsemem.h \ + $(wildcard include/config/SPARSEMEM) \ + $(wildcard include/config/NUMA_KEEP_MEMINFO) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/nospec-branch.h \ + $(wildcard include/config/CPU_UNRET_ENTRY) \ + $(wildcard include/config/CPU_SRSO) \ + $(wildcard include/config/CPU_IBPB_ENTRY) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/static_key.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/jump_label.h \ + $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/jump_label.h \ + $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/objtool.h \ + $(wildcard include/config/FRAME_POINTER) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/cpufeatures.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/required-features.h \ + $(wildcard include/config/X86_MINIMUM_CPU_FAMILY) \ + $(wildcard include/config/MATH_EMULATION) \ + $(wildcard include/config/X86_CMPXCHG64) \ + $(wildcard include/config/X86_CMOV) \ + $(wildcard include/config/X86_P6_NOP) \ + $(wildcard include/config/MATOM) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/disabled-features.h \ + $(wildcard include/config/X86_UMIP) \ + $(wildcard include/config/INTEL_IOMMU_SVM) \ + $(wildcard include/config/INTEL_TDX_GUEST) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/msr-index.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/bits.h \ + /usr/src/linux-headers-6.1.0-31-common/include/vdso/bits.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/unwind_hints.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/orc_types.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/byteorder.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/byteorder/little_endian.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/byteorder/little_endian.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/swab.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/swab.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/swab.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/byteorder/generic.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/percpu.h \ + $(wildcard include/config/X86_64_SMP) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kernel.h \ + $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \ + $(wildcard include/config/PREEMPT_DYNAMIC) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \ + $(wildcard include/config/PREEMPT_) \ + $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \ + $(wildcard include/config/MMU) \ + $(wildcard include/config/PROVE_LOCKING) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/stdarg.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/align.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/limits.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/limits.h \ + /usr/src/linux-headers-6.1.0-31-common/include/vdso/limits.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/bitops.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/typecheck.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/bitops/generic-non-atomic.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/bitops.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/rmwcc.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/bitops/sched.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/arch_hweight.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/bitops/const_hweight.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/bitops/instrumented-atomic.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/instrumented.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kmsan-checks.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/bitops/instrumented-non-atomic.h \ + $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/bitops/instrumented-lock.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/bitops/le.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/bitops/ext2-atomic-setbit.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kstrtox.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/log2.h \ + $(wildcard include/config/ARCH_HAS_ILOG2_U32) \ + $(wildcard include/config/ARCH_HAS_ILOG2_U64) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/minmax.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/panic.h \ + $(wildcard include/config/PANIC_TIMEOUT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/printk.h \ + $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \ + $(wildcard include/config/EARLY_PRINTK) \ + $(wildcard include/config/PRINTK) \ + $(wildcard include/config/DYNAMIC_DEBUG) \ + $(wildcard include/config/DYNAMIC_DEBUG_CORE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kern_levels.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/ratelimit_types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/spinlock_types_raw.h \ + $(wildcard include/config/DEBUG_SPINLOCK) \ + $(wildcard include/config/DEBUG_LOCK_ALLOC) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/spinlock_types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/qspinlock_types.h \ + $(wildcard include/config/NR_CPUS) \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/qrwlock_types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/lockdep_types.h \ + $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \ + $(wildcard include/config/LOCKDEP) \ + $(wildcard include/config/LOCK_STAT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/once_lite.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/dynamic_debug.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/static_call_types.h \ + $(wildcard include/config/HAVE_STATIC_CALL) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/instruction_pointer.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/percpu.h \ + $(wildcard include/config/DEBUG_PREEMPT) \ + $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/threads.h \ + $(wildcard include/config/BASE_SMALL) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/percpu-defs.h \ + $(wildcard include/config/DEBUG_FORCE_WEAK_PER_CPU) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/GEN-for-each-reg.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/proto.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/ldt.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/sigcontext.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/current.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/page.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/page_64.h \ + $(wildcard include/config/DEBUG_VIRTUAL) \ + $(wildcard include/config/FLATMEM) \ + $(wildcard include/config/X86_VSYSCALL_EMULATION) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/range.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/memory_model.h \ + $(wildcard include/config/SPARSEMEM_VMEMMAP) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/pfn.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/getorder.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/msr.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/msr-index.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/cpumask.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/cpumask.h \ + $(wildcard include/config/FORCE_NR_CPUS) \ + $(wildcard include/config/HOTPLUG_CPU) \ + $(wildcard include/config/DEBUG_PER_CPU_MAPS) \ + $(wildcard include/config/CPUMASK_OFFSTACK) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/bitmap.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/find.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/string.h \ + $(wildcard include/config/BINARY_PRINTF) \ + $(wildcard include/config/FORTIFY_SOURCE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/errno.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/errno.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/overflow.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/string.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/string.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/string_64.h \ + $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/fortify-string.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/bug.h \ + $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/bug.h \ + $(wildcard include/config/DEBUG_BUGVERBOSE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/instrumentation.h \ + $(wildcard include/config/NOINSTR_VALIDATION) \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/bug.h \ + $(wildcard include/config/BUG) \ + $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/atomic.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/atomic.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/cmpxchg.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/cmpxchg_64.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/atomic64_64.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/atomic/atomic-arch-fallback.h \ + $(wildcard include/config/GENERIC_ATOMIC64) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/atomic/atomic-long.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/atomic/atomic-instrumented.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/gfp_types.h \ + $(wildcard include/config/KASAN_HW_TAGS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/numa.h \ + $(wildcard include/config/NODES_SHIFT) \ + $(wildcard include/config/NUMA) \ + $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/msr.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/ioctl.h \ + arch/x86/include/generated/uapi/asm/ioctl.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/ioctl.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/ioctl.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/shared/msr.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/tracepoint-defs.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/paravirt.h \ + $(wildcard include/config/PARAVIRT_SPINLOCKS) \ + $(wildcard include/config/DEBUG_ENTRY) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/frame.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/special_insns.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/irqflags.h \ + $(wildcard include/config/TRACE_IRQFLAGS) \ + $(wildcard include/config/PREEMPT_RT) \ + $(wildcard include/config/IRQSOFF_TRACER) \ + $(wildcard include/config/PREEMPT_TRACER) \ + $(wildcard include/config/DEBUG_IRQFLAGS) \ + $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/cleanup.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/irqflags.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/fpu/types.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/vmxfeatures.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/vdso/processor.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/personality.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/personality.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/tsc.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/cpufeature.h \ + $(wildcard include/config/X86_FEATURE_NAMES) \ + /usr/src/linux-headers-6.1.0-31-common/include/vdso/time32.h \ + /usr/src/linux-headers-6.1.0-31-common/include/vdso/time.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/uidgid.h \ + $(wildcard include/config/MULTIUSER) \ + $(wildcard include/config/USER_NS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/highuid.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/buildid.h \ + $(wildcard include/config/CRASH_CORE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/mm_types.h \ + $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \ + $(wildcard include/config/MEMCG) \ + $(wildcard include/config/USERFAULTFD) \ + $(wildcard include/config/SWAP) \ + $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \ + $(wildcard include/config/MEMBARRIER) \ + $(wildcard include/config/AIO) \ + $(wildcard include/config/MMU_NOTIFIER) \ + $(wildcard include/config/TRANSPARENT_HUGEPAGE) \ + $(wildcard include/config/NUMA_BALANCING) \ + $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \ + $(wildcard include/config/HUGETLB_PAGE) \ + $(wildcard include/config/IOMMU_SVA) \ + $(wildcard include/config/KSM) \ + $(wildcard include/config/LRU_GEN) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/mm_types_task.h \ + $(wildcard include/config/SPLIT_PTLOCK_CPUS) \ + $(wildcard include/config/ARCH_ENABLE_SPLIT_PMD_PTLOCK) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/tlbbatch.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/auxvec.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/auxvec.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/auxvec.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kref.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/spinlock.h \ + $(wildcard include/config/PREEMPTION) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/preempt.h \ + $(wildcard include/config/PREEMPT_COUNT) \ + $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \ + $(wildcard include/config/PREEMPT_NOTIFIERS) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/preempt.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/thread_info.h \ + $(wildcard include/config/THREAD_INFO_IN_TASK) \ + $(wildcard include/config/GENERIC_ENTRY) \ + $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \ + $(wildcard include/config/HARDENED_USERCOPY) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/restart_block.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/thread_info.h \ + $(wildcard include/config/COMPAT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/bottom_half.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/lockdep.h \ + $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/smp.h \ + $(wildcard include/config/UP_LATE_INIT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/smp_types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/llist.h \ + $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/smp.h \ + $(wildcard include/config/X86_LOCAL_APIC) \ + $(wildcard include/config/DEBUG_NMI_SELFTEST) \ + arch/x86/include/generated/asm/mmiowb.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/mmiowb.h \ + $(wildcard include/config/MMIOWB) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/spinlock_types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rwlock_types.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/spinlock.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/qspinlock.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/qspinlock.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/qrwlock.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/qrwlock.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rwlock.h \ + $(wildcard include/config/PREEMPT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/spinlock_api_smp.h \ + $(wildcard include/config/INLINE_SPIN_LOCK) \ + $(wildcard include/config/INLINE_SPIN_LOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \ + $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/GENERIC_LOCKBREAK) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rwlock_api_smp.h \ + $(wildcard include/config/INLINE_READ_LOCK) \ + $(wildcard include/config/INLINE_WRITE_LOCK) \ + $(wildcard include/config/INLINE_READ_LOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_LOCK_BH) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_READ_TRYLOCK) \ + $(wildcard include/config/INLINE_WRITE_TRYLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/refcount.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rbtree.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rbtree_types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rcupdate.h \ + $(wildcard include/config/PREEMPT_RCU) \ + $(wildcard include/config/TINY_RCU) \ + $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \ + $(wildcard include/config/TASKS_RCU_GENERIC) \ + $(wildcard include/config/RCU_STALL_COMMON) \ + $(wildcard include/config/NO_HZ_FULL) \ + $(wildcard include/config/KVM_XFER_TO_GUEST_WORK) \ + $(wildcard include/config/RCU_NOCB_CPU) \ + $(wildcard include/config/TASKS_RCU) \ + $(wildcard include/config/TASKS_TRACE_RCU) \ + $(wildcard include/config/TASKS_RUDE_RCU) \ + $(wildcard include/config/TREE_RCU) \ + $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \ + $(wildcard include/config/PROVE_RCU) \ + $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/context_tracking_irq.h \ + $(wildcard include/config/CONTEXT_TRACKING_IDLE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rcutree.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/maple_tree.h \ + $(wildcard include/config/MAPLE_RCU_DISABLED) \ + $(wildcard include/config/DEBUG_MAPLE_TREE_VERBOSE) \ + $(wildcard include/config/DEBUG_MAPLE_TREE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rwsem.h \ + $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_RWSEMS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/osq_lock.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/completion.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/swait.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/wait.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/wait.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/uprobes.h \ + $(wildcard include/config/UPROBES) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/uprobes.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/notifier.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/mutex.h \ + $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_MUTEXES) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/debug_locks.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/srcu.h \ + $(wildcard include/config/TINY_SRCU) \ + $(wildcard include/config/SRCU) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/workqueue.h \ + $(wildcard include/config/DEBUG_OBJECTS_WORK) \ + $(wildcard include/config/FREEZER) \ + $(wildcard include/config/WQ_WATCHDOG) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/timer.h \ + $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/ktime.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/jiffies.h \ + /usr/src/linux-headers-6.1.0-31-common/include/vdso/jiffies.h \ + include/generated/timeconst.h \ + /usr/src/linux-headers-6.1.0-31-common/include/vdso/ktime.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/timekeeping.h \ + $(wildcard include/config/GENERIC_CMOS_UPDATE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/clocksource_ids.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/debugobjects.h \ + $(wildcard include/config/DEBUG_OBJECTS) \ + $(wildcard include/config/DEBUG_OBJECTS_FREE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rcu_segcblist.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/srcutree.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rcu_node_tree.h \ + $(wildcard include/config/RCU_FANOUT) \ + $(wildcard include/config/RCU_FANOUT_LEAF) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/page-flags-layout.h \ + include/generated/bounds.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/seqlock.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/mmu.h \ + $(wildcard include/config/MODIFY_LDT_SYSCALL) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kmod.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/umh.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/gfp.h \ + $(wildcard include/config/HIGHMEM) \ + $(wildcard include/config/ZONE_DMA) \ + $(wildcard include/config/ZONE_DMA32) \ + $(wildcard include/config/ZONE_DEVICE) \ + $(wildcard include/config/COMPACTION) \ + $(wildcard include/config/PM_SLEEP) \ + $(wildcard include/config/CONTIG_ALLOC) \ + $(wildcard include/config/CMA) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/mmzone.h \ + $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \ + $(wildcard include/config/MEMORY_ISOLATION) \ + $(wildcard include/config/ZSMALLOC) \ + $(wildcard include/config/LRU_GEN_STATS) \ + $(wildcard include/config/MEMORY_HOTPLUG) \ + $(wildcard include/config/PAGE_EXTENSION) \ + $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \ + $(wildcard include/config/HAVE_MEMORYLESS_NODES) \ + $(wildcard include/config/SPARSEMEM_EXTREME) \ + $(wildcard include/config/HAVE_ARCH_PFN_VALID) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/nodemask.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/random.h \ + $(wildcard include/config/VMGENID) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/once.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/random.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/irqnr.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/irqnr.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/prandom.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/percpu.h \ + $(wildcard include/config/NEED_PER_CPU_EMBED_FIRST_CHUNK) \ + $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/mmdebug.h \ + $(wildcard include/config/DEBUG_VM) \ + $(wildcard include/config/DEBUG_VM_IRQSOFF) \ + $(wildcard include/config/DEBUG_VM_PGFLAGS) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/archrandom.h \ + $(wildcard include/config/UML) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/pageblock-flags.h \ + $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/page-flags.h \ + $(wildcard include/config/ARCH_USES_PG_UNCACHED) \ + $(wildcard include/config/MEMORY_FAILURE) \ + $(wildcard include/config/PAGE_IDLE_FLAG) \ + $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/local_lock.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/local_lock_internal.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/memory_hotplug.h \ + $(wildcard include/config/HAVE_ARCH_NODEDATA_EXTENSION) \ + $(wildcard include/config/ARCH_HAS_ADD_PAGES) \ + $(wildcard include/config/MEMORY_HOTREMOVE) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/mmzone.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/mmzone_64.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/topology.h \ + $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \ + $(wildcard include/config/SCHED_SMT) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/arch_topology.h \ + $(wildcard include/config/ACPI_CPPC_LIB) \ + $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/topology.h \ + $(wildcard include/config/SCHED_MC_PRIO) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/EISA) \ + $(wildcard include/config/X86_MPPARSE) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/mpspec_def.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/x86_init.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/bootparam.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/screen_info.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/screen_info.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/apm_bios.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/apm_bios.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/edd.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/edd.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/ist.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/ist.h \ + /usr/src/linux-headers-6.1.0-31-common/include/video/edid.h \ + $(wildcard include/config/X86) \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/video/edid.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/apicdef.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/topology.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/sysctl.h \ + $(wildcard include/config/SYSCTL) \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/sysctl.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/elf.h \ + $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \ + $(wildcard include/config/ARCH_HAVE_ELF_PROT) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/elf.h \ + $(wildcard include/config/X86_X32_ABI) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/user.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/user_64.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/fsgsbase.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/syscall.h \ + $(wildcard include/config/X86_X32_DISABLED) \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/audit.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/elf-em.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/sched.h \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \ + $(wildcard include/config/SCHED_INFO) \ + $(wildcard include/config/SCHEDSTATS) \ + $(wildcard include/config/SCHED_CORE) \ + $(wildcard include/config/FAIR_GROUP_SCHED) \ + $(wildcard include/config/RT_GROUP_SCHED) \ + $(wildcard include/config/RT_MUTEXES) \ + $(wildcard include/config/UCLAMP_TASK) \ + $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \ + $(wildcard include/config/KMAP_LOCAL) \ + $(wildcard include/config/CGROUP_SCHED) \ + $(wildcard include/config/BLK_DEV_IO_TRACE) \ + $(wildcard include/config/PSI) \ + $(wildcard include/config/COMPAT_BRK) \ + $(wildcard include/config/CGROUPS) \ + $(wildcard include/config/BLK_CGROUP) \ + $(wildcard include/config/PAGE_OWNER) \ + $(wildcard include/config/EVENTFD) \ + $(wildcard include/config/CPU_SUP_INTEL) \ + $(wildcard include/config/TASK_DELAY_ACCT) \ + $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \ + $(wildcard include/config/POSIX_CPUTIMERS) \ + $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \ + $(wildcard include/config/KEYS) \ + $(wildcard include/config/SYSVIPC) \ + $(wildcard include/config/DETECT_HUNG_TASK) \ + $(wildcard include/config/IO_URING) \ + $(wildcard include/config/AUDIT) \ + $(wildcard include/config/AUDITSYSCALL) \ + $(wildcard include/config/UBSAN) \ + $(wildcard include/config/UBSAN_TRAP) \ + $(wildcard include/config/TASK_XACCT) \ + $(wildcard include/config/CPUSETS) \ + $(wildcard include/config/X86_CPU_RESCTRL) \ + $(wildcard include/config/FUTEX) \ + $(wildcard include/config/PERF_EVENTS) \ + $(wildcard include/config/RSEQ) \ + $(wildcard include/config/FAULT_INJECTION) \ + $(wildcard include/config/LATENCYTOP) \ + $(wildcard include/config/FUNCTION_GRAPH_TRACER) \ + $(wildcard include/config/BCACHE) \ + $(wildcard include/config/VMAP_STACK) \ + $(wildcard include/config/SECURITY) \ + $(wildcard include/config/BPF_SYSCALL) \ + $(wildcard include/config/GCC_PLUGIN_STACKLEAK) \ + $(wildcard include/config/X86_MCE) \ + $(wildcard include/config/KRETPROBES) \ + $(wildcard include/config/RETHOOK) \ + $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \ + $(wildcard include/config/RV) \ + $(wildcard include/config/ARCH_TASK_STRUCT_ON_STACK) \ + $(wildcard include/config/PREEMPT_NONE) \ + $(wildcard include/config/PREEMPT_VOLUNTARY) \ + $(wildcard include/config/DEBUG_RSEQ) \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/sched.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/pid.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rculist.h \ + $(wildcard include/config/PROVE_RCU_LIST) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/sem.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/sem.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/ipc.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rhashtable-types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/ipc.h \ + arch/x86/include/generated/uapi/asm/ipcbuf.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/ipcbuf.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/sembuf.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/shm.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/shm.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/hugetlb_encode.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/shmbuf.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/shmbuf.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/shmparam.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kmsan_types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/plist.h \ + $(wildcard include/config/DEBUG_PLIST) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/hrtimer.h \ + $(wildcard include/config/HIGH_RES_TIMERS) \ + $(wildcard include/config/TIME_LOW_RES) \ + $(wildcard include/config/TIMERFD) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/hrtimer_defs.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/timerqueue.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/seccomp.h \ + $(wildcard include/config/SECCOMP) \ + $(wildcard include/config/HAVE_ARCH_SECCOMP_FILTER) \ + $(wildcard include/config/SECCOMP_FILTER) \ + $(wildcard include/config/CHECKPOINT_RESTORE) \ + $(wildcard include/config/SECCOMP_CACHE_DEBUG) \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/seccomp.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/seccomp.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/unistd.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/unistd.h \ + arch/x86/include/generated/uapi/asm/unistd_64.h \ + arch/x86/include/generated/asm/unistd_64_x32.h \ + arch/x86/include/generated/asm/unistd_32_ia32.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/ia32_unistd.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/seccomp.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/unistd.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/resource.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/resource.h \ + arch/x86/include/generated/uapi/asm/resource.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/resource.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/resource.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/latencytop.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/sched/prio.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/sched/types.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/signal_types.h \ + $(wildcard include/config/OLD_SIGACTION) \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/signal.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/signal.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/signal.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/signal-defs.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/uapi/asm/siginfo.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/asm-generic/siginfo.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/syscall_user_dispatch.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/task_io_accounting.h \ + $(wildcard include/config/TASK_IO_ACCOUNTING) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/posix-timers.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/alarmtimer.h \ + $(wildcard include/config/RTC_CLASS) \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/rseq.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kcsan.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rv.h \ + $(wildcard include/config/RV_REACTORS) \ + arch/x86/include/generated/asm/kmap_size.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/kmap_size.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/vdso.h \ + /usr/src/linux-headers-6.1.0-31-common/include/uapi/linux/elf.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kobject.h \ + $(wildcard include/config/UEVENT_HELPER) \ + $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/sysfs.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kernfs.h \ + $(wildcard include/config/KERNFS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/idr.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/radix-tree.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/xarray.h \ + $(wildcard include/config/XARRAY_MULTI) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kconfig.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/sched/mm.h \ + $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/sync_core.h \ + $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/sync_core.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/ioasid.h \ + $(wildcard include/config/IOASID) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/kobject_ns.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/moduleparam.h \ + $(wildcard include/config/ALPHA) \ + $(wildcard include/config/IA64) \ + $(wildcard include/config/PPC64) \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/rbtree_latch.h \ + /usr/src/linux-headers-6.1.0-31-common/include/linux/error-injection.h \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/error-injection.h \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/module.h \ + $(wildcard include/config/UNWINDER_ORC) \ + /usr/src/linux-headers-6.1.0-31-common/include/asm-generic/module.h \ + $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \ + $(wildcard include/config/MODULES_USE_ELF_REL) \ + $(wildcard include/config/MODULES_USE_ELF_RELA) \ + /usr/src/linux-headers-6.1.0-31-common/arch/x86/include/asm/orc_types.h \ + +/home/device-driver/02_better_hello/hello.o: $(deps_/home/device-driver/02_better_hello/hello.o) + +$(deps_/home/device-driver/02_better_hello/hello.o): + +/home/device-driver/02_better_hello/hello.o: $(wildcard ./tools/objtool/objtool) diff --git a/02_better_hello/.modules.order.cmd b/02_better_hello/.modules.order.cmd new file mode 100644 index 0000000..e2663b1 --- /dev/null +++ b/02_better_hello/.modules.order.cmd @@ -0,0 +1 @@ +cmd_/home/device-driver/02_better_hello/modules.order := { echo /home/device-driver/02_better_hello/hello.ko; :; } > /home/device-driver/02_better_hello/modules.order diff --git a/02_better_hello/Makefile b/02_better_hello/Makefile new file mode 100644 index 0000000..aae36ca --- /dev/null +++ b/02_better_hello/Makefile @@ -0,0 +1,21 @@ + +#This variable is used to specify all the object file +#which will be loaded and compile as kernel module for +#usage. And the compilation for obj file from .c file +#is done automatically. + +obj-m += hello.o + +# M variable used here tells the "make" to look in +# current path to build bootable kernel module from +# .c files in specified current path. + +# modules: It is the target that is used to build the kernel +# modules. +# clean: It is used to clean the build targets, compile and +# generated files which would be created. +all: + make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules + +clean: + make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean \ No newline at end of file diff --git a/02_better_hello/Module.symvers b/02_better_hello/Module.symvers new file mode 100644 index 0000000..e69de29 diff --git a/02_better_hello/hello.c b/02_better_hello/hello.c new file mode 100644 index 0000000..d545637 --- /dev/null +++ b/02_better_hello/hello.c @@ -0,0 +1,102 @@ +#include +#include + + +/* +* insmod: It's the command to insert the +* loadable kernel module to the +* kernel. +* +* Usage: +* insmod ./.ko +* +* rmmod: It's the command to remove the +* loadable kernel module from the +* kernel. +* +* Usage: +* rmmod ./.ko +* +* modinfo: It's the command to see the +* description of the kernel module. +* +* Usage: +* modinfo .ko +* +* lsmod: It's the command to see all the loaded +* module of the linux kernel. +* +* Usage: +* lsmod +* +* modprobe: It's the command to load module with +* all its dependencies. For using modprobe +* kernel module need to be present in +* /lib/modules path so our custom build +* kernel module on different path cannot +* use modprobe. +* +* Usage: +* modprobe +*/ + +/* +* There are two imp. events for linux driver +* The loading of driver on kernel and unloading +* of driver from kernel. +*/ + +/* +* Function to use when this is +* module is loaded to the kernel. +* __init-> It's a macro which does nothing +* but only increase the readibility +* of kernel module. +* We just have to search for this macro +* to see what are the modules which execute +* at the starting of the driver. +* This is helpful when module is very big. +*/ +static int +__init my_init(void){ + + + /* + * We don't use printf for linux driver + * because printf writes to standard IO + * and there is no standard IO for kernel + * There is only kernel's log. Kernel's log + * is buffer which stores whatever is written + * onto that buffer. It can me printed using + * command: dmesg + */ + + printk("hello - Hello, Kernel!\n"); + return 0; +} + +/* +* Function to execute when module +* is unloaded from the kernel +* __exit-> It's a macro which does nothing +* but only increase the readibility +* of kernel module. +* We just have to search for this macro +* to see what are the modules which execute +* at the exiting of the driver. +* This is helpful when module is very big. +*/ + +static void +__exit my_exit(void){ + + printk("hello - Goodbye, kernel!\n"); +} + +module_init(my_init); +module_exit(my_exit); + + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Junet Hossain B#bw7NcnMb2X+i0YbMx)Ih$(y{$mUr2XZOM`>Db{95Ug9i|M$$-{cr-Ja z8QF3OiCGGv3r(R*pp=F^r9cv(G?b-oDI^VBXj5=lLf8WY$d3}1hLZPt&biObBgcXM z@qT`Pyl?$U9^dbCw{!13_uO;NJ z^?uLR?OQwAcW!TwF3#@RrPNcDKk(2)^cSbMU;4i56{iG8;SCKQ@HE z(y`=h_Mpnda_JOhAG}T_ql>YFOs6^*%PdCc<1+_WPC;a1cr236#A1u-Tx2mdYcC}e zspu>vQ6me=vk@MPg=Z0`lyax_s~7p}Ba6>{jIwNdE|$z?F4*>q6nv4_mv4W=>$rY8 z6Hn&OzDTJTfBne5mtW8I?d8rrHl}7NleBXSOUeIXQ|G?>rGKURm=3IsorqpYE#+Rk zyZ>uBvZnvny8GXb{&xoce>nqB;1DTN1_?anr$;kAuJ*@c71QfV>kytEgAO0%+e>Ma zGxRHuwB_-zEcJLeFJKlyx+#w(FQp|186Ik?%BrTn%AW{t!e7RzvL5{9DYJ04(b-7A zNtjN;auNY25pfb-PU51IP=;|l*eRxxzSkNLy?DtLeQ}RP{PY#bFW%(yU_SY^ zCZE&ps+w47z*Y67zJtH3swtKD>F)LSeQ&y2RZ)!GeXnSMnq-!&fa@U=FLq_taI3aPQ8> zLKFwgcCxFugVo^I=0t zrkY;8>0KyPPp|0DNq`FDL}7GFHPCyb#hRnP^&f5xY2!_e&a11`RK=*{oN$M!;EEHj zLC&J`Rmj+l|0^hAD6<=XHOL`Xxu4Q<$nmTgHTBmOvgK86U4mcn*yL4R!yWWW4nlbq z4wJIqAcvy7Y6!mrue#)btfaKOZwwvHr&nzu9lb$LPsv`r>8t#TkJpxLrwR-Mw=8w4 zswqljx9?HaS$>67@Ks1vKF=9Dcc_{-5F{DbvIJQB0B68l43RCIKqe$_r978dl zl}e$^TUmJuuiVsl19dcQOqsXIpC5#GdtngX9j^31!%b*H$`96450X9|q=8EMMpybK zR~g&Y{uHN8S|F}u?rqA?T2Zi`CY#?Eh3ap1Iw@*w`eHu4s%j0+tp-s+q-dn!Tt2&{ z;pO@C)`oZH(|a3Un@?ZU@Wy=lPb1X5-z<7($!nbRu;^Vrnh=MQd%YRt_^qP%mb@ol zO#SN-akW*C{9K1x1P)w`#=q)MH&=+ppgJHmj|7~R?&x8BLX>K`M*43XVxfuX8cHpm7oaS892JW`Z zbNK5>4>eN!M40!}skMYIdVOb&w}BqyL)A$bHSeBALQu*G(m*Uh8KZbQs#I9etwuNl zG$!aJM&n`ByI;_4hM)HBgMwZv=#rq@jq2U7jvp5EGGo=RXOwzW(94YqV^*olf?i=% z(#kz4=nsv`cWr^cWZl^`X=HUi6tsj#e19w@0~)?gV2y^amp;N8{;6~l(eTfV;yR46 zO~W?`+^FH31a8vsuchTJ8s1|>0wAM9!?zh$6=Y4Pu^MD6-#d*ug|T&YY5Xq1)?K>z zdyU5DrZ7GY?=u3lF2B_914bE*UXkXA#y+T*Lc_l^YHHDQSi^rXni~Kk8h*qG&7$Wv z4L@!)twrvDhW}(VZv`CF@Kc8MO>o_54IeS8Qkd~64L>a-UeNHfhDEt)4L>Kj%Nl+` z;B6ZIn^Ch99bMG$KP2}~4ZmpAbt3mJ4Ih`>yEXi>(R2{G_h|Sv$-P&@CxndqHT;HA zTT%vo)9{;8_>zX-5%@0}e%Gixi9_yT4Zm+R^`oOlHT;1TzO3O7jfRuReNw}xCHE-} zet^Ty!9C04`xDIuVwfesgl ztq_Q4BbjVQkm}=l_m&>8c9wwoGuwBo(k|W}1a_&?ZUz>>PE~q@K>%QfD(ztq_D!c% zX)mWEzUgIE+Q;cO6xyyz`x$fqbg0q+2A#glK2cC9wU2Rn%r}Gd z5T{T3W|1D|^pr0fSEVDIUhvH#J<91c53+QU!Llz7l1_5^qHiXvN>6e6PAPPn!Ck&A z3SGzPyM0*{I>YIEWG1b$fb~Pn2v;eq@{#tSK{W#pD_~_o23AC)0F^V_TC=JwSWjtV zOY3Yp0koQsr@b|e^ajq^CUt7K1+$|ydJg4ksyJ^~E2X7{-L11obA4k^>paryxXfN% ze={Kq(}=%Rd38YqH3ycm%m4@5A$lGRBlo=&Qk!noO z&nkdMnggd)nbF#gJgM>nBQynI#_-@Hvn${qd?x_Um|vDubqsWZw(8sP?2wGlGu!VH z@NYcjohoQm#ypRqGGq&Mv$-mg&yt=Gk-(AkLPL-e!s?Yv7Ugh5mFIkHvkExR!1SGs zT~L+F#iXx+@2PnnjOj-;-Np%PU%ri#Oqr^tL0D427uapR!6^{fQ~WHE$DIWBG7v5Z z?Bf%}6fOwt7qphwCvbp~r>zzKdlk5bk+DhnJyl`v$DFpS>WiPww_Vl1zgI2TQ*sz5nOm3kt&o?4f2m{tBjEy`3=V_Fxh+Tx{Z zeDtZ|N5m2^tNnpKyyY=gS5{LcUB0@`y9vl7F=dj{VbUU*RKJ{5&?RKDrd%w2MuOX{ zzjvAnZf6Zc`LeN`3huOiYGaOl^8|KVWm8bNxX0k$l8H@_zN(U1<2ABsBG$K^W@=hw zoq1_%T4kNVJvE0t)sWgexSH+)_tYF|tjoXeX(Gw4d4P(WA9Xqj)Eu;q;0+T|bBIq~ zRZZPmYAx!huBzHE8P~%_$lIs(aU6rR4H_XsYQJW1hvCLpR@HvPs3yHT(l`t7O#!V^ z>05%<3i`I7^@5&~Hc0qFo0)Wf{wHbdX@gf47EGlIVFsiHQ+f`0BPBi$w<=og;K4`R_} z?4e&t$t{xiUxH*NLjUb4p+0v>-fuij*1P^F-RuVXwfSYS=Fw{Y=9FZ|&LRP_H!{^wyARqbzCaT5s)k^c&D{L>4Nn z;i%Vo8f7CIjtOkh@VIoeR>N^=xlO~9lG~}_DS_8$cv`6H((pQ|JD}kifu}XRUg|Dr zc$2sG`D4(%6|klCu(fV+QHAEbwY#w?p45fs1wN(W z&EBwQ1146(g!F5c$XqQ7v@}c#EY~nCFrZ;Z&!mP+!VHlT-qfLGZv}7a$e`d08nQ*0@FJ8VSzafKO=RQHT(~66G@wk8eSH7r-onC%%kBG0`JlA>msS{*YJCi`=EwT z34B$z^ut0fyJ!hHD=A-fR{8p ztVgI}m%z(q>*lg5)MM7p(t_&Dqh>e>_>_i&X8khYGa3$?H7^JJrG{f>{k<5VDwpvc zHzR+DTuZ}ovx3g}fQAzS!y29t7}4;gS=$CSYt!(Q(AcHnX|sF;eGF)LoyiB`n1fXtpoU9keaB|3iH7G*))pSs@PgTR4`{xu;hRl9 z8K2bfEoSYzk^7W}Z#Qc{2>6VK?=tH@4){wA|Hf>37*JKnqWrBH`ZqvJ!}pnuUj+ZUaOh|I=`Ejmo<*0kVGX}8@DUB4mf?R!!yie%k81d1fsbkU6DfRI!)Ihc zpVaWDvI8U~73j7BsJ z7gg^-;WiB$B)3b$RYjpA$Q{sdb&-$OY)r$oMQoy<)^J17sy9MknW`N4Ha3v85EOE@ z6*Uf_jb#nD7uCd2>Y|3biW*NM_bv?&7cocOtznnIH)(i8sJlnQp&~v_?$vNu;QboT zOWg-GToCwC4bK)eO`+dQ8YYWEbZhjmhPfg>dLGsAyuimayiLfstl=AqLJxvTp49M- zMP+js`BNJHrS$u>hHoxn8TgEbZ;`sc)bJfe^*4hmRU=dPH$`%a$#Sa3yj?uUzNpT!<&)9|B3wHMIQn1+{%*y=j1;U|jNnRtVS z4;8VLo6_*pMXj$u-31LlTU7T)fN2fCSj3L(WevYnRQ4#wcTvO3vSfGGh~oLU zF8IquJ}PazOyjQzKJ@ap3+I2eNI3s)-Q3q?%=c>ejiT0%Y=ofK@Y@0(tdYt;)|D@5 z?D2)k%Nz+bZmeKK71uNO;}xVUq><_Odn_BU`eRss#cSsOmM8F+ zkeHn&+#jWAB#wL#0hPe=KVlq#<;hl||Fd$@pwZ_9S(5h!qlP*T2>OyyM$S30kNuaW zWTay|`V_m^|1-Ik5c}5ub0au~Jh5o~zcSXPfTpCaUrTMVVg0``0&j!&O{`Y`^F|3- z-pf+b;|V+fVlN7^JT)W;?-W$(X}TBn?o#Z9353h6n^BbKDO}DzH4Q4NDFY6+7PynS zaCv=;MeTCo`gIj#vum)Kf%vcM+pAuO42gZI-^QR+VHR*DSyA&IOf|RG);MXEV_CSh z#uJs~deY#e|691=k_H-2`%^byKBd^1+8lsHp)_7!e*qw(DnACI_*R!pUG`PoA^p__ z50K}glHQvn{d;y-4%aHEjvL z2NT3D*+`^m`@RU=`nj}f+EGhMnYpH&rNjoB{$1?fk(q1S&7ek^G;*GXbaT1&Pt?lH z`B~Lm!TE6H5%4oGeK`V^3@qOqyzk8c2IamvxZj(r7zBKCsg!E2W>5owoFD_4h2{`< zqeF!1IVYjYX*s@t?s>g}${%QM^FB-DAoN-_Z?wo10hk5Y#K595Tf944@S169=cWLN zmaPm-p=BEbkW936Feq2SK=TGqKWf)gxAoMQ3U)Lf^2G5D3y2ts!&V{P#c84Q0!lEQ zWokPWRGvU{Ygwx^cWcCfD|5G29Jn%f>lhGK7{+=AzG@nQEK&1LrcKY2te2jry%x1E ztkb;TY6Q5ambz}fh6%gJxR%E9s38NBh|})HzK$K<34`fA!(dUs^$d~%ZeWn|WfoQQjhs$P z#!U=v5nzXD0LucVxX+8qB&l5fG|dY#c?K#a5UHzqi(#F_OE34{Zm`0k(N;m0q6VuHh$qf~02dJmH+juKpM!2CPMjf$(A!kN&j}fMxm3Z=+dku?pD7>rBP0m+&$>Sz@uYtjf2U0srO!YHC9q>nnJ z_EI0uS89R-&8Llz;H{TiJ!7!nSECyRi4VAW%8;!kC1(T$8kgs=@8<-C`8;oqOFcsw zf)g4W8oxwikH)ua>@^}x#mkIZnvAY4S)D-horXmYXX*J(D^}<21}j>6b>1VWTn&?> z`XXlVgNC&L%Ur7dlVof3u)!*_uKK7^Lj~n9ZoVu?4&&yp8}&3t5ozVSf;xoQXN(}t zDu^}d?@n?lwUm7oO*PSANMFzi(@9uPBH$zS=)13@mQfOW;r~6&HM_>%L+lVy%&)BQXtw^JYb3w8bkPnnqMSi+lt;T% zHQ3^#3{#cA1I_M7Qcp-RbrWgruukObZ4Xcy+ljOrvT)o*1FgF(vW=vR-IY@`S^;~l z2apy~-rC8aTt;V^tzFi?#%=FO~0-@_oRFZ!shVB4A|5BYP2?sY{pZ<5|t zbO8k z-mUGl$UNaz*6!n5HVyVOkio1yAXD#~f#6zukU@>KV6E%4zUZ{DZeQ*HLE71j>#nf~ za^vd`>MWB=2hH`@c<6GB2e$qo3wB8#;tOJFJg|PhMfa`T!ukU>R8>{~98b%a&CICv z-5i@x?wif#0Lq?6wqKd2QDxN(9-^%yFVtNEiD)DA|~2y@xCEnY-7-(I~6Xrv8IBmXcaeXZ7K?E)>)f;t{L7` zTum7=!<#Gy0cBD<+_$x<+#DUq@H zQY)1WnwuZ<`~ebW{PI8iG;T?MvFb*=mtMo0|K0j9P<5PMao?LS2Mfyh=EwP>TpJVS zmP+d}6y$PSYV`at`EBhT)*47i&T8MzhMWd_8Cbql_7>H?Z#8u%TciCz6}dqrXutg$ zj#dh5y0)&fjycV3UC-1@b6Yn^Xre63){PPBRk(ZGX6p{8&bBSp)V9>w)~@StxkyKY zMcz6lwWCoY0R%KPoI-|0WQ?4G^c)oCf# z$>0WM(qv)H;fpc$9I~i;DR7vpYS2|vhYa1_5w6-M#dAv;~d@HQQnBl zQcU9XE((x1y*mX+px#{qB&_Rh0TQZrj{u3)yH|h&>)kIvqV*p1WoM&m&uH@oP<=^q z#(3=>7I2&==}`gWOz33+6E!4deklugf`wpMFPy~kIg2XMd~G`KOo+Cjv&7fewv^L^ zD)Ymb-Evw(qC_*UNlY6I>}~Lj;AI)j{oY2aVvUn-;xq!+_qKZPKnW&n?;5KRb+&gc z+o0mw+PjWHk@9=?Zt%V>U!jd(>)IO`Aj-?LceD4Qe3>ooGVQud(AwMLc{Wel`r-na zn=B$oNZwjZeQ7zgx87=kQCPi&Uinh#tlGPJ^?JMsR8wzSL8_!OW(yw7-+{e5tSJB) z;4W6BG}t4?mgMYZP+rhRJ9qkCgL*I2M){2w`e0|b_q|TbokyBBBP}g=_5?}N2h^^x z)p^wW@5m4xzrS8CJ-Exx0bOcexU=hfC{s`UjZu@9xVr|d&Vz$HokkBe&^S~FHD^f+ zL%|VbM+6M>*xCe)u9-kihk)aa9|Y(WFwO(*(o&Y1H)$PsvN}3XSX5L>o~)+UH8|x` z?>bMr&YRBb7=)$HnGy<#*A(5*K#jFQ!NOnMfz>&0J(llaq2_VwK$Al6xsbW9EAT6) z(7tXCFw}?DzCQ00$l(Z3b6>S#wBlxu4Os$INr!V1EJB_x88i&K1C){g?vjApkmtX+ zKUnfpBzPeE!#?)I323b#@2yPw{&gYJU;@6xY)+k?YLz;@pL%L4YYdU~6HPT#W_&Fy-2h%%m?yAM=Y2I_O61Ab9i1yr)c zv3$`)P93OX5RjazT4G39qXX5PBWrY^dKKje*Bl7?ZvmOYH3w?hDK0}hP{%-qb|B0^ zhIXKy!I<>Zz~HoiMg~&?ni$9o9B5`BGjL!P1DSyXs~KFBIuQnU3TR<)m#X|VX2PTy zVD)AHe(!a7;Scz4EIQy!i{CD%`Bq%h9}ONw+JZRrUuPy!W6vkCwhZiht z{4stZ={Zir@bpi3-+>a<)V6Lf-tcY!nOXnMtTM>V`fuSa7|}~c^@5iFHuDQeNV6~F zEidU;1s|ZPM;BRd4ZgeOC4PlN&2mR3YVctc$2pQ*E2%hU%8unvws3Bt(*L7 z&Iwdg_hDZ;mr(w9ab!eL-{t|6YfD;H~3z;9?%Ozh4!`i$0>@to*1H@R;Ydz z+N`I^t0!9PiJaqTLHR!t6tNvN{U7(d8Lx%*Pq5`F=}(KRv4qN-RHTMdmj6SB^+}+{ zncTAS|Gm-h2!JE-D1(ckS;P7-AeK-5e>D7;pf_stPew6i!JoqpFkEQuCbm)I5zGHA z!%H`6n={kO|7}CU^mMiFh(9o__DB5RG)|%v9UjX6U8AT3z=9?L^h2YbvXuFGbRooF z56r2`7*giV4m5K}ZHxFn=kb03DIxVy4==GsU-Zc8NZ#X~I=W(Z{1#Mc0@sg~9#7Xn zr+&awOD3kSU+oFbAWL5wh9rnLBCXX4Y7^8Ts6$YrpiV)}g1R{5-@nRJMz@^#5hHg?$?Jud zdj;Jf=zc*r33^bFE$EVFM5_Hz%r-SYpL5o85 z&jh8UW}0AcM{Ye$@$Y#HEgV#&YV?%O_Zy@iUVvRsK1Ky z-y((ehi-sexKnp@i)S4b?#jasf&&_6Jyi?fhcOK=ctYgP)ZbhAU*ZYB6uJ7FDgW)B zKpA$i{$|R5QTkn$_+S4kJnXl*sNpL;t6q(|cWU@2o@R=0yi3E^dm8=_xp!;$=bjMV zINzh;-JbP-j@)}Se4BK1zlQG=_@IV=BaEX1oc;F;kNu0z{eVCn@9h6OPx!-FFCF0Q z{|8|~9pLQ$s3$~Lv<`6g|D&gvZW5I#EBGnt*V6FQ0s|U;#Zz=U?L||uvPQeiqA^)C z-B&!6N&AzJwPhsOpxCB`1HBM2@p7b0a-9qO6Q|0%kq`kzj$h@+k7v;78zMl7Yfkx| zM3EO)t1lj$DWUK!J_!!aR3G33pY;c4I;rj&YO9zUJNR0o@6d}jw!&@B9TxG^SD@z5 zCf~&uZ@|mN+ky-4qt_AgA2YW*_>OQ z#>-aD*o!WOyH?P6;CI$idx%jF-Df=YJBu<|4vQ9;{7|bW+`VEsuR@&erqtYf)uOVU z`;o`n8QYt5!BY+{Qf*|mne@UuLMd`km~`P~(v_Cz153!w@8iQIzV`t$%`eJcVzC4c z@39_3Szj`v4vT{b>8v{38GanEEiFQ*$RtIlPg#c#Sd&Mz2snID+~WoaR)-INH z{b*zq$P~rHM=UpuSePue)OIT1-dJ&4>*Oo{p=mpS#3v7T2DDyM^5o& zk2H4Vw9AWn2DmZ-gB3n4tmcw5QUbs(z{$i9Ynav-U|(np;()MTboCFo!RYu34h=s zW@7Jc4E9N}monHd;C2QFR27l=dHiqD16ON!nnXe!QQXzl``6UA)VZf|q7N?xyoEJv zS?u1oR?zKRIljKTMfJX|fxG~+^1W{lQoCZ0^}eH?W={{{o&Foqn(##LyUJ;BoyvS1 z1<0R-$c3)nFHwKe-DM82MvM>~sJ)M~86;fS`(*~2kgqT(4^s=hUu9ri6!bM8?R?{9 zf}RlcazS4g^a?>w3VNmV{7r5}Y_8sK@pnpkINxRW?|pYMl_;XpFS^A!R|_pp>k~v> zLo?e&0q?x4^hcC|zO~j*@Q#Ptx6bztYFog1_JqhJ_id>E8A>^#fok}zqje?31NdTk zUL6ewNYZI1z|nf|uTTWK0qR(l-6+LoS$_$4An8)}!HCzOzsyTNE#kNOH+XJAf+^^4 ztEQh7(O_c@{cwm0KVN^l=e~TItu>Dn%4}n+KuGTID5rjfFZ#E04z7O#{kuI+=4h08K6pXvTaXUuKpa8hXlNQbqzY zFHk{N;W$e^NuMme18qwB1|JPt(or8#E$Mk55k%9{=cyTRrsZgW{X5k}2-B4CbmlV` zYv|TS`D_I9^e1JSi0+Iho-dP?287g{dn%V$&Xfx?Mb;HRf;vLVCUY1IDd`<1vCRe> zA4K-=Gl@Oq{SlKEThei}Fzl2`#LN40Cef<=9Rn2}Yfujf>B3&nKp0B{S!n`39EVzHaGpiJzJMJ&_DbuwYJ|?AGYo_ihSJufs4r7F^h(YNh~^h+HR!7} z?jRsurEmx_c{kyumpTm{bw`?o`rUDWp#g(WyMRl%4GkIeUE2#O<~Q1Wkd8V+*BKUl zPbwXqG1%*%(e*~{SBYlHyTJ$&MS(^-Rzo@@uSW82(qVUkY(Wu0Q-a#0!$>G+SVxDP z4ljtSOLusi!Cyt_4qqlHAkDl|P*|D?g#N;?Zpk-u_ljoTVDP6tmc+qZR_MdVoAO2f z!5w-R`iLM?igtB{eq_)`&eG+NS4{g)R!sXdf;4geM|uoPy`Ktd67-)!o1TrI32KwP zX9aacc$t50)X|)ci(}rUqg5bRDAmR~|;X ze~+LJ>A@?gQ;_K?q4?BrWkHpK zE(!_=x>HbG&EM$kQiY6aaZ2)}bfz27gWPSAsb!h$Xdsu%RIpawyY3ThN| zIlnAxJZ~R$mSvqMMC`00v|^$49`WP`q~-?kD7Fb|lb;3X6tqcN?Gm(E(14&Vg2n{3 z3py=mo1iH{JLG2w76k3|go(1WpxvI}`+$}O?GS?47aNkJ3Pq2~tf6@wF=UD?UeuPlyjGkHDZB%AKcQh?XcQhkN&-$#O4(T=~s8dj4 z1&=REo?e5b5I@GD!=YCSGVbvR{ymM~qVcOVeyhf>*7$86A^(p&K{A)D(*pn8Q^oLZ zq2tY-1{&#QWzr8aY%@cj@_6WX3ncd;4;x?_JuJwOynhws5%h>4uR1|iQJT-&~tk4%d)_>$_`jRI^0G&|P zQ9@?b8>>~R;w7IB84q)c5N-Aag@epa+ROmyj|^p%co#o6mSApZc$S%ACNsR^dVa^SBTTvIc3cEG@Kg8B8mE5vi3L zlQa>@?srO?$MdP{^Qjn8CIu!);aooB_I&D2q}I@~u{#!$@iPol}`s@1jr9mPQ_`N+2!T(#XRM(u%IO_2{jJ}btJ~Vh! zHO0UR2aLWoltd}~3S8`*8hw|9vuLKL>dbW3=)0}g=G*$)(0&$I?6kUQjeeYb2@THCka8U2FiRwOpe#xrX4-x`U@$}kQ!`tPf< z`SfE=hf!D8qvGakoMw1B?;ib?bsVJn&L-99bHW)i^}ps%RrPHCcg-tNP0!|UcpddL z;8P+pBlR@kLn1ZsMsi@DZ0qI#i(U)B$m--3NF#O zTXxE5seEF4m#U)EdkW-R^Z=L80BJa@coF60&A?ocmeQheNZgTmD`k)`hE`QFqTSTY z>zxc*;6e>ca^HiOt7x$cIms+_?PXx*6_{&`W0Mr9EvD)Z}9mgBvF*WBog<#=DiPXO8w{i=>1WoGY?#`-HMYNZo# zr}*>_z9sxTEvJVl{S8Tz15JHX(j%1qmZV21{cY$kKf`cM8YYj$xWO3@_L&freM0N<_d1%kKwh6YwDhGML5(t$#-j?gyR% zEhf#FNhGvUnuj^oSL5Aw}iD0v=f-R7+g=1u5V zI(SJ-34m_%woMxVbek^?8~}(&vD-^d0ARDc7VVhS@G5GNM+yd^mo!JFAEiwCkiM!F zDf(X*p^a+>fq8#X%Q|BVlB=k3nYFXsNTu;W!~oYNY-!ul98 z!nIWH_$&ElA?(>Xy)>te|6cKDk=5jpyjO8vQ>iMaHK9sc^=3>Z86TFAt|x%yGgf^^ z5w(TQ!3bB zb-Wz4Sjz|wwEXLov-rWma*8~Z#SdOv^ewa~w_3qt{9#68bpVAUs`3xevYEkyi73NM zITD13UmzoB1&2I`kg*|}nODJK{yB&Z*<3~iM^>Me_ehVf`WK}2E(@Nt=75CcQ+%VW z!D(q;RZ@#472-igf;U+I2;f_cF00^8?iw}&)0bRYRKcmhRAIzX_lT$Yyu|N-rm10S z%cS2DtyB2ZVU4%_0B@QJjBl)>w1r3+zU_SufVo9~uMwWGtd6KAexlSx%0yW){p6W2 z$3%GzmBRO7`=HS9Ai8{OtsC*qHk{4>M5C{r1p=l6%k10A%iJY7+xREi2Yie8t?7>DPol<{WNfdU>n5=w=NmP}M0NUh zS?i~rc6YmExNlGSATmT;_&UoI0Kzf8{Ut90h)BZ+tUm(~8ScBLXAZHczWicmH4uYP5nH{NL&QRv7s33K%@f(p` zL#5d+_U$zu!;2z%AN9OA0#w0wsQ`qlSFp4Gz!PpgVh9bcDG|G6o&uHDgNmaoU4 z-)Z-9ZlC;IxJIzR=rk4e+czkvTuQ>qqC8Q?eZzukHZSIq$~R`z5tWu!@gu(L4eM|7 zecWJ_5zu|yxS|hu?rCy$tMJ?t3PYGUmgZ?6zOerVsy8moW|VK%C?h*sw-qzWDXYti zH_C^P@2U2Hpn2(MOqpb-n)D;$CNY6Yf!ztQmW``tsKOt zmYDAHfU2xQnoE|`Tcgk~mptZ_ELD{UoRSsv)>ZNh{j&~}mGxKDeYI1!OjVwD>Ne0@ zSKV@wF%LK;y{hspNYjy|CReSa_g6IfRi`M#&u5Tk($~{lSEEpQz#BsqH}c=d_|tY} zv?;H@3F6JOR+W_8MelIU%PsL(27`y|sik0u zC@DKow2$l5@bD|}#r;;}a6RW>;2Y`(gV)s42oQ2dP1m8O3U9>>$;@o1uQIBOyTZ3} zq51*irN+yR`a4jv!Ch!D=oG_Frb1Lg85KeTIvNai(sJk*OjBnO7G=c?lrS-#7K@3Kwsx@fFXuj~P+CojRZbjvqJaHH#6|8mlPGb&To&V~j;+>Fyw2mznRSvr= zg9gk{J#~!fFK~7v3eg0~tfEMh!|KiM>S&qPU=@vl+Fq?Qxf*4Hw#b$5P@x60Y3*1g}*z>q>2OPZ9PY zPthjXM31TbmMbIn-|X%~4}FV}Q(&BS6msp6tqfbfz)fMO6)gs>`ZmoTdOLPk9d$s z;^taBw7mOW@6ZgtJCG-%rMfVNYiL7&7OHiyPWD#ILo^Be>JV3I2|1GFa6vMWRO%`S zqizvKN7iHS_q z^cw({Lb5b{$N0lq!-tK}X~2 zF@ZNOx+b~DmFs*$&v2fsla6FQm7fK)295ZNS-`av3RpC4XLhN6eRL78U+`0x}wM-6se&Co^s?p3o>Y!KN6x}IEqqg_kZ$-M@Aau zm4jlkd1O2z{D3k;{o)U2FudY%MPZ(h!n-S4DL^jA%Ty@L9KtGcq1=lSRH*j4Vr zMGP@#_?iZE$3=Zye-f zk_HARWq8Sqor`AAI%CXUl{}tO^l@fFXe&@boohN~7NQw+I5s*lF?a;S9~wX5EQvEb zOyI<1_ax6%@8J04AZYC$IT7jEzCE&i$JQNNJ0k6i$y9qb88uO#Qv?f4hk+vCZ0d4+$LelC{D#Ae&Gx#-N<_UY78ayFW|aBwHe zXV1n_Ji6SDe=ue#jTgBk{FC?dv1BY0pON;c=B=qD5j6uJKrC_aY%G(EC4l2e+)%}4 za_!TZXmV!ZApeu_?cf#^cwsiknvZ9Zca^M}Y&+2zr!mbfC1-N+RFZ~)e`x;7Rx#7F zv1EHTkv$kq5EY;xm6-)~7+8+#$CA0s1tg*w(1d@nzMW=iKGHslSIFTVt7&kRTOj64C5}Ym81F&sFLigai7;OI?~M!ZhFoCov;JmUr}-QBX8ELE`Ob_s|fFSK21_ z`6$*1ymvOM2C&PA`yi&#q&+-3GCDar0@*t;dUTR{B_Tmgut+#D(sy#OM<_+!;KF!6m>hk%BZTHap@dB*m zxY<~C2ES}e+jslEor;P&E4uPDbHsmsNc_Teyp8uA?LILy$$cmm7m=${!%Q&QJ*eQ5 zkJ^P%zH{9 z{O{&6r=qJlg`c3X6A;qW7tM$04)$2zNH0!vH9paITx$tV?IWPLySEqIJUBc!Y46-Y zFPu#9t!#FuId}iuSkHugbf~)@y9j#^`+I!S#!)^o*gw)eWarza-0qRy(c!@}eJgj> zkx}S4*km+ov@)_+g;&PLM~8V6Y4L$w(}P}E6LBUguN&FWdd6tj`8Rofr#5-=Nv*KQ zhI_T9aTO+D(E!0hBJ2fQ#9<*Q3fRvp$AMip#Nz-3tOymf8H}t48W+@;iIsKo5=D*m z^H?EUCr4GFgs@9wT9Tl`%2Hg9z5Dq>6ncl}cb3PzVP{ z`U;zx)u7+9t`1+&!a5X^E_9vBC8jZH^aIg&KXIyitf#wYfLE0O_Q-^qS%Mam%+c1F zIcw{~Q13Vr_N=kSllUpr_^hMS32Q=DjCD`iL*3Vnp5Xn(;s^jNjqaGySE{d$2;oiZ z@R$hhVXO?#oPDNmoY{-(lQ5^!>fE9|7hOu^?3{bMxH$T^%+DBBWq1s-1oM+$7OV=0 zgpSVrkPfL;bUq43CkOh*RT7GsOQxWFo}R_{dZZYt0iR(g$rZL$aRl5CwU;V%PT{kz+V^j#g-qlxiHrSy_{8!HQVHUK21s zUc_V>83jZ4Ln3HHMA~&L>n~h5;Zv<+3=H-Uz`PkoD6$9xdI63d866*nWYLxZzU!64 z(M1=TE4+Uw!795z$DHbA38A+USx!zdy(%kM$Jy4xIxg|)UTI$46(*Y;21hYH5QOeM znKzo4)g~qfdyZXaliUDfUm+cE)Z{e{<{Y>7;ud$<`aO~hwn&~3Nx+s@`) ze(;Wbbj)L%hFXDiw94+D<0l5k@iGh5eb&YniRUi3%vq9Nw!O4xmx?aULicrS?nFEp zQ&%WS(@XQLEZehj{A?oY5-e`ADwZVec@{0rz$&oGn86mO8D{CaG(DrzXYmtLw2QJz zr0BUtwYbO!K7NRH3EE;N6NlDFD>(zA7NC>cQ5ZSrVpq|#QknR?4I|AyN7}ne$L&N4 zD!B2Gw#TH>T*h{jJvzP*{2a!BV&CSt2Sh_@%(PB6UrSRlpG>sX7ZKu-F zOmtB?fd!IBU%B7svQdmA1DgtJG1YkCre37(NNYwhke$tdd>YF!ui!HfiHhE{YC1hrrJdK!3&*-LeFFZ9JDSVL8%N!4+U`%0I8Nu^Cv>X?rf7fKjCE zBwe&Gkrx4-lkufbAWSMe3As23$i@39nMNI2#N_1i{1kDj< z-M%?KHy4M@VtXE=PEE(q3r_|uNh%jj*w|ayrD=>Si+RF7GzWIe>z1NzCcyZZ2xN%( zDJW~nXfl;e#A0d6gxEL`~*` zoWlBOW>$Doq!I?4CqL-r8FE^*(`)uJYi!`C_r+~%qVip5HnyO!cio`9gZ{f zv>02QnYSq)endCu{9eE`FF_9JJuAYG=Kto@^bCGt?uBPEws|&{g#L>SNE?H_ zDd<)tK5T4khZMFUpARgvUFZEu)gmt{XtMY00+&L(izw$|V~`l&Ip*D~*qS8MKs#8U z3#!$gBL+NqmMS$qMcvVW>#fr_RGWiKW8nmw~DshY)m$ zWIKwTiDNS}Ek_^33CM@E#T4hTV+(Es@i5tEQ`0xYj|Uz&=P>*<78mPd&&JNNQG%m& zR+b4~F(~$=-tx(t1{=f{=`hPhv36O-`C2}up$IQx+O&$9rg;;ZrpbEZQ(S>ONa7@1 ziO`f@=$wa8fk%zbK3Ybtw$D;68Wc%W-V7q2V#_#!$fE%Y$&V(R|F@VME~A9kb}6go zGO1hfO+6_9P~fpGA;T8s2(&YxgXFR7b3PgJCLpcjYz#^jPEXXKQ!9;GBQB?-fD{r^ zSV$a0szW(J0Uox!y@R%&h%z+?X$eIDoMSJ~#iAtANQ^B;XRtM6N>mY=Ry$3f$&u$T zNw*U&(Ja$NgxXnB*=R?CXclPnMJPs*B(mIU-tcJe3G$`Ewt~wKRs#$}US+0pN%s75 zDq++1TcojSjYJMM4M@%r+rZvRFX+w7$^+6XH6;yLyht6wZnaL2@(jShmjtPSmTkpvpl z(X%Q&PcD8sJ6NH%;ogTxVhJzuZi(gm3Zt~(H##TVguMV+D4EcQ*o#i%zS^armd&*F zmRYfzKF5kGCY`G2>&O+R1pO8gev;gdi>ei$xx&{Potc3FLEN{vo%F>eRv!!QpuDc^ zxE|Q&pJ2T%mx*ZuXBoULI+1Kv=`5!DSWu2ax1s$n3ONo^lGrTbNY9Tsx?`Rf(NsLi zyBx=Y=vcy|ShP$kmE&WGr3x7e9g3dY`MHCfDam>0fC#{+A1A@AIQoNJ&f-+YjoQ@~ zoDFS<;oLg7ToQ*?Wh4#KQop*af zk6S|im3J02maLdFT4j?Sv8hml79AS{@(XI;4mC&Gq;NT82{|=gJ}KPGVV+41fIAL9 ztU>x3XmISpr7Yx(%BJRW@yspI_|v#b%!)M6_kw#pm<`&DV!eY77+DK4HRRl*mBPUV zjaQSRjY6()b(a@wW@1Us%R)Mh$^HTDOJZQs@e(^Hn@h95Hm^yWuxFPR;qK+bNG?HX z*LR8@kUbwK>qE$;n>{{}$!ti$ppx4^bvBU}9V4%>iMCcKVnfqmt&;TobEH+w-9+Y#fj^AJ#y`%%^ehaU1&}lkQ(cj?zy)|_5&w8BY*w7mtksa>r?r>Ukk6U!{ z;1qRylsV@TM(j1R&!I9wq$|YL?cNUGcwVI@S&LH_Cq4X9*utb1$Pq(Mb{t6%EwfM> z(7L!JSGdj)VF+IZ!lhWl%EsnraE(AN4wBS6&`<_PKY5Q5a59|(RkMl(p_nl$f7RgV z7|^G1)-Nh{p0T5e%~14$J&ubF_)SUYWCC565~Ok1sk5&3@(1G0DX5Ngu#%@=>l<`7 z#iya%L&1g9n@JO)F1{Z+feV31?13qGUJLhf)44g3=+2EYMF6?($Dsu9MDtw)L}S*5 zJawz9H0g=_iD<*e3UfegVwm}SOW-)Akb^4@QX7bL@iSjNxWp0vbjeP3Jf=*%*%&-q z<2dth$uS30H9b$OJ(pz#SArgru^ef6bn=V4y#E9)P|0$IHxB+Y?OVnnL@NyLn1@cs zs|MA~F+CkCYLfW96}+mzjm$>=VK8_VV8?VQgSg4XpLAp?do?O zzK-{W&t9=ValJ-%8`M%_Q}O~suZD99DhW&wide*sArl{grhJ0I*jeGkRp|3PQGtj@ z^k`EAGVwH=DvqwqOCrXab~>S91zYSE;Yb1odl6H|l#!8#;ZtvLptF@qo*LU;ghvQk z8HHs+kwBO$_?#|vVFS!6mmV*9ii)2Vy_8(FeAUE4$3aETHIBlI(Xegn7Jbh z;PQsZ&Qf$b_<}8IY{)C(C-owUCdwRu7c&epQlBi%+bDdON?+TlFI>3EugYw7ltg*`@k)d*1TgCY@S1suy6_B@%- zJP&ZMkR?K1B)QKN4IKuIO?C(bt9z7al+Zb6`LL6*`GwHaW{SBK@{_pCHZj9-U`>7JH{rz z(>VyhaUHmP$MmyOxKxNO;)cp`4dQBzE~>5;z?#2;a`}-UL~vsXVR*hESV-;=XTdj} z#dWtxh}@iWX+r`Vo-c%YNT?XtC2u=x7b!F)Fbp}ToF%~agtX$T1Bg#L+QpCI@FYyB zSsce;pG944g`bTSFZV|*IxIl%2hsTG4iVvc!jHH7mTy3kDSgROxNU^mC+-DaA{N`^ z$Yy1bP8RG3rkG_4M|epz6Ru$wA)iD7IUsgPJaGITd!aa>D|v1vd!7wd zEjnp8ka0}M7oUaNIpVAu)M=I#`r?nhjeLnEekiSELS@R?qNUJ5pl=WLjfSw|d4+$@ z5NbJ`I?#EcMbf2+>K7-r_GT$ zm_pLU5g!o8j)mJ9SIxNvB>1N2d^7{;$7ik%lH%(h`z#8Rb}d&hbbitNQg`GrEr^c% znyio;`8#~qR|M?qB@J6HF9xECIS_?YR-XwosRXn}S4@r*GE|7>ac&ohT*s@sj7GGu z=0lISJ6`}XnJ0TEMj_$wjRHPZK!82i3WmgNYMzFIn+2`1{5Hkf9nb*>Ti`faV!a@wd5F8*6}BPqbP#$FcVxnmOAFit{u7OvCmA2Iu+vuWAxL`i z7eZ%c0e3;}6|VS3!Z8G#U_>mq7(vi{*(;}&_`<~TWj=I#*ImO5*eSzGS4JFTEV4Pq zh*-{1#N;y0eNyvIrmZ1XoSuPHlEoSAZi(>I*K&yUgD%VZ6T2>*kI7i&xQaH;w}*6d zOopotKm!Ys*IDz`1VSPl(T>f6^&(*bnNG$ig)G4)WW_5V_`!NDiIQnn>EogX(9N5i zmwYRsMH>`#TvIAsZ|CIpyl^+++<(d?@`})Y2sU1Rh&#D}16gqGuTZslWR9N5+bkao zjys^34yqw0nV+K>gKEjnwH15Ur3dmEAtnSHV2I^f0w+*fZg?|@>&rk>22rqrL}}F_ z0le0<%!n_b$PkhYWK7{hHr%$*La~D7ax~%tn=7MswfTwLPZz&HycIMP9fwtjL}Oi6 zU#-J!peV#DjSFnr-^7o6N0~`4#9t(qTYp>t{y66ZR8cIK1cfs{ir$pJdIuCl3e=W3ku|8;k3fV?|ec8=3ZJxWQkZ;3wob9Z8^U2eB38C0m*omBbLot z5h`Ls@XZNn&*^yzVM9~;>QwAeh+>Y5gv($2_oPN4n3+`yvCx=#!SIeADAx;gf{0ou z%=Aw{Raxj2Q+ z#z^1L%MCjQ0%vh~2Io5OPwnhlVJYAanxg3F%1h6UMC9-uh0T~qByVsKh2(<91&%5hGpYlMCKiSQWbbVa;z2E+_mWsuER3pRTc{ zMN1*d2Aaw55PeyIyL!I*Mo9|eAe9S-F~!rxF($fuU`Gc=t)o`tRC38F=NWKZ z$FS1OIf?DFm}LqFX2rxg$)=ZPXD`Tc>0CHmDdx`dQR33^<*u08B}?IouNfV;lbS^& zJ%#BouZz(_-;T2I6LTj2y_EaHnQjFUjR;P`LQ52>a1$ayaG#ymTeK9x+Ebjj7VaRD zcnw#Jm?1Vn3&$60>G>VS{KEodKFw(-N@HYP01nqtAgkO)h_!c(+w!G%MoId0XG{1F7SeB3J0%_Gg9JGN6KEO-zL!m~X` zc0ULB7KmbJFS&WdM=Z<26S^d^HzMG8_R$4`cR0LQJ9y!nhM|oB5Dx31I6ri;T)5!E z{Z=7>(1~Tk5J@mP!4UKqnDx<8o`p3+*4sDDZFrvNBJyA&p4ejD)xZWbaBcgxx(lQir_#dH~wt z$zBr@m@oF7B`7D?FM{F|$}tS++X<-g2oI&r&a+9{HJA%`>w3EBrxs{BuOyfq3>=Gz zHFJa^rZw*k$omR)xTS~(n5ziO(tdVFuO?yOY-9OOLyIHvy5PbGM{ef&9aH-kyz`BaNEMi9xT))jvvZ7e|wSD!#+hf zHN*w{sU++r(T&`DEPoV=8)ikI92PW+aAOMmg^EUkMtE5pWbDn@OR~>uB?GTezMi0w;h6IL3cjGD9sH4i9tT&*60Oxr=LSg)k}GmH!}^br z(^uq}V_JeEcyH#d4z?^wjEX}r18sZ`w^tCF^pOn-3WteAVFc2)2G?|*EcCS-Y(hj4 zCZch&kI6!GS?RQKv{C5r5=WND7M(BfqzXAbJgo5i-R=IO9Rbn&n%U{3|tv}*pMq{p|AU;;D zBn&j3luZNUmxM0F0LO7Ufsqs=<1(lb9gCBnxNP+}JAV?3r7l9B+AdwUxgd+WuDqU#`C?Xw1K#*bq z1*uAtrXWfc!~zNkA0lsN_J1cgf5Q8G>%Fz!T`M{F{O&$8bN1}nvuDnna|XESHgOj9 z?Cpl8_@-tC)u@_oLd}gTQdbk2fw5iOXetk5ADalqRdy_9#{wR`3T>xYL(KwSox(E{ zl7r-Cg;=MjI5!RII)Jnb@5Ure)Gqy%+$Li*W_4&)*xULt(?PffV*_Nnv`i)toOQYi zGA3#-{2&OiQtl2yQ-5Z{St3+>{oSkqwRdz{|Lt6?IeoLN%C7V@owK<|B6X>|xpUJk zF)+#*oMdlf@x-Q>(AivVl@+&gbDFDAXXmC&?lvUjP0gf<9j3Xpg&w&)Y;HY_btYo^ z1ao!U8H(5H^0b*mQ=Vkk&B~Hd(--$P3nGkPGs8f)rqTAFcJ|)ZTda4NVg_Muu$DTn zYsWOM3>edx6x_Of4!x*6J3RLg9}TeG)lqXc z#*dh0oZbbv=t^dU-0;-I0I5yR2Opr$1ZvFp&nSLDc;LA zQ#-&jOBqe~rlGpmo$4m>)H?({v2JMZx)|xytY_*S8*eUbxtTy0PupQRF4Nij>ui|q zYRd#Hb_&n9EjJHs{AGg2%zVg$5UiK5j>MGR_PCMp$-OXx?HR1yrEUFIN2!zNMp4d; zWuc3kCwaNxLxO zmbhmrz9lz*D;Cd)!q69b&KxqR{hbAAKZ9BJQdGLB)F?X zsb{UHB`(@5X_DKzO|NAOgNt%$R&U2brm>>4bl%8ZMRA>xozU=}WRn|tj=90mlG6ZCT{& zx_&!wkRd={|_@f3Fw=V+>t>VeSCN?YG9in5V3nyUfkn4;v`Cj#`?UalO_I%%Xo6%%`Pl4?cFl7X%#skfAZIRM zx=T53e#qP`Xh*W{1dQ`D{?vH6^vkL21Da%>&RuoJO$(+v?BX&z!(gf<*?bWb>f;iW zJDts-&dwLRQN4MxlnDZi5Q1}blV<#2IzwZsrj&zXO}8eo^CKgNv}b9#k)P?iAHBmr z)yPs{v~CD(Vpg$Mxp&h|YS~Op7axoT8MXkXn~FAZicZ(t75Z*uEN6hL2<|>JJFA#p zL+PJ}W6l8MXPduqC0Ji>2KR_)jD)?P2urA}Rh#;I^tRnt6N%Z(+}u9YW;A4K(R3cR zt=Sk`9?)TN>ZEeA83~FB+IZjAFPf=y#}Yi-Uo^0mzSQc~`@t|??aJQ&Vxt7R)+6mA zuD!k}ic4)$iDs7F1-)hkhS!r_yl$%1MdkKsIks=NPcU->WoJotb-n8tZFJ{Wwi~Ok zHlu3@ZBwa$O?U z+$ri*XRoB2{!1N&TXCocV3V;^4c3}djDvTboEfj!&fA0@F4*e>U+K=vOx75KwD(oo zs5A;wRB}tJHcV-)xK1sBsI5KYt<9|}GB2o0A>`IaQwrPCO`G+2Ys9%uS=_53jk`_A z#0d6oA#<^9h?(KE$+{;1$i$e}RXvaTZsP#elAT3aAK+qP^KY<6?z%OD_r7wm$i({Y z{!6brTwyjwN5<=?`mNL(fNdu(@d>&Qqfgrb+PNLmeR(~p%6ppMS*D4@6U~D>?Q=Jr zRb#cK8&SsC2f(=7MooHHies)3MjE5FW@WC^q5n5E<$ddzF;6qtb^UW6?=iRuNsK1k zwIb6CIv;~`HdlGv-9_faC3(}-0E+hlM-Tr{m@6eF znlkIXl7ig-z}}w!vlRbhN;bw%N(?ds^7xeKn4pxX{&8{||I;Jgx&PCHtRoFF&sa^( zH!3;7#Pvo6=Hzv2x=(#BMPRHQeOLoG)Az>NnSC<|H@7S%Ck?dUUEE{7Sbt!9StoDr zQMEtDMVtRvh+@9kahlnvUCX z&Ncwg>HVJ`|Gzl&|I@1eQ&XY_;LJEkW@i4WhBC6|ATz%Br^jmzxdn1!{bEtZ5Ch`l zt5-9|==D`reY?hBe&DS+(#(XIAH=ZD(Aq3Rv2wd7t(#NX5y|^nkP-f#2Yz#r9)*>he4@C$3+6{{H-}e%IW%QvuApy)J0F4kar8$ z){5TF9*>Jt=BpWGng3E}0XD9+3EI`9X6yP9cR4cvr>V(Xg@lF}5i_tiS4ORDd@uJv zEA#cg_dRxrw2k!KXv`icm!j?ThS_tWiPX^rTwGZ>KL~h~JBg~u( z*0Gr1l9C6w2+4{KF^d|_)`k^kMq4{z>k$t9na|GTaZ3XbrH($8-ODiiJm&Qx8GL*mbCy0H^Zu+1K0Y4z4vt5D z@$uw;gjwL@DexF>-aM1R$H!AR18UQ8Z%2IOHy@9Er^%xqA5V!#p&>pV`~H$gKR)t4 zw?}^P@tBvyW$^Lwl+A$J^vgenS9lEfdknAm82@+t+At-B*oF zG(4m7&oDf*SG&;T<~g3$F0`C)yY#hm=HrAeUQCFF8vH4t)MXXD9FGz z(u9*{ye@~C3q$gt_{c~zBC~Tac4Y5f${{sts>yw9&Dxh>|7ANR^HKY;7Mo@z=7oSx zTHf$e)k|LcC!3CKtD27XD4LGijiztqz0)zf?qkc9W^I6GW8aZud0GpQ-;~Q<+Of(x zU(4MqbZ~&SFXg(g>DlrG=#JOc@*uDM8c-wa2pD zo|AfF_r7?uuiSifAMI%@x4oC1mmX)i9%~QKbF|#%`-FSzl6ifb{n31sH$_5?1gG-N zFqRg?$D{n_MXTAY&cn2&q!rr9db23Oh3{hG#SqdfhI4?+4vh~LEiDB>kh`QwQX zM|q|azX86CcpT1m9q}uu*e%5KKz=9jAvoXt#QngJ5$}X_&JceU`CcO48KKcH#IuAr#SJwsIM}_zlHvTi623}VZ`$wK&Vap67sE2JOR8Z z@ykd@UiO?;{&~=Icaoop@+1%+0R1NupAY$A#G{b!XyVtQhY7@YBb|A~XJLO4@v%7H zcZr)fJ-W{-;>(f#`^0^*znS=Ul>Z~*p_07kGveKm?>^#B!+uT^e*$)Uj`${&^AhoJ z$p1uq0r(B#g;Ab6#Dh?ee-Yn+&d0}g2zzk~WML;Nht<43#_ z%2AnkOXw|_cqZ^L;*D*g&8H6W&vCx)wc+M>J+J3rKkZ3=0@_7a;t!E;PvSY@XZjFt zgmmJGKZE)mNPI2oaVYWb;G>9NfS$(@cSh_^#M<|e)gdMil0J?yPG@lB|&GQ^*UydUvJ zNWU`i>?lt#@sl{OFydb!o!Z2AKtJ_~w?{fniN65eig;0!rvvc_w9^-fCnB9F;(ei? zzQjwRoC(D3c-nrFiGK%u4kLaBb~T##R+N7{@gU?og?K#dWESzKabEL?zXd%kBHje; z=w0Gh(J!nbULNxA6E6;bwVC)Sl>Z~*PlA6&{0{WCm-twm?;+ytk?;4!hvR%N6R(Q$ zUnf2a`Q9YH5cTpW@v6x80r5|feirD@o~G?jLt$5iiR;W+N#gII9?KH{66rimd=%^| zfcSpsEu454q|=D_Dx}k#xP9ri{j?>18h)=c@k9~#^dLSB^%6~dE%e-v_-oMT2;#q? zoc|(z6nql#XP}4a#7jcYvx)x#dssm{9{fGxqfpKdh&P9RwiB<9@*E)kJ@kBp_s{ZpNGVEf@j5ftDWCPyLgiL3g{s}@g>+VN_-yl zQ;K*u=tupK=34;uQi;&TXEb$J z{(U508b5yRC66j}@;6C78uEX6$=jmzbkZJA3FuqvSLX}-z-@V~yv{$@C;4F5NlTJP z@*bUs(DbiCK9SN`w{EiZXn##4~LOZ*AMyMK9cJO8#vlJWRJf0}+0 zCgaNxKhR1Js7(BcPQt4apI1hB9pWXM39nClpRe#X#9x4+bR@p2rN~DUzfw;_6fpQkM zCu%-=zC%mOemUZrj*bgezHxbx?@IE2L7%b2OP3S*!NgZL6h4l)UbK0Qcv0BNV&cB2 z_jSa-LcM=X`~m#`0pgXQhttGo;6lw6;?pCf{I`hT4-lRiagF`iHldxhg=_q!{CAY6 z3d#3qE%LR9hrl035P!Ov$af+BJIWJF{6;GS)_k~`19>V{wDEh@K<_aPRm~y7w+;R5K{hZeMzS@@m6hx z2N1vVlcPCZ*L`-8{N`}s$B5TK`#Mj24f@#|#EYPP={&dQdlY^tPj1Oa`5xq3iue+Lk*h*{ z9pbTC#0!Lqd<60Ju!kezBv-|3JJf?C>|@0}6}$-^3H4&)j+BcdeIq!eqZP@!!h|e~$Pbq|=o6 zw}`Jg6E6YzzQhlsz6KLt(o*uBK>TC)pVx>lt|0Pn6Zfkkd@b?YErf3){#&5%FNs%d zDf}Da3*c|B5buO`mj&^%>NyYMgoDJd!hUWL{}K5XL4Ts@WPzV7PrNGZyejc=rKJ3| ziN6ZojCfY~^U=h^kp2$hGm*|A;!mNzz9pU&?cxe?57NK&819o_&O`NZ3VyN@@f<-S zSDpA&q~C;ju*i2HuKG_TehK~2aN?gAmULbtuKIk7`1=teznZwlXWKVJ;wO;Ked5Wem+S@PIMs7L)W=iA`=Ot$MEqN{uj<4XwUu=16HkDDYeRhJ z3nCv$T=hAgxF5>%8u7)5w^tGW5aW>#i65*a`CcO4wUzL@#1jIAXF)urdOHaF%uPH$ z?63s!ooLt35Pt~XnfO)MTMTiv+o{A0)Rc0*O?)-{{959L;8%|jSN)$QzM`$9f0cMu zw3pk&kD@$T;Qv%_#h}mp#C4qFNBkA+hZ4UAe;Z4DX?rQ>VB$kjzvGCq4 zDd%zGuSW>KK)fva_Z!3)qx^ppuL8f6tB9nh^%4VKg7^f)70(bqh5hQp_hTH|fcPx< zsgcBAN53$Y__<&y-vZ+MF|J=jympAlZzuje+V6hizG~;hOJTh5Bk{xjlKvgyX9I+1 zgNfEO7%yi*f2;Kp zhx#f=d@cHma>R#WKbUw8_@!{-hcUirMZ7fZCV}`L*dIas1K7_L;yZD^ZxZha{j4HB z8FBko;#*<=dx_tJzc@*}0Lp)v_$>JS+r)2#OMPWUT%-D*13y!k__0ut_ah#H`g)dl z%NiozkoWRYg9Acs=BsLi{OTksnXIKjh~S?|^)l5q}->n~ASRzxf668|XJr z5D$YNyG%T`rj+wG@n)#UtQgm-{^OB;A>uvZPeO=CmzDJE5&sK*tTpjLh_@q&e}K3p zk@zO`Un7a@IA<#H*%(JJAl?P-Wi|0}u=8!igWxCk5kHE0IYqoP?Dh)r{qTpkiQk4F z$bxuB^}ii)NeWB>(P$~6MqKv9Zvir{6j0^jZvN+#9w$$>NkOSgX+RZ5D!9J zI)!*#HIaXlcoO1=Rm2BC4_k>RAd0iqN488q9d==8k41KHqm!h5KCmss_=}TP4(Luzo zgh_eo5U+#w+k&{(M>pcDVYmH=AI~f4zfAmRoY!RHbDtOa`NZ!+|0{^EL_hK&@$ZoS z7sOAZy&ot3JnZ2j@tKHQekYzE_M8d+M(gDr_}hHMTcdrIA^r*cc_8t|{-TH4#9N@8 z&57@;CGsy4UxN9imxy;o{5Onv7S#JB;<@1m<`LgeTk>5_{1W`gX5zchZ|)|39O-{e zynI_p{{nGsZ#RjztSj<*>#)|#M$}7Q=ui1T$d@L52Jue-bMzx>FPhFc^zY3`{t)`{ zuEZ~eNIBz(=SKS-N_-{kWFm3jx{}UZ;z@`q_XG2M67x7o1-($pQp#MHk z+#mILgLq@aT@Q)3hQH0@EBUKFb=+Hu_!z`3Rfw;}el6m8;Rhm!MT(#JBs2-$i_Wn)rJiC7mCM$0D6O#HY0u`K!pal@Iu7D zMm(qGQu&}xA|FEXhw2NjM|=%@n^uKprEtCf@|C+t`C`~k{Yiugp7Cxm#n zVvn}~14d3{d2ChGkN z@mz=-&ka>NxW(iDgPqkG4R`~iMI#eLi~@alFnh`zTv{p5MKfLTg1mfpP8PP z<5d4IMaX_0;$Qg+FH1ZR`uEAiqv4uS80xVp@$aCA zPQ>S-9rYnz4d^KbH{?h5c_NUKjpqC-IZe=U2odBjkL~5FZBr|8L@R zU_aTh&1nv|{m}yS??s45qra#?T=gG9{9B~clK2Jq!yd%1q5O%&&y}EP~ z?eE?qo*m_1OT0=GNq;->cQ8M*k9dCgjUS0mY$)m6Cf*U{^g(^9o>l+(i63hx>1cnY z@`sUr0LfQFIcpIQLpyzu_*%q=(ZoMPT$DgO1a>=^crUb<(ZolTkn&F=J}*f4EaEHB zzr0DjF2-^15?`(LNPH{&_GaSsT1dV-h@XXjI81zDGm$?*{6*Md{s8%1>*YH1S%kQ* zSMeqOxxXA=g?JPAlbXbJ9cClqx(>5F@d>bp{=|>NeqJa3@48Z+w~1duJp3MU9Y^dT zULWzQUMErg+{C!x7|Ab39CDiYz6dGLIpV&k_shg<7ZiEDZ$R_SjdUK8{6oa&r4SdW zeDiQg$Dg>$Hz6L1d^-@I8Z7DbB7O+PG@U#&^p zAAX=A@jZz9V~DSToew0g>j1|SpM(BlA@LlIMW1>-O3$l1+TDjF|5JXE-$h*8`w`;W z-p>(_#`yOp@zv1V1LC@_F$dytE$0yU?IOhWI(~WLhcUkGMqJm+#SzzfA58om_=i`B zYkd9|@muH@))3eG&bATX3;paNuIrF55ch*U{7Sq6=3DL)FP2a0F+19a>eD^Q)cn+n zxW*IRh=;*``V)_CDd~?OegbwlnfMy`rFq2bqkn&wxULsjPdpZJ@~6a0+aS?=4if+Q zS>dON--{4_nfMc}h2JIqFO0{tB7fDV=39{XEcka{;+jqX@k#JU;l!sQUe)`LHQ&wf zpHU<~6#goa_z#E&#u87)cxpQFE{Lxd62H|z^s|b%uHW85{1EJNH*xL1juP*MI9Bh6 z)AQYle)%rRmqA>bEmX>-@-W`!-^s+aUCbkX4cF0@5-)>(X9MxE$oEs?g>b$HiBE$*PZQVrx5Vv$7{%TvvuNQIELlW^&`129O@5BF0CSC^p z!b0Lj5T~sseg*Zrg?O=YQqJAP7o#6MN_dwg1m>^wdZ6n6H|Q-Z+LQ8E zP+tXzt6h~LuKKJ(d@t;+ChMfLcB5jVI=V} zsFxVxqv1DFh~I&K_!n`1r1K{62^a^hB>olRkORcqqJB>i*XL>cM7#+4!9R&#EFt>L z0zaztvIF*?pZJr$B43(#PK>9j5I+FFU5j`l)MFFkD&K*)#xuQ$>wRHK#K*!vj38bN z$=jm#C2XclK5rBdBccn{5FBO_NT8Ce;Mg4CVmO} zd5?I_aMAyE;(g(-_7b0t`aMB>ANuw0iEF+;6W6%?9&w$YEQt1@^;H&en=kP@Riyj@ z#C09mbHw$zD~*ZAqMvO~JUjZoDB{u3Ln84l5mKJv#6wyOpF}(YdYeN$H|lW-@iFKh z-zRV7&q`!iA1;n?X5WfL?I7$2-{MAL`r!epF zC-KE7PfqAV^;rRSQk1w}FVuNKmH)Q1ls}l{=R==$h!00SHX}X+_S2bo0?Ly_d@;^z z1o7n3Ql81gccLF$Onh-skzY&v65@f+iN6H9JWTv|#Per~4}yF)#HXsa-jyZag2aC* zA-pW{&d_HY;`)5BSmL)!OFDyypMyP*CH^YnkSWAAg z=aV&D%B%W0hVf1*;(A|4W#a2f%JFrGZ$*FFg!oX{RVU)Q{=6S?eeT&X;!j~5J(0N1 zbIm256ZN}>_zBp}HsTe~KkX&n5pnDZ;%9t4?sJj&2k;v=iR*Qdhr}b{KTFng$)!Gz z?il7zDiMDU_8&$(80XuN_!z{Q?TBB6|BNEO5qd}>o)i9LB=N>bX9{tD?7u<02g-tq zceS6mUT;24T<;VAk$5-szjugdhP`FQ_*nI?adIKz9|uY~%MH@%)GzR}xe@nb0%5#PIAJG4w#9u`E4~UN| zCgt&IC|hk8<&Af6NRLV1bTM?DrMJ_C9#N&E=>Pg&xlQNCx0cZEN#LA-8RDR&*> z_0VrNAYRi?q@v+cn8RBE$_xy+#hJUC`JS*ayVB$+KzZpin9_+9-@nxvT`ovG6 zpK40{PsA;)i2sdt)PZrr1*h#$xK&LSQP`=3Yr2HSsm5uWyK-M7#c;cnZ$RH?MEI+XaU4N(iApA*Qk{@40r&0A7-KA++DJ#HXVl zd75}9^cR7|>lKoG>k|J7?XDs54h2NM8S&BRciIpihW6fx_{qwWPIuxne1%67uUJNS z3h|lnv%`sZhJMsvs{WgzekYRrfi{x}@ykdx(Dy5^scl|19z9h{rAvpNjT=m3X~&QvP3wf7V*~E#m7S{{+S{ zs(*c{Z*JndpOth965on`xifKnE=@1u%W+-ooBz;li&F*Y#|-h!4hoCg@x9)%BlwiO)nFQik{oXkUKB*FnAt@kIEC zn#8sIjfv+$zuBI+uE&caemhk3kVsswn-3?R*I(o(5nqA*Im9cY-F-}ags-HtpLkuw zX(ySZzq?3W*VR8D9)@|;oX|&3lbtoS3g|D25+9CyD-hTFDZ+?f zu%GV4ufslHA|8No!4Tq&sz`l}BOZxo`Np zSpog;1d^YO`dUQ%NyPK3h}VZ5ZYKUR;=s>{-^TpXSHxFU61`m{z60@$2lF>teqXfT z3dCz-JQz&8JIYyy_#VtxG$*d>U^){YkM^SXRcm>)Ul~F2H{h=)5$}lcz-;2TJBl6_ z6AynKzCOR`e+KcYNM|AOk?`BAh%W;FkodZ4 zlKw8@e(2YZ5MK&AzexN6 z970^H~f(5{{Yf2Nqi>a z$V$WqAU+Qx-U8#ehQw!}ob8DB!MHn$c;-T)wq8+%Lp4!=CRG&x-kz95@fHuWe|DMTzf4eC|iQ z1=>+4@#-jNJ>s{ZpH{?A`%AraCq5H#PCw$6d_{g3@eUYYPb5AdMC9iXZw@-+RO_LT^vNA838GM?7Dc_$Bz0^27({ zm-K^)>wP74iR*g`S`eRre&j{sg;4%D;^*PFrxMq6<`RDv?QSXYi?D}{#MOW8Bpz8^ z&i4@UQfQB7iEF+5MEo-1#=FEDz^~@&B>8B)6oGz95ZC7bR3cs;{w<7nUR=j)NcTpOecN-{pM`q1K@`j5D#dBdLgd&VSPeepSyd6_`)KR&dv$t? zm-PA{g?Z*0#Pz)oFA%TstQ_B*czf7YN8;Hquh^6Li6BYmCF1(r=Rw4e!~c&Wo&)WF z5^;TQ|7*n8qh1yg*XQ;xC$7)!Ur#&>{J?hN`rQ8g#Ft|q7*f@l|;h(|#FGvd49{|^y= z9sSoC;^*>9`L7b6hb6DtwF5BmutUJUlu zkoXMv;daFJKHezeyXTl!dAU+@ZUqO5k;=0Ym7ejBmiR*mm zQQ}`fKi?C71%Bff;+YWt+$Vk+ellnG^!2FEhbl_^-GU-lfw;b3ESUJ9+9Kbac){m{ zcO-tZr10Lvv%)?H5FZY|G>W*cW0^u+ucyx^uH%tq#Pzw1yf#5KOn z+(VAj_M+D}^AfLxc3qBmm$q{J^TZ>-n-bUilsgiy2>XvFz8B-5fy6caF~n=4UZxZ8 zf_A!)_=(z5{?){NiVNRLyeP(}dx$SWzQ>7wg!uLX@wYK9xIw%f;<~?y>vR8dMW(MW zU6}*PyF9FuK~nAMfqPPuJ>uqBd+NzC9Zb6fw*2T z*g?D;`pvJ1zgbKhvA6H-U>p{E~^go2S-gi8X_;Ab@%_Ke({pmvD&zF;YR}x==_;3^P3GhqTh%Z9D z+##-h!>4z8eX5_&M_ivXP>T4Pa5>(excb#F;_4?G5LbWr5%GV&AnETT{zEn4Cy4h( zeB~c4zpI^SJ%$lif6{<>>-KVd8{$65w+HcM@K*zfABTO8BCh@26ykcm^NEjx-(E)i z`_@v#M|jKQHMg_K~gD`x(^ZaN?TI65{$C`1gtHy5*0FYdluAZ~A=yDl7Ye z#NUMd)FR$m#~s9%VjduY_*T^WY~pXDKixq5ucxFupAx?kF8mzvHt_$~i5Ekhf0y{V zGLlZ#SlO!nKLRgC{CmW2A;h&_IuH-XIHebHZI2^}*FhXRhjHy-qD@ppJiGK_K`8x5-sNeUAPeZ%=g!nh8$AiSfn@GOD z63>tMqRjo|_nc;9o6t7YS1#h25zqJ$_d$PJjd%|Dfwsgq7LfcRi5Ext6Ntz7i~KC& z&%oXmfoC#enav+g%d?*3HQ!H&YrY4GYrfwT{|p&i2iJV1lparxc=@LKT#ER)Fu0Y^ zZvLj?fKZax^}%&Xek|nMc=0M=c9TTu^bMCEhkMD}d{YE_-XQs$1?7k3Uh=shYd5<| zeklCF5ifb0K6X9dki0%$;5_lCU=P`lm(?4PBM4_bR&QA#V>iC|Zh2OGw;Py+dp?X! z=K>PW4H-@c-G)owJDqZnx8<=_-WK~6i4Vm-%+%#;d~%m>Xr zRlYHJJ^4A6w*vP*Uz=|y@Ma_*1CFpDHJuc2xS>=&797*(sr*%N45L%|9Pnt$_bqU^ z?Ns@t;E5!^4m_FoW^mQF>g^NoktDwh{9nWmflmduyWV#7z8CklhpUuMfOR(J^RsMH z&#N8y4dO$4e|2e=ZIGWzev0;_*LSKz<(j$0sMF3y}~Y95XOEE-BH7x}ROXHb3mUa(V6B(}<5t?3a|-J0@^Y zY+Q1r$vq`L#uL~pS<{G)>6OwqQi>$sqk8ok7&9120u78x>}yNtvK2Nkv2T1_@}Tt4 zw@q1M$4wa>A1&gk<0R~+vq{Sum_KW)aElhX&thzOgYGF6+v%hK?sz-a z^8WDgcG-bFr*Ll}^S#L>0X@O(w2+lU^Glt-Xk}PN`ESK>xv>+E-~|2sHd^TV!_)$ev|$BP-2|1`?4`nToJ zVg58d<--ljDF43=x1W8oN&T{h!5VU3U{_yeR%#RtB|3(Jow{^+opJ!M` z`D@&$=c#4j{8v8a_zMu!d6mZ<|E~EVqw;6JEJyUjfmZ){%^#P4i(wg+Kh+?pz`jP_ z`*YUpSP=|U(|&pc$WN4CtWRz_6z7ycovf5+p=cUISA9q52FQ6I9?jy(B`IU_FAO4*j5RT(? zqxtIg6&$a>>-HlYulu^y<8?Zoj-R1jM_9gkIWM)iLh6S_TdoYnu+=1-4T z|6}u}Dt1R?Kj$`{^)_+y@i%`}%pV`0!!Y(826?tx$7DWJ=;UbEV=vofbbO7sMRFM( IK)as*0*>!L&;S4c literal 0 HcmV?d00001 diff --git a/02_better_hello/hello.mod b/02_better_hello/hello.mod new file mode 100644 index 0000000..335fa0a --- /dev/null +++ b/02_better_hello/hello.mod @@ -0,0 +1 @@ +/home/device-driver/02_better_hello/hello.o diff --git a/02_better_hello/hello.mod.c b/02_better_hello/hello.mod.c new file mode 100644 index 0000000..677a5b3 --- /dev/null +++ b/02_better_hello/hello.mod.c @@ -0,0 +1,39 @@ +#include +#define INCLUDE_VERMAGIC +#include +#include +#include +#include +#include + +BUILD_SALT; +BUILD_LTO_INFO; + +MODULE_INFO(vermagic, VERMAGIC_STRING); +MODULE_INFO(name, KBUILD_MODNAME); + +__visible struct module __this_module +__section(".gnu.linkonce.this_module") = { + .name = KBUILD_MODNAME, + .init = init_module, +#ifdef CONFIG_MODULE_UNLOAD + .exit = cleanup_module, +#endif + .arch = MODULE_ARCH_INIT, +}; + +#ifdef CONFIG_RETPOLINE +MODULE_INFO(retpoline, "Y"); +#endif + + +static const struct modversion_info ____versions[] +__used __section("__versions") = { + { 0xbdfb6dbb, "__fentry__" }, + { 0x92997ed8, "_printk" }, + { 0x5b8239ca, "__x86_return_thunk" }, + { 0xc9d7e676, "module_layout" }, +}; + +MODULE_INFO(depends, ""); + diff --git a/02_better_hello/hello.mod.o b/02_better_hello/hello.mod.o new file mode 100644 index 0000000000000000000000000000000000000000..e01ffd8bae8ffc0d0c72e8355eb65822651d9674 GIT binary patch literal 93592 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 J@SoiO{{T#EMr8m1 literal 0 HcmV?d00001 diff --git a/02_better_hello/hello.o b/02_better_hello/hello.o new file mode 100644 index 0000000000000000000000000000000000000000..1361fb1dc4648bf84e39c81aaded5fd54027ab95 GIT binary patch literal 17272 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 DY)N+# literal 0 HcmV?d00001 diff --git a/02_better_hello/modules.order b/02_better_hello/modules.order new file mode 100644 index 0000000..b53e349 --- /dev/null +++ b/02_better_hello/modules.order @@ -0,0 +1 @@ +/home/device-driver/02_better_hello/hello.ko