# Out-of-tree build for the IEC listener kernel module. # Build ON the Pi (or cross-compile) against the running kernel's headers: # sudo apt install raspberrypi-kernel-headers # make # builds iec_listener.ko # sudo make load # insmod + show /dev/iec0 # sudo make unload # # See docs/kernel-notes.md for headers/pinning details. MODULE_NAME := iec_listener obj-m += $(MODULE_NAME).o # iec_listener.o is built from iec_listener.c; the other headers are includes. KDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) # overlay DTS := dts/iec-overlay.dts DTBO := dts/iec-overlay.dtbo .PHONY: all clean load unload overlay install docker-build docker-clean all: $(MAKE) -C $(KDIR) M=$(PWD) modules # Cross-build in an emulated arm64 container (for compiling off the Pi). # Override e.g. KERNEL_VERSION=... HEADERS_PKG=... ; see build-in-docker.sh. docker-build: ./build-in-docker.sh docker-clean: ./build-in-docker.sh clean clean: $(MAKE) -C $(KDIR) M=$(PWD) clean rm -f $(DTBO) # Compile the device-tree overlay (pin reservation / pulls). overlay: $(DTBO) $(DTBO): $(DTS) dtc -@ -I dts -O dtb -o $@ $< load: all sudo insmod $(MODULE_NAME).ko $(if $(ADDRESS),address=$(ADDRESS),) @echo "loaded; device:" && ls -l /dev/iec0 unload: sudo rmmod $(MODULE_NAME) install: all $(MAKE) -C $(KDIR) M=$(PWD) modules_install sudo depmod -a