본문으로 바로가기

터미널 상태에서 프로그램을 돌렸다면, 당연히 디버그가 출력되겠지만...

데몬과 같이 init.d 스크립트에서 자동 실행되는 프로그램을 디버깅할 때 디버그 출력이 제대로 안되는 경우가 있어, 짜증나서 강제로 tty에 써서 출력을 하는 방법을 찾았다.


dfb fusion 관련하여 디버깅을 하는데...

두 프로세스가 dfb를 fusion으로 공유해서 사용하는데 input device가 제대로 되지 않는 문제가 있어 디버그를 출력하려고 해도 당췌 되지 않아... syslog를 사용하려고 했으나 타겟보드에 syslog deamon 미설치로 안되서, /tmp 파일에 로그 파일을 만들어 디버그를 출력하였으나 nfs 상태에서는 잘 되는데, standalone으로만 실행시키면 로그 파일이 생성이 안되서 도저히 안되겠다 싶어 다음과 같이 강제로 시리얼 장치에 데이터를 써서 출력하도록 하였다.


다소 무식한 방법이지만, 다음과 같이 하면 리눅스 환경에서 강제로 출력을 할 수 있다.

int main(int argc, char* argv[])
{
	system("echo \"debug message\"\r\n > /dev/ttyS0");
}

sprintf() 함수를 사용하면 좀 더 나이스한 출력문도 작성이 가능하다.

int main(int argc, char* argv[])
{
	char string[256];
	
	memset(string, 0x00, sizeof(string));
	sprintf(string, "echo key = %s\r\n > /dev/ttyS0", name);
	system(string);
}

위와 같이 무식하게 시리얼로 출력하게 하여 문제를 수정하였다.

문제는 dfb에서 master fusion이 아닌 인스턴스 생성은 input core device를 포함한 core module을 initialize 하지 않는다. 그래서 당연히 module initialize에서 생성한 로그 파일도 생성이 안되었던 것이다.


로그 파일 생성 및 로그가 제대로 작성되는지 확인하기 위해 nfs 상태에서 master fusion을 사용하여 생성했던 dfb는 당연히 로그가 생성되지만, 두 프로세스간 dfb를 공유할 때는 로그 생성 프로세스가 master fusion으로 dfb를 생성하여 사용하는 것 아니였다. -.-;;


암튼 오늘 이것 때문에 삽질을 엄청하였도다... 망할 dfb... dfb를 제대로 모르는 것이 내 잘못이지... ;;

'개발일기 > 팁 & 테크' 카테고리의 다른 글

Local IP 알아내기  (0) 2018.09.19
우분투 18.04 개발 환경 구성  (0) 2018.08.23
데몬에서 강제 프린트 방법  (0) 2018.08.09
GStreamer 1.0 개발환경 구성  (0) 2018.08.05
lirc - ir record 방법  (0) 2018.06.29
Linux Platform Debug 메시지 제거  (0) 2018.03.12

댓글을 달아 주세요