[笔记]Android中在外部编译kernel module示例

来源:互联网 发布:阿里云域名可以转让吗 编辑:程序博客网 时间:2024/06/04 19:42

1.Android.mk

LOCAL_PATH:= $(call my-dir)


include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional
LOCAL_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");

0 0
原创粉丝点击