1.Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optionalLOCAL_MODULE := test.ko
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_RELATIVE_PATH := modules
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)
ifeq ($(TARGET_BUILD_VARIANT),user)
DEBUGMODE := BUILD=no
else
DEBUGMODE := $(DEBUGMODE)
endif
ifeq ($(KERNEL_UBOOT_USE_ARCH_ARM64), true)
EXT_FLAGS := ARCH=arm64 CROSS_COMPILE=aarch64-linux-android-
endif
$(LOCAL_PATH)/test.ko: bootimage
$(MAKE) -C $(shell dirname $@) $(EXT_FLAGS) $(DEBUGMODE) KDIR=$(ANDROID_PRODUCT_OUT)/obj/KERNEL clean
$(MAKE) -C $(shell dirname $@) $(EXT_FLAGS) $(DEBUGMODE) KDIR=$(ANDROID_PRODUCT_OUT)/obj/KERNEL
2.Makefile
ARCH ?= arm
export CONFIG_TEST_KO=m
all: $(UMP_SYMVERS_FILE)
$(MAKE) ARCH=$(ARCH) -C $(KDIR) M=$(CURDIR) modules
clean:
$(MAKE) ARCH=$(ARCH) -C $(KDIR) M=$(CURDIR) clean
kernelrelease:
$(MAKE) ARCH=$(ARCH) -C $(KDIR) kernelrelease
3.Kbuild
test-y += test_ko.o
obj-$(CONFIG_TEST_KO) := test.o
4.test_ko.c
#include <linux/module.h>
#include <linux/string.h>
static int __init test_module_init(void)
{
printk(KERN_DEBUG "test_module_init");
return 0;
}
static void __exit test_module_exit(void)
{
printk(KERN_DEBUG "test_module_exit");
}
module_init(test_module_init);
module_exit(test_module_exit);
MODULE_LICENSE("GPL");