서적에 관한 질문 및 오류 등을 문의 할 수 있으며, 저자로부터 직접 답변을 받을 수 있습니다.
안드로이드 아이스크림 버전에서 테스트를 하고 있습니다
빌드 후에 생성되는 libled.so, ledservice, libledclientjni.so 세개의 파일을 빌드후에 타겟보드에서 테스트를 하였는데요
먼저 디바이스드라이버를 insmod하고 간단한 테스트 프로그램을 만들어서 커맨드명령으로 led on/off 를 테스트 하였습니다.
디바이스드라이버를 lsmod 한후에 ls /dev/gpio가 생성되있는것을 확인한 상태입니다.
다음으로 빌드한 ledservice를 실행하려 는데 아래와 같이 ledservice프로그램이 바로 죽어 버리더라구요
-----------------------------
root@android:/system/bin # ./ledservice &
[1] 2086
root@android:/system/bin #
[1] + Done (1) ./ledservice
-----------------------------
libled/ledService.cpp 파일 내용중에
LEDService::LEDService()
{
LOGE("LEDService created.");
mNextConnId = 1;
pthread_key_create(&sigbuskey, NULL);
//fd = open("/dev/gmod", O_RDWR);
fd = open("/dev/gpio", O_RDWR);
LOGE("fd : %d\n",fd);
if (fd < 0)
{
LOGE("open gmod driver failed 2\n");
exit(1);
}
}
이렇게 수정하였습니다
드라이버를 misc_register 이용하여 등록하였는데 insmod 했을 경우 /dev/misc 폴더가 없더라구요
그래서 open에서 misc 관련 부분은 주석처리하고 하였는데요
프로그램이 바로 죽어 버리는게 BBinder::onTransact()에서 안걸리는것 같은데요 제가 어디부분을 확인해봐야 하나요?
바인더 등록할때 addService(String16("hybridego.LED") 명칭은 확인하였습니다.
device driver가 제대로 안되어서 그런 듯 합니다.
gpio관련 driver는 개발보드에 따라 달라집니다.
해당 드라이버가 우선적인데, 개발보드에 맞춰서 수정해야 합니다.
driver open에 문제가 생겨서 exit(1) 함수가 호출된 듯 합니다.