2017-05-13 7 views
2

리눅스 트리의 디바이스 드라이버 소스에서, 나는 dev_dbg(...)dev_err(...)을 보았는데, 어디에 기록 된 메시지를 찾을 수 있습니까?dev_dbg는 어디에 로그를 쓰나요?

하나의 참고 자료에 #define DEBUG을 추가하는 것이 좋습니다. 다른 reference에는 동적 디버그와 debugfs가 관련되어 있습니다.

답변

2

dev_dbg()은 컴파일 플래그에 따라 dynamic_dev_dbg(), dev_printk() 또는 no-op로 확장됩니다. vprintk_emit()를 호출

#if defined(CONFIG_DYNAMIC_DEBUG) 
#define dev_dbg(dev, format, ...)     \ 
do {             \ 
    dynamic_dev_dbg(dev, format, ##__VA_ARGS__); \ 
} while (0) 
#elif defined(DEBUG) 
#define dev_dbg(dev, format, arg...)   \ 
    dev_printk(KERN_DEBUG, dev, format, ##arg) 
#else 
#define dev_dbg(dev, format, arg...)       \ 
({                \ 
    if (0)             \ 
      dev_printk(KERN_DEBUG, dev, format, ##arg);  \ 
}) 
#endif 

dynamic_dev_dbg()dev_printk() 전화 dev_printk_emit().

printk() 만 수행하면이 매우 동일한 기능이 일반 모드에서 호출됩니다. dev_err()과 같은 나머지 기능은 결국 같은 기능으로 끝납니다.

따라서, 분명히, 버퍼는 모두 커널 인레 날린 버퍼이다.

끝에 기록 된 메시지는 커널 로그 레벨 값 (커널 명령 라인을 통해 또는 procfs의 통하여 변경 될 수 있으면)

  1. 현재 콘솔에 프린트 여기서 특정 메시지 KERN_DEBUG 충분히 높으면된다.
  2. dmesg 명령을 실행하여 읽을 수있는 내부 버퍼.

버퍼에 공간이있는 한 2의 데이터는 유지됩니다. 제한적이고 원형이므로 새로운 데이터는 이전 데이터를 선점합니다.