커널 패닉 메시지

MythRab의 이미지

커널 패닉이 나면 아래와 같이

39 journal-601, buffer write failed
40 kernel BUG at prints.c:334!
41 Unable to handle kernel paging request at virtual address 00000000,
epc == 801ae
42 f3c, ra == 801aef3c
43 Oops in fault.c::do_page_fault, line 206:
44 $0 : 00000000 1000fc00 0000001c 00000001 802d25f0 00000001 00000001
0000 0000
45 $8 : 00000000 00000000 8032fd63 00000000 802edc1a fffffff9 8032fd1a
ffff ffff
46 $16: 802fd9b0 832ad000 00000000 832ad000 00000001 00000009 00000001
0000 0000
47 $24: 0000000a 00000002 8032e000 8032fe58 c01adb9c 801a ef3c
48 Hi : 00c643fd
49 Lo : f14a837d
50 epc : 801aef3c Not tainted
51 Status: 1000fc03
52 Cause : 0080000c
53 Process kupdated (pid: 6, stackpage=8032e000)
54 Stack: 80290158 80290170 0000014e ffffffff 00000008 c01adb74 801bc9d4
55 801bc8fc 8032fe90 80291904 8032fe58 ffff00ff 825bf180 c01adba8 00000000
56 00000024 832ad000 00000025 0000146b 825bf180 8077a000 c01cff9c 00000000
57 801c117c 8351b140 8013c060 00000024 832ad000 00000002 00000004 00000024
58 832ad000 00000024 42651fc1 00000001 802d4958 806b1ddd 00ff0000 00000003
59 801c0074 ...
60 Call Trace: [<80290158>] [<80290170>] [<801bc9d4>] [<801bc8fc>]
[<8029 1904>]
61 [<801c117c>] [<8013c060>] [<801c0074>] [<80119054>] [<802925d0>]
[<c013 3a34>]
62 [<801ab628>] [<8014139c>] [<8014048c>] [<80140480>] [<80140990>]
[<8014 0764>]
63 [<80104730>] [<80104720>]
64
65 Code: 24a50170 0c044f55 2406014e <ac000000> 12200005 00000000 0c04ed
a9 9624
66 0008 0806bbd8

또는,

81 Unable to handle kernel paging request at virtual address 00000008,
epc == c0133
82 b34, ra == c0134110
83 Oops in fault.c::do_page_fault, line 206:
84 $0 : 00000000 802d0000 c0133b0c c0151a10 c01510f0 c0151a10 00000023
ffff ffb9
85 $8 : 0000004a 00000007 00000000 000000f5 00000050 0000001f 8314d83c
c015 1a98
86 $16: 00000000 1000fc01 c01510f0 000657d0 c0151a10 8010fa68 c0133fd4
c013 43dc
87 $24: c0151ab0 0000000f 82ea0000 82ea1f30 801105c8 c013 4110
88 Hi : 00000000
89 Lo : 00000006
90 epc : c0133b34 Not tainted
91 Status: 1000fc03
92 Cause : 00800408
93 Process ndiod (pid: 375, stackpage=82ea0000)
94 Stack: 000bcb67 00000000 00000010 00000000 c01510f0 1000fc01 c01510f0
95 000657d0 00000000 8010fa68 c0134110 c0134094 c01510f0 000657d0 00000000
96 8010fa68 c0133fd4 c01343dc c0133010 c0135284 00000000 c013ee30 82ea03f4
97 82ea0000 c0151110 00000000 c0134f9c c01510f0 00000100 00000000 00000000
98 00000000 c0151030 80113d54 c013a36c 80104730 c013a36c c0135460 36315053
99 204e3430 ...
100 Call Trace: [<c01510f0>] [<c01510f0>] [<8010fa68>] [<c0134110>]
[<c013 4094>]
101 [<c01510f0>] [<8010fa68>] [<c0133fd4>] [<c01343dc>] [<c0135284>]
[<c013 ee30>]
102 [<c0151110>] [<c0134f9c>] [<c01510f0>] [<c0151030>] [<80113d54>]
[<c013 a36c>]
103 [<80104730>] [<c013a36c>] [<c0135460>] [<80104720>]
104
105 Code: afb00010 00a0a021 8e900008 <8e120008> 8e420014 14400009 008098
21 0240
106 2821 3c02c013

와 같이 규칙적인 메시지가 나오는데요.

16진수로 된 것들은 주소다. 이것과 epc 밖에 몰라서 어떻게 해석을 해야 할지 모르겠습니다. :oops:
이런 메시지를 해석해 달라는 물음은 많은데 어떻게 해석해야 한다는 내용은 없는 것 같습니다.
위의 내용들중 주소 앞에 있는 약자의 의미는 무엇이며 어떻게 해석을 해야 하는지(/proc/ksyms를 보면 된다고 하는데 비슷한 주소랑 관계없는 것도 많고 보는 방법을 잘 몰라서....) 방법을 알고 싶습니다.

flyduck의 이미지

가장 우선적으로 볼 것은 instruction pointer입니다.

> epc : 801aef3c

커널을 컴파일할 때 만들어지는 System.map 파일을 열어서 위 주소가 어느 함수에 들어 있는지 찾습니다.

다음으로 볼 것은 call trace입니다.

> Call Trace: [<80290158>] [<80290170>] [<801bc9d4>] [<801bc8fc>] [<8029 1904>]

똑같은 방법으로 System.map 파일을 열어서 주소를 찾으면 어떤 함수가 차례로 불려왔는지 알 수 있습니다.

이것을 가지고 왜 null pointer 에러가 발생했는지 추측해보세요. 좀 더 정확한 위치를 알고 싶다면 objdump로 커널 이미지 파일을 덤프해서 어셈블리 코드를 보거나 디버깅 정보를 포함해서 커널 이미지 파일을 만들어야 할 것입니다.

Freedom is another word for nothing left to lose,
Nothing doesn't mean nothing if it ain't free.

MythRab의 이미지

답글 감사합니다, 그럼

epc 다음에 나오는 주소가 커널 패닉을 일으키게 한 명령(?)의 주소고,
Call Trace는 epc에 있는 주소가 불리기 까지의 함수 콜을 나타낸다는 것인가요.
그럼 Call Trace 다음에 나오는 주소는 함수 명에 해당하는 주소라고 생각하면 되고(맞나....) 음... 그럼 호출된 순서가 Call Trace : 바로 옆에 나오는 것이 마지막에 호출된 함수의 주소인가요 아님 처음에 호출된 함수의 주소가 되는 것인지...

그런데, embeded라서 그런지 System.map이 없네요 :(

Heading, heading again, again, ... ㅜㅜ 피난다

flyduck의 이미지

커널 컴파일이 끝나면 항상 System.map 파일이 만들어집니다. 여기에는 모든 global symbol의 주소가 들어 있습니다.

Call trace 다음에 나오는 주소는 함수를 부른 곳의 주소입니다. 처음 나오는 것이 가장 최근에 불린 것입니다. 2.6 커널이라면 kernel symbol 정보를 넣으면 자동으로 함수명을 보여주기도 합니다.

Freedom is another word for nothing left to lose,
Nothing doesn't mean nothing if it ain't free.

flyduck의 이미지

커널 컴파일이 끝나면 항상 System.map 파일이 만들어집니다. 여기에는 모든 global symbol의 주소가 들어 있습니다.

Call trace 다음에 나오는 주소는 함수를 부른 곳의 주소입니다. 처음 나오는 것이 가장 최근에 불린 것입니다. 2.6 커널이라면 kernel symbol 정보를 넣으면 자동으로 함수명을 보여주기도 합니다.

Freedom is another word for nothing left to lose,
Nothing doesn't mean nothing if it ain't free.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.