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