커널 패닉이 일어 나는 순서 갈켜 주세요..

ATOM의 이미지

커널 패닉이 어떻게 해서 일어나는지 갈켜 주세요..

이렇게 이야기 하니 너무 광범위 하게 이야기 하는것 같은데..

오류가 일어나서 커널에서 일어나는 과정이 궁금해서 이렇게 질문을 올립니다.

오류가 일어 나는 원인은 다양하지만 일어 나고 나서 어떤 경로를 통해서 오류가 나는지에 대해서 궁금하네요...

자료도 괜찮고 답변도 감사히 보겠습니다.

좋은 하루 되세요~!!

poplinux의 이미지

수억 가지 원인과 경로가 있습니다.

가장 흔하게 일어나는 일은 역시 메모리 참조 관련한 일입니다.

제가 겪었던 일을 예로 들면, 신입때 선임자가 진행하던 프로젝트를 맡게 되었습니다. 그 프로젝트는 원인을 알 수 없는 버그로 인해서 잠시 중단이 된 상태였는데 그건 바로 장비가 기동한 후 얼마 안 지나면 커널 패닉이 발생하면서 죽는 문제였습니다. 죽는 시간은 중구난방이었지요. 한달동안 고생해서 결국 원인을 찾았는데 간단한 문자 디바이스 드라이버 소스에 문제가 있었습니다. 버퍼에 카운트를 증가시키는 변수가 있었는데 한계값이 되면 초기화 시켜주는 부분이 없어서 오버플로우가 발생한 것이었습니다.

그 후로도 드라이버 작성할 때 보면 메모리 맵을 잘못 잡아 주거나 혹은 에러 처리를 확실하게 안 해서 메모리가 할당 안 된 상태에서 접근하려고 한다던가 하는 문제로 커널 패닉이 많이 발생했었습니다.

한가지 조언 드리면, 백문이불여일타라고 프로젝트를 수행하면서 계속 시행착오를 경험하는게 도움이 될것 입니다.

========================
조직 : E.L.D(Embedded Linux Developer/Designer)
블로그 : poplinux@tistory.com
카페 : cafe.naver.com/poplinux

임베디드 리눅스 관련 프리렌서 지향

ATOM의 이미지

ㅎㅎㅎㅎㅎ

이러저러한 이유로 패닉이 일어 나는건 알고 잇지만... 이야기 하신데로 수억가지 경로와 방법이 있는데...

이걸 어떻게 알 방법이 없나 싶어서 글을 올렸습니다.

제가 지금 다시 생각해도 너무 무모한 이야기 엿던것 같네요..ㅎㅎㅎ

poplinux의 이미지

아는 만큼 보인다고, 예전엔 커널 패닉 메시지가 나오면 속수무책이었는데 조금씩 알아가니까 어느정도 디버깅이 가능해 지더군요. 공부엔 왕도가 없습니다. 닥치는 대로 공부하는게 왕도입니다.

========================
조직 : E.L.D(Embedded Linux Developer/Designer)
블로그 : poplinux@tistory.com
카페 : cafe.naver.com/poplinux

임베디드 리눅스 관련 프리렌서 지향

powerson의 이미지


어떻게 보면 kernel debugging 정보를 어떻게 얻느냐에 대한 질문과 비슷하다고 생각되는데, 맞나요? 암튼 그렇게 생각한다고 가정하면, Linux Device Driver 책에 debugging 정보를 어떻게 얻는지 그리고 kernel debugger가 몇개 있는데 이러한 것들이 뭐가 있는 지 등에 대해서 검색해보시면 되지 않을까요? 또한 직접 panic 함수 처리를 분석해보시는 것도 도움이 될거 같습니다.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

Hyun의 이미지

수억가지 중에서 BUG();나 panic(); 호출에 의한 패닉도 있죠...

커널 초기 root를 찾는데 실패했거나 init을 실행하지 못했거나...(혹은 init이 죽었거나)
혹은 커널내부 자료구조에서 예상치 못한 상황에서 BUG() 같은게 많이 숨어있더군요...

ironiris의 이미지

# man bug
# man panic

이라고 입력해봤습니다... ㅠㅠ

댓글 달기

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 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 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>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 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>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 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>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.