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

Reply via email to