diff --git a/project/modules/Makefile b/project/modules/Makefile old mode 100755 new mode 100644 index 3eefd1d..6a7a92c --- a/project/modules/Makefile +++ b/project/modules/Makefile @@ -1,29 +1,43 @@ -# Makefile -CC=gcc -CFLAGS = -W -Wall -pedantic -g -std=gnu99 -c -LDFLAGS = -static -RM = rm -f +PWD = $(realpath $(shell pwd)) +MODULE_NAME ?= $(shell basename "$(PWD)") -TARGET = motor -OBJECTS = gpio.o -HEADERS = $(OBJECTS:.o=.h) -SOURCES = $(TARGET).c $(OBJECTS:.o=.c) +ifneq ($(KERNELRELEASE),) + # call from kernel build system + obj-m := $(MODULE_NAME).o +else + ARCH ?= aarch64 + KERNEL_ARCH ?= arm64 + CROSS_COMPILE ?= $(ARCH)-linux-gnu- + KVER ?= $(shell ls "$(PWD)/../../kernel" | grep 'linux-' | sed 's/linux-//') + KERNELDIR ?= $(PWD)/../../kernel/linux-$(KVER) + MODDESTDIR ?= /lib/modules/$(KVER)/kernel/drivers/syso + +default: + ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(CROSS_COMPILE) MODULE_NAME=$(MODULE_NAME) $(MAKE) -C $(KERNELDIR) M=$(PWD) modules +endif + +test: $(MODULE_NAME).ko.test + +$(MODULE_NAME).ko.test: $(MODULE_NAME).test.o + $(CROSS_COMPILE)$(CC) $(LDFLAGS) -pthread $^ -o $@ %.o: %.c - $(CC) $(CFLAGS) $< -o $@ - -.PHONY: all clean - -all: $(TARGET) + $(CROSS_COMPILE)$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ clean: - $(RM) $(TARGET) $(TARGET).o $(OBJECTS) depend + rm -rf *.ko *.o *.mod.c *~ core .depend .*.cmd .tmp_versions *.symvers *.order -depend: $(SOURCES) $(HEADERS) - $(CC) $(CPPFLAGS) -MM $(SOURCES) > $@ +depend .depend dep: + $(CROSS_COMPILE)$(CC) $(CFLAGS) -M *.c > .depend -$(TARGET): $(TARGET).o $(OBJECTS) - $(CC) $(LDFLAGS) $^ -o $@ - $(RM) depend $(TARGET).o $(OBJECTS) +install: + install -p -m 644 $(MODULE_NAME).ko $(MODDESTDIR) + /sbin/depmod -a ${KVER} -include depend +uninstall: + rm -f $(MODDESTDIR)/$(MODULE_NAME).ko + /sbin/depmod -a ${KVER} + +ifeq (.depend,$(wildcard .depend)) + include .depend +endif