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

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");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值