회원 및 비회원 모두 열람이 가능합니다. 최대 업로드 가능한 용량은 20MB 입니다.
미리 말씀드리자면 이 내용을 팁이나 강좌로 안올리는 이유는..
아직 완벽하게 정리가 된게 아니라.
어느 정도의 가능성을 확인한 상태에서 올리는 거라..
일단 자유게시판에 올립니다.
오드로이드를 가지고 이것 저것 시도해볼 요량으로..
오드로이드에 탑재된 플랫폼을 이리 저리 뜯어보던중에..
플랫폼을 뜯어서 조금 고쳐서 확인하려고 하니..
메모리 카드를 빼서 연견해서 기존 데이타 지우고 다시 써놓고..
다시 오드로이드에 넣고 부팅시키고... 하는 과정이 너무 번거롭던 차에..
이제현님 글과 주재경님의 글로 usb를 통한 NFS 환경울 구성했습니다.
이렇게 구성을 하면 문제가 발생되는 부분이 코드내에서 LOG를 뿌려주던 것들을
LogCat을 통해 확인 할 수 없다는 문제가 발생이 되었습니다.
USB가 하나 밖에 없는 차에 그걸 usbnet을 사용하였으니.. adb를 통한
디버깅은 불가능하게 되었죠.
이걸 어떻게 해야하나 고민하다가 부트 메세지가 뿌려지는 시리얼 콘솔로 로그를
나오게끔 하면 되겠다라고 생각하고..
이리 저리 구글링을 해본 결과
저와 같은 상황에 놓인 사람들이 별반 없는지 확실한 솔루션이 나오질 않았습니다.
그래서 소스코드를 디벼파던 중..
init 이라는 프로세스가
./system/core/init/util.c 안에
void log_int(void) 라는 함수에서..
내부적으로 "/dev/__kmsg__" 라는 디바이스 파일을 통해 시리얼 콘솔로 자체로그를
출력하는 걸 알았습니다.
그래서 들었던 생각이..
이 부분을 이용해서 시리얼 콘솔 로그 데몬을 만들면 되겠다라고생각하고..
서비스를 만들어서..
void _koim_log_init(void)
{
static const char *name = "/dev/__koimmsg__";
if (mknod(name, S_IFCHR | 0600, (1 << 8) | 11) == 0)
{
koim_log_fd = open(name, O_WRONLY );
fcntl(koim_log_fd, F_SETFD, FD_CLOEXEC);
unlink(name);
}
}
위와 같이 디바이스를 만들어서 열고..
해당 파일 디스크립터로 write를 했더니.. 로그가 잘 뜨는군요.
이제 다른 프로세스에서 메세지를 보내도 제대로 출력되는지 확인이 되면..
init.%PRUDOCT%.rc에 해당 데몬을 온 오프시키는 키워드를 추가해서
처리할 생각입니다.
현재까지는 시리얼 콘솔로 로그가 출력되는 것만 확인했는데..
지금보니 별것도 아닌데...
해당 플렛폼의 내부구조를 모르니 역시 헤맬일 수 밖에 없군요..
그럼 모두들 수고하십시요..
고임
확인해봤더니..
결국 제가 잘못 알고 있었던 거군요..
그런데 궁금한 점이
rc 파일에
service logcat /system/bin/logcat
oneshot
이런 식으로 추가 했는데.
화면에 출력이 되질 않아서..
그냥 쉘에서 logcat을 직접 실행시켜줬습니다.
그랬더니.. 실시간으로 화면에 출력이 되는군요..
rc 파일에 작성한 부분이 뭔가 잘못된 거라도 있는 걸까요?
그리고 또 문제점이 발생된게.. logcat이 실행이 되면..
다른 쉘명령은 못내리는 게 맞는 건지..
화면에 실시간으로 출력되는건 좋은데..
쉘명령이 안먹네요..
해결책을 찾았다는 즐거움과 동시에 문제점이 또 생기는군요..
리눅스도 그렇고 임베디드쪽도 처음해보는 거라..
상식적인 부분에 있어서 부족하니 쉽진 않네요.
고임
좋은 방법 감사합니다.
그런데, 디버그 보드를 연결하여 시리얼 포트로 logcat을 볼수 있습니다.
NFS는 디버그 보드의 TTA 커넥터를 통해 USB로 연결하면 되고요~~
이 방법이 좀 더 간단할것 같습니다.