2012-09-05 91 views
-1

我有Ubuntu 12.04作爲編譯環境。無法編譯Android的LKM

我也有氰MOD內核的源代碼(獲得從GitHub:https://github.com/CyanogenMod/cm-kernel

我用工具鏈在Android NDK R 5 C(對於Linux)

我有以下代碼:

#include <linux/kernel.h> 
#include <linux/module.h> 
#include <asm/unistd.h> 

asmlinkage ssize_t (*orig_open)(const char *pathname, int flags); 

asmlinkage ssize_t hooked_open(const char *pathname, int flags) { 
    printk(KERN_INFO "SYS_OPEN: %s\n", pathname); 
    return orig_open(pathname, flags); 
} 

void **sys_call_table; 

static int __init root_start(void) { 
    sys_call_table= (void *) 0x0030084; 

    orig_open = sys_call_table[__NR_open]; 
    sys_call_table[__NR_open] = hooked_open; 
    return 0; 
} 

static void __exit root_stop(void) { 
    sys_call_table[__NR_open] = &orig_open; 
} 

module_init(root_start); 
module_exit(root_stop); 

這是我的Makefile

obj-m += root.o 

all: 
    make -C CyanogenMod-cm-kernel-2a32a61/ M=$(PWD) ARCH=arm CROSS_COMPILE=arm-eabi- modules 

我的步驟,以在終端編譯:

export PATH=$PATH:/home/hongnhat/lkm/android-ndk-r5c/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin 
cd CyanogenMod-cm-kernel-2a32a61 
make oldconfig && make prepare 
cd .. 
make 

結果是:

make -C CyanogenMod-cm-kernel-2a32a61/ M=/home/hongnhat/lkm ARCH=arm CROSS_COMPILE=arm-eabi- modules 
make[1]: Entering directory `/home/hongnhat/lkm/CyanogenMod-cm-kernel-2a32a61' 

    WARNING: Symbol version dump /home/hongnhat/lkm/CyanogenMod-cm-kernel-2a32a61/Module.symvers 
      is missing; modules will have no dependencies and modversions. 

    CC [M] /home/hongnhat/lkm/root.o 
as: unrecognized option '-EL' 
make[2]: *** [/home/hongnhat/lkm/root.o] Error 1 
make[1]: *** [_module_/home/hongnhat/lkm] Error 2 
make[1]: Leaving directory `/home/hongnhat/lkm/CyanogenMod-cm-kernel-2a32a61' 
make: *** [all] Error 2 

我不知道爲什麼它拋出無法識別選項 '-EL' 錯誤。 請幫我解決這個問題,我一直在試着拉我的頭髮,我試着用不同的gcc版本(4.4.0,4.4.3,4.6)但沒用。

回答

1

嘗試使用Sourcery Mentor的GCC進行編譯。我之前已經嘗試過爲Android編譯Linux內核。也許它有幫助。