android - Android平台交叉编译LKM模块

标签 android linux-kernel

由于工作原因,需要开发一个Android平台的LKM。我不太确定如何交叉编译我的 AndroidModule.c 以及为此使用什么工具。我想我需要 Android 的源代码才能告诉编译器从那里链接库,对吧? 我还需要下载适用于 Android 的 ARM 编译器。 我认为有了这三样东西就足够了(C 语言的 LKM 代码、Android 源代码、Android 的 ARM 编译器)。 问题是我找不到任何解释如何为 Android 编译 LKM 的教程。 我将非常高兴获得更多相关信息。

最佳答案

这是我用来为 Android 构建模块的 makefile。 我假设您在某处有一份 Linux 源代码的副本,并且您已经为您的手机构建了内核。 在您的模块目录中,我放置了一个 Makefile,如下所示:

ifneq ($(KERNELRELEASE),)
    obj-m := mymod.o
else
    COMPILER ?=/pathtoandroid/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-
    CROSS_COMPILE ?=$(COMPILER)
    ARCH ?=arm
    KERNELDIR ?= /home/kernel/androidkerneldir/
    PWD := $(shell pwd)
    EXTRACFLAGS += -I$(PWD)/somedirectory/shomewhere
default:
    $(MAKE) -C $(KERNEL_DIR) M=`pwd` ARCH=$(ARCH) CROSS_COMPILE=$(COMPILER) EXTRA_CFLAGS=$(EXTRACFLAGS) modules
clean:
    rm *.o *.ko
install:
    adb push mymod.ko /system/lib/modules

这应该可以为您完成。确保您对/system 目录具有写入权限。

关于android - Android平台交叉编译LKM模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4849063/

相关文章:

linux - 我如何在 Linux 中发现笔记本电脑触摸板的 ACPI ID?

linux - U-Boot i2c 检测到我的设备 (70) 但 Linux i2c 没有。为什么?

linux - Linux 中的内存区域标志 : why both VM_WRITE and VM_MAYWRITE are needed?

android - Google Play 商店无法打开 Beta alpha 版本的链接

java - C# 的 goto 语句在 Java 中的等价物是什么?

android - 样式在 android webview 中不起作用

c - block 设备 - 当不是 512 字节的倍数时初始化 gendisk 结构

java - SQLite插入函数/方法参数参数太多,如何重构?

android - ClassCastException android.widget.AbsListView$LayoutParams 到 android.widget.GridLayout$LayoutParams 此异常是否特定于 API 级别?

java - 如何使用 Java 程序加载/卸载 Linux 内核模块?