diff --git a/src/06-mini-project/.gitignore b/src/06-mini-project/.gitignore new file mode 100644 index 0000000..c9aa047 --- /dev/null +++ b/src/06-mini-project/.gitignore @@ -0,0 +1,7 @@ +.o +.ko +.mod +.mod.c +.mod.o +.ko.cmd +.mod.cmd \ No newline at end of file diff --git a/src/06-mini-project/kernel/.clangd b/src/06-mini-project/kernel/.clangd new file mode 100644 index 0000000..d940495 --- /dev/null +++ b/src/06-mini-project/kernel/.clangd @@ -0,0 +1,33 @@ +CompileFlags: + Add: + # Architecture and cross-compilation + - "--target=aarch64-linux-gnu" + + # Exclude standard library + - "-nostdinc" + + # Mandatory kernel definitions + - "-D__KERNEL__" + - "-DMODULE" + - "-DCONFIG_CC_HAS_K_CONSTRAINT=1" + + # Force-included files + - "-include" + - "/buildroot/output/build/linux-5.15.148/include/linux/compiler-version.h" + - "-include" + - "/buildroot/output/build/linux-5.15.148/include/linux/kconfig.h" + - "-include" + - "/buildroot/output/build/linux-5.15.148/include/linux/compiler_types.h" + + # Kernel include paths + - "-I/buildroot/output/build/linux-5.15.148/arch/arm64/include" + - "-I/buildroot/output/build/linux-5.15.148/arch/arm64/include/generated" + - "-I/buildroot/output/build/linux-5.15.148/include" + - "-I/buildroot/output/build/linux-5.15.148/arch/arm64/include/uapi" + - "-I/buildroot/output/build/linux-5.15.148/arch/arm64/include/generated/uapi" + - "-I/buildroot/output/build/linux-5.15.148/include/uapi" + - "-I/buildroot/output/build/linux-5.15.148/include/generated/uapi" + + # GCC compiler system include path + - "-isystem" + - "/buildroot/output/host/lib/gcc/aarch64-buildroot-linux-gnu/11.3.0/include" diff --git a/src/06-mini-project/kernel/Makefile b/src/06-mini-project/kernel/Makefile new file mode 100644 index 0000000..05692bc --- /dev/null +++ b/src/06-mini-project/kernel/Makefile @@ -0,0 +1,34 @@ +export PATH := /buildroot/output/host/usr/sbin$\ + :/buildroot/output/host/usr/bin/$\ + :/buildroot/output/host/sbin$\ + :/buildroot/output/host/bin/$\ + :$(PATH) + +MODULE := temp_regulator +SOURCE := main + +# Part executed when called from kernel build system: +ifneq ($(KERNELRELEASE),) +obj-m += $(MODULE).o ## name of the generated module + +$(MODULE)-objs := $(SOURCE).o ## list of objects needed for that module +CFLAGS_$(SOURCE).o := -DDEBUG + +# Part executed when called from standard make in module source directory: +else +include ../../kernel_settings +PWD := $(shell pwd) + +all: + $(MAKE) -C $(KDIR) M=$(PWD) ARCH=$(CPU) CROSS_COMPILE=$(TOOLS) modules + +clean: + $(MAKE) -C $(KDIR) M=$(PWD) clean + echo $(PATH) + +install: + $(MAKE) -C $(KDIR) M=$(PWD) INSTALL_MOD_PATH=$(MODPATH) modules_install + install -D -m 0644 $(MODULE).conf $(MODPATH)/etc/modprobe.d/$(MODULE).conf + +endif + diff --git a/src/06-mini-project/kernel/main.c b/src/06-mini-project/kernel/main.c new file mode 100644 index 0000000..8b1cff4 --- /dev/null +++ b/src/06-mini-project/kernel/main.c @@ -0,0 +1,31 @@ +// temp_regulator.c +#include // needed by all modules +#include // needed for macros +#include // needed for debugging + +#include "linux/printk.h" + +static int __init temp_regulator_init(void) { + pr_info("Linux module temp_regulator loading...\n"); + + + + pr_info("Linux module temp_regulator loaded\n"); + return 0; +} + +static void __exit temp_regulator_exit(void) { + pr_info("Linux module temp_regulator unloading...\n"); + + + + pr_info("Linux module temp_regulator unloaded\n"); +} + +module_init(temp_regulator_init); +module_exit(temp_regulator_exit); + +MODULE_AUTHOR("Klagarge "); +MODULE_AUTHOR("Fastium "); +MODULE_DESCRIPTION("Temperature regulator"); +MODULE_LICENSE("GPL");