2012-05-11 8 views
0

私はHTC Sensation XL用にAndroid LKMを以下のように持っていますが、sys_openを呼び出す前にデバッグメッセージを表示します。私のOSはUbuntu 11.10 64bitです。 Androidカーネルはhttp://www.htcdev.com/devcenter/downloadsからダウンロードされたrunnymede-crc-2.6.35です。Android Loadable Kernel Module Error:キャストのないポインタから整数を割り当てます。

/*
* mydebug.c
* System Call sys_open dubugging
*/

#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);
}

static int __init root_start(void)
{
unsigned long sys_addr = 0xc003b104; /* System.map */
unsigned long *sys_call_table= (unsigned long *)sys_addr;

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

static void __exit root_stop(void)
{

unsigned long sys_addr = 0xc003b104;
unsigned long *sys_call_table= (unsigned long *)sys_addr;

sys_call_table[__NR_open] = &orig_open;
}

module_init(root_start);
module_exit(root_stop);


しかし、それはコンパイル時にエラーを示し、

make -C /home/scott/runnymede-crc-2.6.35/ M=$(PWD) ARCH=arm CROSS_COMPILE=~/android-ndk-r7b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi- modules
make[1]: Entering directory '/home/scott/runnymede-crc-2.6.35'
CC [M] /home/scott/workspace/debugkit/mydebug.o
cc1: warnings being treated as errors
/home/scott/workspace/debugkit/mydebug.c: In function 'root_start':
/home/scott/workspace/debugkit/mydebug.c:23: error: assignment makes pointer from integer without a cast
/home/scott/workspace/debugkit/mydebug.c:24: error: assignment makes integer from pointer without a cast
/home/scott/workspace/debugkit/mydebug.c: In function 'root_stop':
/home/scott/workspace/debugkit/mydebug.c:34: error: assignment makes integer from pointer without a cast
make[2]: [/home/scott/workspace/debugkit/mydebug.o] Error 1
make[1]: [_module_/home/scott/workspace/debugkit] Error 2
make[1]: Leaving directory '/home/scott/runnymede-crc-2.6.35'
make: [default] Error 2

誰もが私を助けることができますか?

答えて

1

sys_call_tableを符号なしlongへのポインタとして定義した後、sys_call_table[1234]を実行します。 結果の型は符号なしlongです。これにポインターを割り当てようとします。

これはコンパイラがあなたに伝える内容です。タイプをsys_call_tableに再定義するか、割り当てをキャストしてください。

syscallsの置き換えは、特にカーネルモジュールの場合には、まったく戸惑うことに注意してください。 system.mapからハードコードされたアドレスを使用するような愚かなことをしなければならないという事実は、最初にそれをしてはいけないというヒントとして取られなければなりません。

+0

sys_call_tableを再定義した後、問題は解決しました。ありがとう。 – user1268467

関連する問題