-1

コンパイル環境として Ubuntu 12.04 を使用しています。

Cyanogen mod カーネルのソース コードもあります (Github から取得: https://github.com/CyanogenMod/cm-kernel )

Android NDK r5c (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);

これは私のメイクファイルです:

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) を使用しようとしましたが、使用できませんでした。

4

1 に答える 1

1

Sourcery Mentor の GCC でコンパイルしてみてください。Android用のLinuxカーネルをコンパイルする前に試しました。多分それは助けます。

于 2012-09-14T12:53:27.673 に答える