Just reminder for myself how to build driver for arm64 having x64 based machine with ubuntu
Install right gcc
for arm64 we need gcc-aarch64-linux-gnu:
sudo apt-get install gcc-aarch64-linux-gnu
Build Kernel
You cannot use installed kernel and must build one for appropriate architecture - in my case for arm64 (note - gcc has prefix aarch64, C - consistency). Clone or unpack kernel source tree to some directory KROOT and then
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules
Patch Makefile
Usual trick is to use something like
MACHINE ?= $(shell uname -m)
ifeq ($(MACHINE),x86_64)
but this gives you arch of host machine, so you must rewrite all such cases to use ARCH variable (and to setup make -C $(KROOT))
Building
and finally you can cross-compile your driver with something like
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -f Makefile.arm64