현재 froyo 안드로이드 어플에서 버튼을 누르면 NDK를 통해서 C 함수를 호출하고

이 C 함수에서 open으로 /dev/led 를 open 해 ioctl로 커널 드라이버를 제어하는 동작을

확인하고 있는 중입니다.

 

이 과정에서 아래 링크를 참고하여 NDK 계산기 샘플을 활용해서 테스트 중인데...

http://blog.naver.com/jupiterseas/60090691851

 

지금 당황스러운게 위 링크를 따라서 하면 계산기가 NDK를 통해 잘 동작하고 있습니다.

 

문제는 NDK 를 통해 so 모듈로 추가되어 C 함수가 실행되는 simpleCalculator.c 에서

printf 나 커널을 제어하기 위한 open, ioctl 등이 동작을 안하는것 같습니다.

 

당황스러운건 C 함수쪽 소스가 이렇게 되어있는데

 

 jint Java_com_simple_calculator_CalculatorMethods_AddNumbers(JNIEnv* env, jobject this, jint front, jint back)
{
    led_on();
    printf("%d + %d = %d\n", front, back, (front + back));

    return (front + back);
}

 

다른곳에 선언된 led_on 함수입니다.

 

void led_on(void) 
{ 
    int iFd, res = 0;
    iFd = open("/dev/led", O_RDWR);
    if (iFd < 0) {
        printf("[LED] ERROR: Can't open device\n");
        goto ERR_FD;
    }
    else
    {
        printf("[LED] dev open\n");
    }

    res = ioctl(iFd, IOCTL_LED_ON, NULL);
    printf("[LED] Control ON\n");

    if (res == E_FD)
        goto ERR_FD;

ERR_FD:
    close(iFd);
} 


led_on의 경우는 개별적으로 gui 없는 리눅스 테스트 어플을 만들어서

커널 드라이버가 동작하는걸 확인한 소스입니다. (/dev/led를 open, ioctl 동작확인)

 

커널 드라이버를 제어하기 위한 led_on()이랑 printf 는 묵묵부답이면서

return 으로 전달하는 계산식은 정상적으로 리턴해서

안드로이드 App에는 계산기 결과가 정상출력이 되고 있습니다.

 

이런말은 NDK를 통해 C 함수도 잘 연결되었고 처리도 잘 되고 있는데

왜 제가 원하는 C 함수가 동작하지 않는건지 원인을 모르겠습니다.

C 함수의 printf 로그조차 안찍히니 뭐가 문제인지도 파악이 안되고 환장할것 같아요. ㅠ_ㅠ

 

커널 드라이버를 제어하기 위해 /dev/led 를 open, ioctl 하려면

뭔가 다른걸 또 거쳐줘야 하는건지 조언 부탁드립니다.