printk 함수에서 KERN_ALERT 가 어떤역할을 하나요??
글쓴이: binoopang / 작성시간: 수, 2008/07/02 - 1:33오전
커널프로그래밍을 공부하고 있습니다 ^^
모듈 프로그래밍에 들어왔는데 printk 함수에 KERN_ALERT 을 넣는데요 ..
이게 어떤역할을 하는지 궁금합니다..
printk(KERN_ALERT "[Module Message] hi hi hi\n");
이런식으로 사용되는데요 ..
그리고 저는 모듈 컴파일하고 insmod를 하면 메시지가 터미널에 바로 출력되지 않습니다
항상 dmesg로 결과를 확인하고 있는데 .. 원래 그런건가요? ^^;;
Forums:
..
터미널쪽 출력에 레벨을 지정하실수가 있습니다. 제가 오래되서 잊어 먹었는데
그 레벨에 따라 터미널로도 혹은 syslog쪽으로만 출력이 가능합니다. 아랫분이
그 위치를 찾아 주실겁니다. 헤헤..
그런데 커널쪽 로그는 정말 디버깅 용도로만 사용하세요. 성능에 지대한 영향을
미칩니다.
우선 터미널상에서는
우선 터미널상에서는 커널모듈을 올렸을때 바로바로 결과가 나타나질 않아요 (쉽게~ X-window에서 마우스 클릭으로 터미널을 열었을때)
이유는 자세히는 모르지만 커널내부에서 버퍼링이 되기 때문이라는것 밖에.... ^^;;;
하나의 터미널을 열어서 tail -f /var/log/messages 로 메세지를 확인하실 수 있으시고요~
KERN_ALERT 는 kernel.h에 정의되어 있어요~
#define KERN_ALERT "<0>" /*action must be taken immediately*/라고 되어 있고요
머 항상출력된다.. 라고 생각하면 될꺼 같네요 ^^
KERN_ALERT 말고도 정의된게 많이 있으니까 kernel.h 내부를 한번 보시는게 도움이 많이 될껍니다
커널 내부에서
커널 내부에서 버퍼링되어서 바로 안 보이는 아니라, sysctl의 printk의 redirect에 따라 printk의 문자열들을 보이게도, 안보이게도 할 수 있는데, 기본적으로 터미널쪽은 '안보이게' 설정되어있기 때문입니다. /etc/sysctl.conf에 보시면 kernel.printk 관련 부분이 있으실 겁니다. 이 부분이 printk의 redirect 관련된 것이니 해당 부분에 대한 자세한 것은 찾아보시면 될 거 같습니다.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
아하~ 답글달면서
아하~ 답글달면서 하나 배웠네요 ^^
감사합니다. ㅎㅎ
댓글 달기