Hello, everyone
I'm trying to port gps library on gingerbread 2.3.4 (rowboat), the
library based on gps_freerunner sources.
I've managed to start gps initialization and main loop but virtual
machine crashes.
V/HAL ( 89): loaded HAL id=gps path=/system/lib/hw/
gps.default.so hmi=0x7 handle=0xb000eac0
D/gps ( 89): open_gps() is called
D/gps ( 89): gps_get_hardware_interface() is called
D/gps ( 89): freerunner_gps_init() is called
D/gps ( 89): gps_state_init() is called
D/gps ( 89): gps will read from /dev/ttyS0
D/gps ( 89): gps state initialized
D/gps ( 89): freerunner_gps_get_extension() is called
D/gps ( 89): freerunner_gps_get_extension() is called
D/gps ( 89): gps_state_thread() is called
D/gps ( 89): nmea_reader_init() is called
D/gps ( 89): nmea_reader_update_utc_diff() is called
D/gps ( 89): epoll_register() is called
D/gps ( 89): epoll_register() is called
D/gps ( 89): gps thread running
D/gps ( 89): gps_dev_init() is called
I/DEBUG ( 43): pid: 89, tid: 194 >>> system_server <<<
I/DEBUG ( 43): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault
addr 604210ad
I/DEBUG ( 43): r0 4cc2cc7c r1 4cc2c7b8 r2 b1bcde9a r3 b1bcde9a
I/DEBUG ( 43): r4 60421081 r5 811031cc r6 81104260 r7 00000003
I/DEBUG ( 43): r8 00000089 r9 811041a8 10 81102e04 fp 811041a8
I/DEBUG ( 43): ip afa03108 sp 4cc2cc28 lr 8110154d pc
811023d2 cpsr 60000030
I/DEBUG ( 43): d0 3f80000000015180 d1 42b504f040000000
I/DEBUG ( 43): d2 3f3504f400000040 d3 c19b504ffffffffe
I/DEBUG ( 43): d4 bf8000013668f876 d5 00000000bf3504f4
I/DEBUG ( 43): d6 3f3504f43f3504f4 d7 00015180bf3504f4
I/DEBUG ( 43): d8 0000000000000000 d9 0000000000000000
I/DEBUG ( 43): d10 0000000000000000 d11 0000000000000000
I/DEBUG ( 43): d12 0000000000000000 d13 0000000000000000
I/DEBUG ( 43): d14 0000000000000000 d15 0000000000000000
I/DEBUG ( 43): d16 40f5180800000000 d17 3fe0000000000000
I/DEBUG ( 43): d18 0000000000000000 d19 0000000000000000
I/DEBUG ( 43): d20 3ff0000000000000 d21 8000000000000000
I/DEBUG ( 43): d22 0000000000000000 d23 3fcc7288e957b53b
I/DEBUG ( 43): d24 3fc74721cad6b0ed d25 3fc39a09d078c69f
I/DEBUG ( 43): d26 0000000000000000 d27 0000000000000000
I/DEBUG ( 43): d28 0000000000000000 d29 3ff0000000000000
I/DEBUG ( 43): d30 0000000000000000 d31 3ff0000000000000
I/DEBUG ( 43): scr 60000010
I/DEBUG ( 43):
I/DEBUG ( 43): #00 pc 000023d2 /system/lib/hw/
gps.default.so
I/DEBUG ( 43): #01 pc 00030766 /system/lib/
libandroid_runtime.so
I/DEBUG ( 43): #02 pc 0001ce3a /system/lib/libutils.so
I/DEBUG ( 43): #03 pc 00011d9c /system/lib/libc.so
I/DEBUG ( 43): #04 pc 00011960 /system/lib/libc.so
With the help of objdump i've found that machine crashes when
status_callback is called:
GpsStatus gps_status;
gps_status.status = GPS_STATUS_ENGINE_ON;
23ce: a815 add r0, sp, #84
23d0: 8087 strh r7, [r0, #4]
state->status_callback(&gps_status);
23d2: 6ae6 ldr r6, [r4, #44]
23d4: 47b0 blx r6
status->status_callback for testing inited in gps_state_init:
gps_state_init( GpsState* state, GpsCallbacks* callbacks )
{
...
state->status_callback = callbacks->status_cb;
}
freerunner_gps_init(GpsCallbacks* callbacks)
{
GpsState* s = _gps_state;
s->callbacks = *callbacks;
D("%s() is called", __FUNCTION__);
if (!s->init)
gps_state_init(s, callbacks);
if (s->fd < 0)
return -1;
return 0;
}
Can anyone provide me some help with that?
--
unsubscribe: [email protected]
website: http://groups.google.com/group/android-porting