안녕하세요~ invain님.. binder를 strace로 tracing을 해서 몇일동안 보았지만 아직도 감을 못잡고 있습니다. 일단 알게된사실은 com.google.process.content 프로세스를 tracing 하면 09:30:53.730000 stat64("/system/framework/framework-res.apk", {st_mode=S_IFREG|0644, st_size=1511788, ...}) = 0 76 09:30:55.530000 stat64("/system/app/GoogleApps.apk", {st_mode=S_IFREG|0644, st_size=44891, ...}) = 0 77 09:30:56.100000 mprotect(0x410f6000, 8192, PROT_READ|PROT_WRITE) = 0 78 09:30:56.670000 getpid() = 707 79 09:30:58.410000 getuid32() = 10000 80 09:31:00.510000 ioctl(13, 0xc0186201, 0xbe9435b0) = 0 81 09:31:02.510000 ioctl(13, 0xc0186201, 0xbe9435b0) = 0 82 09:31:02.700000 getpid() = 707 83 09:31:04.470000 getuid32() = 10000 84 09:31:05.560000 ioctl(13, 0xc0186201, 0xbe9435f0) = 0 85 09:31:06.750000 ioctl(13, 0xc0186201, 0xbe9435f0) = 0 86 09:31:06.850000 getpid() = 707 87 09:31:07.660000 getuid32() = 10000 88 09:31:08.190000 ioctl(13, 0xc0186201, 0xbe9435c0) = 0 89 09:31:09.010000 ioctl(13, 0xc0186201, 0xbe9435c0) = 0 90 09:31:09.830000 getpid() = 707 91 09:31:10.430000 getuid32() = 10000 92 09:31:10.720000 ioctl(13, 0xc0186201, 0xbe943518) = 0 93 09:31:10.980000 ioctl(13, 0xc0186201, 0xbe943518) = 0 94 09:31:11.480000 dup(-2147483647) = -1 EBADF (Bad file descriptor) --> 이부분에서 dup의 인자로 쓰레기값이 넘어가는듯합니다. 95 09:31:12.050000 mmap2(NULL, 0, PROT_READ|PROT_WRITE, MAP_SHARED, -1, 0) = -1 EBADF (Bad file descriptor) 96 09:31:13.010000 mmap2(NULL, 0, PROT_READ, MAP_SHARED, -1, 0) = -1 EBADF (Bad file descriptor) 97 09:31:16.210000 dup(-1) = -1 EBADF (Bad file descriptor) 98 09:31:16.700000 getpid() = 707 99 09:31:18.840000 getuid32() = 10000 100 09:31:20.890000 ioctl(13, 0xc0186201, 0xbe9435a8) = 0 101 09:31:21.870000 ioctl(13, 0xc0186201, 0xbe9435a8) = 0 102 09:31:22.820000 dup(-2147483647) = -1 EBADF (Bad file descriptor) 103 09:31:24.690000 mmap2(NULL, 0, PROT_READ|PROT_WRITE, MAP_SHARED, -1, 0) = -1 EBADF (Bad file descriptor) 104 09:31:25.420000 mmap2(NULL, 0, PROT_READ, MAP_SHARED, -1, 0) = -1 EBADF (Bad file descriptor) 105 09:31:26.960000 dup(-1) = -1 EBADF (Bad file descriptor) 106 09:31:27.120000 --- SIGSEGV (Segmentation fault) @ 0 (0) --- 107 09:31:27.780000 sigaction(SIGUSR1, {SIG_IGN}, {SIG_DFL}, 0x9e360) = 0 108 09:31:29.360000 gettid() = 707 109 09:31:29.850000 socket(PF_FILE, SOCK_STREAM, 0) = 14 110 09:31:30.570000 +++ killed by SIGKILL +++ 위 tracing정보는 driver/binder 밑의 module로 적재했을시구요. 저 seg fault시 red eye가 멈추어버리지만, ./android/binder.c모듈을 적재시에는 계속 무한으로 runtime-> system_server-> com.google... 루프가 반복됩니다. 디버깅 정보가 상당히 부족하지만 조언해주실수 있는 부분이 있다면 부탁드릴께요~ 또한, android internals에서 수집한 정보에 의하면 안드로이드는 /sys/class/input에서 input device를 찾고, /dev/input/event# 에서 input장치의 raw data를 읽어오는것으로 이해를 했는데요. 현재 제보드의 touchscreen은 ads7843을 사용하고 있습니다. internals엔 mmx와 corgi의 calibration 패치만 있더군요. ㅠㅠ 그래서 대폭의 수정작업이 필요할것 같은데.... 일단 ads7843드라이버는 major 11로 /dev/ts로 잡힌상태구요. hexdump를 이용해서 touch시 raw data의 전달 여부와 device자체는 잘 돌아간다고 파악됬구요. 이 rawdata를 안드로이드에 어떻게 전달 해야할지 고민입니다. 또한, sys/class/input에 등록을 해야할 절차가 궁금한데요. 간략하게라도 조언부탁드려도 될런지요? 매번 도움은 못될지언정 도움만 청하게 되네요.ㅠ.... 수고하세요~ |