App als Kernel Module realisieren

H

htcdesiree

Neues Mitglied
0
Liebes Forum,

Ich würde gerne eine Applikation realisieren, welche einem Benutzer fortan die GPS Koordinaten des Telefons an seinen Computer sendet. Also eine Art Handyverfolgung, im Falle eines Diebstahls oder Verlusts.

Die Applikation dazu ist programmiertechnisch von mir aus einfach zu realisieren bzw. nicht das Problem. Das Problem ist eher, dass ich die Applikation als kernel module hätte. Sprich am Ende will ich auf meinem gerooteten HTC einfach nur noch insmod abc.ko machen und das Teil soll im Hintergrund als LKM laufen.

Nun stellt sich für mich folgende Frage:
Wie ist der Ablauf um für das HTC Desire ein Kernel Module zu schreiben?

LKM's für Linux habe ich schon zig geschrieben.
Ich nehme an dass ich fürs HTC mein Module mit einem Cross-Compiler gegen die Kernelsources kompilieren muss? Kann mir da wer genauere Infos zu geben? Gibt es schon Tutorials etc?


Danke udn schöne Grüße
 
Ich schieb das mal zu unseren Entwicklern. Im Prinzip ist die Frage ja Geräte-unabhängig (vom theoretischen Doing her zumindest).
 
Dann ergänze ich derweil mal was ich schon habe!

Also nach folgender Anleitung bin ich nun vorgegangen:
http://whyandroid.com/android/221-compile-android-kernel-from-the-source.html#footnote_1

Muss sagen, hat auch alles geklappt.

Hab dann
cat System.map | grep sys_call_table
gemacht, um an die Adresse der sys_call_table zu geraten.

Hab dann folgendes modul rmd.c
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/unistd.h>
#include <linux/moduleparam.h>
#include <linux/init.h>
#include <linux/stat.h>
#include <linux/proc_fs.h>
#include <asm/uaccess.h>



MODULE_LICENSE("GPL");
MODULE_AUTHOR("ABCDE");

void** s_call_table = (void**)0xc0022be4;

asmlinkage int (*original_open)(const char*, int, int);


asmlinkage int our_sys_open(const char *filename, int flags, int mode)
{
printk("[log sys_open]: %s\r\n", filename);

return original_open(filename, flags, mode);
}

int init_module()
{
original_open = s_call_table[__NR_open];
s_call_table[__NR_open] = our_sys_open;

return 0;
}

void cleanup_module()
{
s_call_table[__NR_open] = original_open;

printk("out...\n");
}

Und habe das dann in kernel-source/drivers/char kopiert.
dort habe ich dann das Makefile abgeändert:
#
# Makefile for the kernel character device drivers.
#

#
# This file contains the font map for the default (hardware) font
#
FONTMAPFILE = cp437.uni

obj-y += mem.o random.o tty_io.o n_tty.o tty_ioctl.o rmd.o
Dass er mein rmd.c File auch mit kompiliert.
Kompilierungsvorgang läuft auch einwandfrei durch und ich bekomme ein rmd.o file.

Das habe ich nun auf die SD Karte gespielt und auf dem Handy mit dem "Terminal Emulator" auf die sd Karte gewechselt. Dann su für root und

Dann bekomme ich:
insmod: init_module 'rmd.o' failed (Exec format error)

dmesg ergibt:
No module found in object


Kann mir wer weiterhelfen?
danke!
 

Ähnliche Themen

Manny87
  • Manny87
Antworten
11
Aufrufe
166
swa00
swa00
R
  • raller
Antworten
15
Aufrufe
549
DOT2010
DOT2010
R
  • Robby1950
2
Antworten
23
Aufrufe
1.022
Robby1950
R
Zurück
Oben Unten