交叉编译Android平台的LKM模块

时间:2011-01-31 08:59:43

标签: android linux-kernel

出于工作原因,我需要为Android平台开发LKM。我不太确定如何交叉编译我的AndroidModule.c以及使用哪些工具。我想我需要Android的源代码才能告诉编译器从那里链接库? 我还需要下载适用于Android的ARM编译器。 我认为用这三样东西就足够了(LKM Code in C,Android Source Code,ARM compiler for android)。 问题是我找不到任何解释如何为Android编译LKM的教程。 我很乐意获得更多相关信息。

3 个答案:

答案 0 :(得分:1)

这是我用来为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目录具有写权限。

答案 1 :(得分:0)

尝试底部的Android URL,它有关于如何构建源代码的详细说明。

然后按照this URL进行最终构建(这是为了梦想发布),我假设该程序也适用于其他版本。

答案 2 :(得分:0)

This应该有帮助。

要交叉编译模块,您需要内核源代码和Android工具链中的ARM编译器。你需要一个类似于

的Makefile
obj-m:= AndroidModule.o

all: module

module:
    $(MAKE) -C $(KERNELSRC) SUBDIRS=$(PWD) modules
clean:
    $(MAKE) -C $(KERNELSRC) SUBDIRS=$(PWD) clean
    @rm -f Module.symvers Module.markers modules.order

然后通过将CROSS_COMPILE配置为ARM编译器并将KERNELSRC配置为内核源位置并调用make进行编译。这是我在0xdriod上使用的命令。

CROSS_COMPILE=~/beagle-eclair/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- ARCH=arm KERNELSRC=~/kernel make