서적에 관한 질문 및 오류 등을 문의 할 수 있으며, 저자로부터 직접 답변을 받을 수 있습니다.

디바이스드라이버를 이용하여 LED를 동작하려 했는데요 우선적으로 binder가 정상 동작하는지 알아보려고 하는데요

아래와 같은 문제가 생겼습니다.


자바어플 라디오버튼에서 클릭을 누르면 커널에서 0 이나 1값을 printf()로 출력해볼려고 하는데요

전에 문제라고 생각되던 디바이스드라이버관련한것은 주석처리하였고

터미널에서 상태확인하기위해 LOGE에 printf()를 추가했습니다.


** ledService.cpp

static int fd;
    static struct sigaction oldact;
    static pthread_key_t sigbuskey;

    int LEDService::instantiate()
    {
        LOGE("LEDService instantiate.");
        printf("LEDService instantiate.\n");
        int r = defaultServiceManager()->addService(String16("hybridego.LED"), new LEDService());
        LOGE("LEDService r = %d\n", r);
        printf("LEDService r = %d\n", r);//ok
        return r;
    }


LEDService::LEDService()
    {   
        LOGE("LEDService created.");
        printf("LEDService created.\n");//ok
        mNextConnId = 1;
        pthread_key_create(&sigbuskey, NULL);
    }

status_t        LEDService::onTransact(uint32_t code, const Parcel & data, Parcel * reply, uint32_t flags)
    {
        printf("onTransact\n"); <----여기까지 터미널에서 찍히는것을 보려고합니다.
        int err;
        int msgtype = 0;
        switch (code)
        {

           .......


** ledservice.cpp

int
main(int argc, char **argv)
{
    sp < ProcessState > proc(ProcessState::self());
    sp < IServiceManager > sm = defaultServiceManager();
    LOGI("ServiceManager: %p", sm.get());
    printf("ServiceManager: %p\n", sm.get());
    LEDService::instantiate();
    LOGE("ledservice started");
    printf("ledservice started\n");
    ProcessState::self()->startThreadPool();
    IPCThreadState::self()->joinThreadPool();
    printf("ledservice end\n");
}


**ledClient.cpp

namespace       android
{
    //sp binder;
    sp < IBinder > binder;
    void            LED::setN(int n)
    {
        Parcel          data,
                        reply;
                       
                        data.writeInt32(getpid());
                        data.writeInt32(n);
                        binder->transact(0, data, &reply);
                       
                        int32_t d1 = data.readInt32();
                        int32_t r1 = reply.readInt32();
                       
                        LOGE("data = %d, reply = %d", d1, r1);
                        return;
    }

    const void      LED::getLEDService()
    {
        sp < IServiceManager > sm = defaultServiceManager();
        binder = sm->getService(String16("hybridego.LED"));
        LOGE("LED::getLEDService %p\n", sm.get());
        if (binder == 0)
        {
            LOGW("LEDService not published, waiting...");
            return;
        }
    }

};                              // namespace

**led.cpp

jint Java_org_test_led_LEDActivity_ledfromJNI (JNIEnv * env, jobject thiz, jint led) {
    int a=led;
    LED *gg = new LED;
    gg->setN(a);

    return a;
}

------------------------------------

위소스상태에서 빌드를 한후에 ledservice를 실행시키고


root@android:/system/bin # ./ledservice
LEDService instantiate.
LEDService created.
LEDService r = 0
ledservice started


여기까지 터미널에 출력이 됩니다.

후에 어플을 실행하여 On 버튼을 누르면 Unfortunatley, app has stopped. 메시지가 뜨면서 어플이 종료


터미널에 아래메시지가 추가로 출력이 되더라구요

binder: 2488: binder_alloc_buf, no vma
binder: 1305:1626 transaction failed 29201, size 104-0
binder: 2488: binder_alloc_buf, no vma
binder: 1305:1626 transaction failed 29201, size 104-0


마지막 자바어플이 동작이 이상한지 테스트를 해봤는데요 

LED_Control(a) 함수를 주석해서 테스트를 하면 라디오버튼이 정상동작되는것을 확인했습니다.


OnClickListener radio_listener = new OnClickListener() {
       
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            name = name + ": "+Integer.toString(a);
            Toast.makeText(MainActivity.this, name, Toast.LENGTH_SHORT).show();
            LED_Control(a); <--------해당라인 주석해제 후에 어플만 실행하면 정상동작잘됨
           
        }


LED_Control 연결되는 함수를 봤는데요

static{
        System.loadLibrary("ledclientjni");
    }
   
    private native int ledfromJNI(int on_off);<-----JNI 함수에서 먼가 작동이 안되는것 같은생각인데요
   
    public void LED_Control(int a){
        int k = ledfromJNI(a);
        Log.d("LED", "result : " + k);
       
    }


    };


----------------------------------------

이렇게 진행하고 있는데 제가 놓친 부분이 있을까요?



biokk

2015.01.22 00:04:21
*.7.19.42

binder_alloc_buf, no vma 관련검색하면 binder.c 소스에서 메시지를 출력하는것 같은데
해당 바인더 메모리가 할당되지 않은 상태인것 같은데..

645 static struct binder_buffer *binder_alloc_buf(struct binder_proc *proc, 646 size_t data_size, 647 size_t offsets_size, int is_async) 648 { 649 struct rb_node *n = proc->free_buffers.rb_node; 650 struct binder_buffer *buffer; 651 size_t buffer_size; 652 struct rb_node *best_fit = NULL; 653 void *has_page_addr; 654 void *end_page_addr; 655 size_t size; 656 657 if (proc->vma == NULL) { 658 pr_err("%d: binder_alloc_buf, no vma\n", 659 proc->pid); 660 return NULL; 661 }

biokk

2015.01.22 01:48:33
*.7.19.42

이클립스 logcat을 보니깐

java.lang.UnsatisfiedLinkError : ledfromJNI 라고 나오는데


static{
        System.loadLibrary("ledclientjni");
    }

호출이 제대로 안되는게 아닐까요?

전호철

2015.01.25 20:24:55
*.172.200.192

그렇게 나오면 libledclientjni.so를 못찾는 것 같은데요.

라이브러리 build 해서 제대로 넣어주신건 맞나요?

List of Articles
번호 제목 글쓴이 날짜 조회 수sort
103 PDK를 이용하여 안드로이드 프레임워크 so파일 참조에 관해서 질문있... [7] 김바람 2013-03-07 26815
102 예제를 따라하던 중 Android.mk 파일로 APK파일 생성 후 설치시 ... [6] 김바람 2013-03-05 12338
101 ndk 38페이지 질문_repo file [1] 제임스59 2013-08-28 12060
100 안드로이드의 모든것 분석과 포팅 교재 관련 [2] nexus26 2011-07-05 10588
99 [Linux와 Android] 001 - 임베디드 시스템에 대하여 file 고도리 2011-06-21 9496
98 다시 질문 드립니다.ㅜㅜ apk 설치문제입니다. [3] 여월광 2014-03-07 9132
97 책 관련해서 질문이 있습니다. [1] winpih 2011-07-13 9036
96 안드로이드 init의 특징에 대해 질문있습니다. [2] 얼사마 2011-07-12 9024
95 117쪽 ueventd 실행 부분.. [1] 홍순민 2011-08-30 8855
94 475페이지 그림 외 건의 사항.. [2] 장병남 2011-07-22 8635
93 [Linux와 Android] 002 - UNIX/Linux system 개요 file 고도리 2011-06-22 8626
92 [Linux와 Android] 002 - UNIX/Linux system 개요(Continue...... 고도리 2011-07-02 8573
91 p186. Gingerbread 센서 구조의 간략한 설명 요청드립니다. [3] forone 2011-08-25 8432
90 NDK를 이용한 camera 제어 예제에 대해 문의 드립니다. [7] 죽유 2013-01-11 8050
89 chapter7 안드로이드 오디오 서브시스템 에서 궁금한게 있습니다 [1] 가쓰비 2011-12-16 8017
88 개발환경 설정 중 문의사항입니다. file [1] 정바타 2011-10-14 7907
87 아래 [SDL 예제관련 에러 질문입니다.] 이어서... [3] 민민 2012-12-26 7759
86 책이 나온내용이지만 좀 다른예기일수도 잇네요 [1] 가쓰비 2011-12-21 7578
85 RGB 부분에 대해서 질문이 있습니다. [1] ys2cdh 2012-01-05 7382
84 아..권한 하고 마운트 에서 막혀버리네요..ㅜㅜ [1] 여월광 2014-03-09 7362

사용자 로그인