2011-01-31 79 views
2

由於工作原因,我需要爲Android平臺開發LKM。我不太清楚如何交叉編譯我的AndroidModule.c以及使用哪些工具。我想我需要Android的源代碼來告訴編譯器從那裏鏈接庫嗎? 我還需要下載適用於Android的ARM編譯器。 我認爲用這三樣東西就足夠了(C語言中的LKM代碼,Android源代碼,適用於Android的ARM編譯器)。 問題是,我找不到任何教程來解釋如何編譯Android的LKM。 我會很高興有更多的信息。爲Android平臺交叉編譯LKM模塊

回答

0

嘗試Android URL底部有詳細的指導如何構建源代碼。

然後按照this URL進行最終建築(這是爲了發佈夢想),我假設該程序也應該適用於其他版本。

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作爲內核源位置,並呼籲讓編譯。這是我在0xdriod上使用的命令。

CROSS_COMPILE=~/beagle-eclair/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- ARCH=arm KERNELSRC=~/kernel make 
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目錄的寫入權限。