[해결-자답] sys_write(),sys_read() 시스템콜 수정 후 , 때때로 kernel panic 이 발생합니다. 항상 그런것이 아닙니다. 도와주세요.

jw8704의 이미지

asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf,size_t count)
asmlinkage ssize_t sys_write(unisgned int fd, const char __user *buf,size_t count)

이 두개의 함수를 printk 로 모니터링을 해야할 일이 생겼습니다.

그래서 저는 위 두함수내에 printk 로 buf 와 count 값등을 출력하는 루틴을 삽입했습니다.

그리고 이것들이 원하는 시점에만 작동하도록 하기위해 , if 문을 사용했습니다.

if(my_Flag==1)
{
...코드
}

그리고 my_Flag 는 코드블록을 벗어나 , 전역 범위를 갖도록 코드블록 밖에 int my_Flag=0; 을 선언및 초기화 되어있습니다. 그후 EXPORT_SYMBOL(my_Flag) 을 해줍니다 . 이렇게 EXPORT_SYMBOL 을 해줌으로써 , 추후에 시스템 부팅후 제가 만든 모듈을 이용해서 my_Flag=1 으로 해주고 위의 if 문이 작동되도록 하기위해서 입니다.

그런데 문제발생은 다음과 같습니다.

시스템을 부팅하고 , 저는 모듈을 삽입하지도않았습니다.
그리고 시스템을 잘이용하는데 , 어떤 순간순간마다 시스템이 panic 상태가됩니다.

사실 panic 상태인지는 모르겠습니다. 왜냐하면 panic 시에 출력되는 메시지가 출력되지않습니다. 그냥 시스템이 멎어버립니다.

키보드도안쳐지고 외부에서 접속도안됩니다.

매번 이렇진않습니다. 때때로 이럽니다.

그리고 만약 모듈을 삽입한다면 원하는데로 printk 문이 작동하면서 원하는 값들을 뿌려주기도합니다.

하지만 문제는 모듈을 삽입하든 안하든, 때때로 시스템이 멎어버립니다.

커널 버전은 2.6.18 입니다.

감사합니다.

-------------------------------

해결했습니다.

원인은 다음과 같았습니다.

acpi 관련 오류로 인한것이었습니다. , system 이 어떤 조건에 의해 sleep 가 된후 wake up 이 되질않아 외부에서 ping 또는 ssh 접속 등이 되지않았던 것이었습니다. 게다가 콘솔에서 키보드를 쳐도 모니터 또한 활성화 되지않았습니다.
저는 이것을 제가 sys_write() 를 수정해놨기 때문에 , kernel 쪽에서 panic 이 발생한것은 아닌가 하고 생각했던것이었습니다. 하지만 문제는 panic 가 아닌 wake up 이 되지않았던것이었습니다.

물론 , 아직까지 왜 acpi 가 제대로 작동하지않았는지는 모르겠습니다. 저는 그냥 boot 옵션에 acpi=off 로 하고 , 시스템 부팅후에 ps -ef | grep acpi 으로 acpi 데몬이 실행되지않은것을 확인한후 시스템을 사용해보니
전에 발생하던 panic 이라 오해됐던 문제가 발생하지않았습니다.

이로써 문제를 해결했습니다.

그렇다면 , 왜 기존에는 이러한 문제점과 마주치지않았던것일까요, sys_write() 를 수정하기전에 커널컴파일시에는 acpi 가 포함되었었는지 안되었었는지 일단 모릅니다. 아직 확인해보지않았습니다.
아마 포함되지않았거나 포함되었다면 설정이 잘되어서 포함된것같습니다.

sys_write() 를 수정한후 , 커널을 재컴파일할때 저는 acpi 를 포함하면서 뭔가 잘못한것이고 , 그래서 어떤 특정 조건에 의해 sleep 가된후 wakeup 이 되지않는 문제가 발생된거라고 생각하고있습니다.

위에서 말한 특정조건은 저의경우 일정시간동안 시스템을 사용하지않은것을 말하며 , 그시간은 10분에서 길게는 2틀 정도로 나타났었습니다. 정확히 시간을 재어보지는않았습니다.

안녕히계세요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.