环境: Ubuntu 16.04 + Android P源码
源码路径: /home/michael/android_code
需要编译的模块路径: 比如 /home/michael/test_module/, 内核模块文件名为test_module.c
那么只需要在/home/michael/test_module/中建立一个Makefile文件就可以编译这个模块了.
Makefile的模板如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| obj-m += test_module.o
# Android 源码路径
SOURCE_PATH := /home/michael/android_src
# kernel 的输出目录, <product-name> 因产品而异,下文同
KDIR := $(SOURCE_PATH)/out/target/product/<product-name>/obj/KERNEL_OBJ
PWD :=$(shell pwd)
KERNEL_CFLAGS := KCFLAGS=-mno-android
CROSS := $(SOURCE_PATH)/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin
all:
$(MAKE) -C $(FLAGS) $(KDIR) ARCH=arm64 CROSS_COMPILE=$(CROSS)/aarch64-linux-android- M=$(PWD) $(FLAGS) $(KERNEL_CFLAGS) modules
clean:
rm -f *.mod.c *.ko *.o .*.cmd *.symvers *.order
rm -rf .tmp_versions
|
更简单的版本
1
2
3
4
5
6
7
8
9
10
11
| ifneq ($(KERNELRELEASE),)
obj-m := debugfs-test.o
# Otherwise we were called directly from the command line; invoke the kernel build system.
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
all:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(PWD) clean
endif
|