OpenWrt 및 교재 Q&A

dbg 출력 관련 질문입니다.

페이지 정보

작성자 한석정 작성일18-01-24 20:25 조회2,739회 댓글5건

본문

안녕하세요.

backfire 커널 소스를 보고있는데
dbg() 출력 메시지 보는 방법을 모르겠네요.

커널 생성할때 Compile pacages with debugging info 메뉴를 설정하면 나올것 같았는데
dmesg로는 확인이 안되네요.
구글링을 해봐도 잘 찾질 못하겠구요.

그리고, 커널 함수 호출 순서나 관계같은부분을 tracing 해보고 싶은데
backfire에서 사용할 수 있는 debugging tool 이나 trace tool 이 있나 궁금하네요.

혹시 아시는분 있으면 답변 부탁드립니다.

// 관리자 2018-01-24: 13-08-30 06:41 에 작성된 글입니다

댓글목록

박우재님의 댓글

박우재 작성일

컴파일 할때 플래그를 집어 넣으시면 메시지가 전부 뜨게 할수 있는데요.
openwrt 커널은 컴파일 할때 V=99 를 집어 넣으시면 Warn, Error 메시지를 포함해 전부다 화면에 출력이 됩니다.

// 관리자 2018-01-24: 13-08-31 09:57 에 작성된 글입니다

한석정님의 댓글

한석정 댓글의 댓글 작성일

답변감사드립니다.

근데 제 요지는 컴파일중에 message를 보는것이 아니라,
런타임중에 커널메시지처럼 (dmesg, printk) 보고싶다는 이야기었습니다.

dbg함수로 출력되는 메시지는 runtime 중에 볼수 있는 메시지가 아닌지요?

// 관리자 2018-01-24: 13-09-02 02:57 에 작성된 글입니다

권희웅님의 댓글

권희웅 작성일

dbg는 실제로는 printk일 것입니다.
아마도 커널에서 정의한 것이 아니라, 각각의 모듈에서 별도로 지정하여 사용하는 경우가 많습니다.
#ifdef __DEBUG__ 
#define dbg(...) printk(...)
#else
#define dbg(...)
#endif 

와 같은 식으로 정의된 경우가 많습니다.

dmesg에서 보고자 할 경우 printk를 사용하시면 됩니다. dbg의 경우 각각의 모듈 옵션에 따라서 출력이 되거나 안될 수 있습니다.

일반적으로 printk를 수행하면 kernel log buffer에 저장이 됩니다. 그리고 dmesg는 이 내용을 보여주도록 되어 있습니다. 만일 일반적인 파일에 저장하여 볼 경우에는 klogd와 syslogd를 사용하면 됩니다 klogd는 syslogd에 같이 포함이 되어 있으니 참고하시기 바랍니다. syslogd를 사용하는 경우 local file뿐만이 아니라 원격지로도 printk의 내용을 전달이 가능합니다.

몇가지 참고로 말씀드리면 printk의 경우는 일반적으로 serial console인 경우에만 화면에 실시간으로 출력이 됩니다. telnet으로는 실시간 출력이 되지 않습니다. 만일 보고자 할 경우 syslogd를 사용하여 log를 파일에 저장하고 tail 명령으로 보는 방법이 있습니다.
참고하시기 바랍니다.

// 관리자 2018-01-24: 13-09-05 00:58 에 작성된 글입니다

한석정님의 댓글

한석정 댓글의 댓글 작성일

답변 감사드립니다.
많은 도움 되었습니다~^^

// 관리자 2018-01-24: 13-09-05 08:20 에 작성된 글입니다

한석정님의 댓글

한석정 작성일

답변감사드립니다. 덕분에 해결했습니다.
커널 컴파일시 Compile pacages with debugging info 를 설정하면 값이 출력되는게 맞는데,
공유기 성능이 낮아서 그런지 출력되다가 혹은 모듈삽입중에 멈추는 현상이 발생했었습니다.

코드를 더 찾아보니 모듈 파라미터로 debug라는 변수가 있는데
모듈 삽입시 혹은 코드에 true로 수정을 해주면 모듈별로 dbg함수 출력을 활성화 할 수 있습니다.
insmod cp210x.ko debug=1
출력된 메시지는 런타임에 dmesg 명령으로 확인 할 수 있습니다~

// 관리자 2018-01-24: 13-09-12 01:47 에 작성된 글입니다