lsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/admin-guide/bug-huntingmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Simplified)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/zh_CN/admin-guide/bug-huntingmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/it_IT/admin-guide/bug-huntingmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ja_JP/admin-guide/bug-huntingmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ko_KR/admin-guide/bug-huntingmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/sp_SP/admin-guide/bug-huntingmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Traditional)uh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhX/var/lib/git/docbuild/linux/Documentation/translations/zh_TW/admin-guide/bug-hunting.rsthKubhwarning)}(hX1此文件的目的是爲讓中文讀者更容易閱讀和理解,而不是作爲一個分支。因此, 如果您對此文件有任何意見或改動,請先嘗試更新原始英文文件。如果要更改或 修正某處翻譯文件,請將意見或補丁發送給維護者(聯繫方式見下)。h]h paragraph)}(hX1此文件的目的是爲讓中文讀者更容易閱讀和理解,而不是作爲一個分支。因此, 如果您對此文件有任何意見或改動,請先嘗試更新原始英文文件。如果要更改或 修正某處翻譯文件,請將意見或補丁發送給維護者(聯繫方式見下)。h]hX1此文件的目的是爲讓中文讀者更容易閱讀和理解,而不是作爲一個分支。因此, 如果您對此文件有任何意見或改動,請先嘗試更新原始英文文件。如果要更改或 修正某處翻譯文件,請將意見或補丁發送給維護者(聯繫方式見下)。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_TW/disclaimer-zh_TW.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubhnote)}(h如果您發現本文檔與原始文件有任何不同或者有翻譯問題,請聯繫該文件的譯者, 或者發送電子郵件給胡皓文以獲取幫助:<2023002089@link.tyut.edu.cn>。h]h)}(h如果您發現本文檔與原始文件有任何不同或者有翻譯問題,請聯繫該文件的譯者, 或者發送電子郵件給胡皓文以獲取幫助:<2023002089@link.tyut.edu.cn>。h](h如果您發現本文檔與原始文件有任何不同或者有翻譯問題,請聯繫該文件的譯者, 或者發送電子郵件給胡皓文以獲取幫助:<}(hhhhhNhNubh reference)}(h2023002089@link.tyut.edu.cnh]h2023002089@link.tyut.edu.cn}(hhhhhNhNubah}(h]h ]h"]h$]h&]refuri"mailto:2023002089@link.tyut.edu.cnuh1hhhubh>。}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjhhhKubh field_body)}(h(:doc:`../../../admin-guide/bug-hunting` h]h)}(h':doc:`../../../admin-guide/bug-hunting`h]h)}(hj#h]hinline)}(hj#h]h ../../../admin-guide/bug-hunting}(hj*hhhNhNubah}(h]h ](xrefstdstd-doceh"]h$]h&]uh1j(hj%ubah}(h]h ]h"]h$]h&]refdoc*translations/zh_TW/admin-guide/bug-hunting refdomainj5reftypedoc refexplicitrefwarn reftarget ../../../admin-guide/bug-huntinguh1hhhhKhj!ubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hhh](j )}(h譯者h]h譯者}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj[hhhKubj)}(h\吳想成 Wu XiangCheng 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> h]h)}(h[吳想成 Wu XiangCheng 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn>h](h吳想成 Wu XiangCheng <}(hjphhhNhNubh)}(hbobwxc@email.cnh]hbobwxc@email.cn}(hjxhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:bobwxc@email.cnuh1hhjpubh> 胡皓文 Hu Haowen <}(hjphhhNhNubh)}(h2023002089@link.tyut.edu.cnh]h2023002089@link.tyut.edu.cn}(hjhhhNhNubah}(h]h ]h"]h$]h&]refuri"mailto:2023002089@link.tyut.edu.cnuh1hhjpubh>}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjlubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubeh}(h]h ]h"]h$]h&]uh1jhhhhhhhKubhsection)}(hhh](htitle)}(h 追蹤缺陷h]h 追蹤缺陷}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhK ubh)}(h2內核錯誤報告通常附帶如下堆棧轉儲::h]h1內核錯誤報告通常附帶如下堆棧轉儲:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh literal_block)}(hX------------[ cut here ]------------ WARNING: CPU: 1 PID: 28102 at kernel/module.c:1108 module_put+0x57/0x70 Modules linked in: dvb_usb_gp8psk(-) dvb_usb dvb_core nvidia_drm(PO) nvidia_modeset(PO) snd_hda_codec_hdmi snd_hda_intel snd_hda_codec snd_hwdep snd_hda_core snd_pcm snd_timer snd soundcore nvidia(PO) [last unloaded: rc_core] CPU: 1 PID: 28102 Comm: rmmod Tainted: P WC O 4.8.4-build.1 #1 Hardware name: MSI MS-7309/MS-7309, BIOS V1.12 02/23/2009 00000000 c12ba080 00000000 00000000 c103ed6a c1616014 00000001 00006dc6 c1615862 00000454 c109e8a7 c109e8a7 00000009 ffffffff 00000000 f13f6a10 f5f5a600 c103ee33 00000009 00000000 00000000 c109e8a7 f80ca4d0 c109f617 Call Trace: [] ? dump_stack+0x44/0x64 [] ? __warn+0xfa/0x120 [] ? module_put+0x57/0x70 [] ? module_put+0x57/0x70 [] ? warn_slowpath_null+0x23/0x30 [] ? module_put+0x57/0x70 [] ? gp8psk_fe_set_frontend+0x460/0x460 [dvb_usb_gp8psk] [] ? symbol_put_addr+0x27/0x50 [] ? dvb_usb_adapter_frontend_exit+0x3a/0x70 [dvb_usb] [] ? dvb_usb_exit+0x2f/0xd0 [dvb_usb] [] ? usb_disable_endpoint+0x7c/0xb0 [] ? dvb_usb_device_exit+0x2a/0x50 [dvb_usb] [] ? usb_unbind_interface+0x62/0x250 [] ? __pm_runtime_idle+0x44/0x70 [] ? __device_release_driver+0x78/0x120 [] ? driver_detach+0x87/0x90 [] ? bus_remove_driver+0x38/0x90 [] ? usb_deregister+0x58/0xb0 [] ? SyS_delete_module+0x130/0x1f0 [] ? task_work_run+0x64/0x80 [] ? exit_to_usermode_loop+0x85/0x90 [] ? do_fast_syscall_32+0x80/0x130 [] ? sysenter_past_esp+0x40/0x6a ---[ end trace 6ebc60ef3981792f ]---h]hX------------[ cut here ]------------ WARNING: CPU: 1 PID: 28102 at kernel/module.c:1108 module_put+0x57/0x70 Modules linked in: dvb_usb_gp8psk(-) dvb_usb dvb_core nvidia_drm(PO) nvidia_modeset(PO) snd_hda_codec_hdmi snd_hda_intel snd_hda_codec snd_hwdep snd_hda_core snd_pcm snd_timer snd soundcore nvidia(PO) [last unloaded: rc_core] CPU: 1 PID: 28102 Comm: rmmod Tainted: P WC O 4.8.4-build.1 #1 Hardware name: MSI MS-7309/MS-7309, BIOS V1.12 02/23/2009 00000000 c12ba080 00000000 00000000 c103ed6a c1616014 00000001 00006dc6 c1615862 00000454 c109e8a7 c109e8a7 00000009 ffffffff 00000000 f13f6a10 f5f5a600 c103ee33 00000009 00000000 00000000 c109e8a7 f80ca4d0 c109f617 Call Trace: [] ? dump_stack+0x44/0x64 [] ? __warn+0xfa/0x120 [] ? module_put+0x57/0x70 [] ? module_put+0x57/0x70 [] ? warn_slowpath_null+0x23/0x30 [] ? module_put+0x57/0x70 [] ? gp8psk_fe_set_frontend+0x460/0x460 [dvb_usb_gp8psk] [] ? symbol_put_addr+0x27/0x50 [] ? dvb_usb_adapter_frontend_exit+0x3a/0x70 [dvb_usb] [] ? dvb_usb_exit+0x2f/0xd0 [dvb_usb] [] ? usb_disable_endpoint+0x7c/0xb0 [] ? dvb_usb_device_exit+0x2a/0x50 [dvb_usb] [] ? usb_unbind_interface+0x62/0x250 [] ? __pm_runtime_idle+0x44/0x70 [] ? __device_release_driver+0x78/0x120 [] ? driver_detach+0x87/0x90 [] ? bus_remove_driver+0x38/0x90 [] ? usb_deregister+0x58/0xb0 [] ? SyS_delete_module+0x130/0x1f0 [] ? task_work_run+0x64/0x80 [] ? exit_to_usermode_loop+0x85/0x90 [] ? do_fast_syscall_32+0x80/0x130 [] ? sysenter_past_esp+0x40/0x6a ---[ end trace 6ebc60ef3981792f ]---}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjhhubh)}(h這樣的堆棧跟蹤提供了足夠的信息來識別內核源代碼中發生錯誤的那一行。根據問題的 嚴重性,它還可能包含 **“Oops”** 一詞,比如::h](h這樣的堆棧跟蹤提供了足夠的信息來識別內核源代碼中發生錯誤的那一行。根據問題的 嚴重性,它還可能包含 }(hjhhhNhNubhstrong)}(h**“Oops”**h]h “Oops”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 一詞,比如:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK3hjhhubj)}(hBUG: unable to handle kernel NULL pointer dereference at (null) IP: [] iret_exc+0x7d0/0xa59 *pdpt = 000000002258a001 *pde = 0000000000000000 Oops: 0002 [#1] PREEMPT SMP ...h]hBUG: unable to handle kernel NULL pointer dereference at (null) IP: [] iret_exc+0x7d0/0xa59 *pdpt = 000000002258a001 *pde = 0000000000000000 Oops: 0002 [#1] PREEMPT SMP ...}hj sbah}(h]h ]h"]h$]h&]hhuh1jhhhK6hjhhubh)}(h儘管有 **Oops** 或其他類型的堆棧跟蹤,但通常需要找到出問題的行來識別和處理缺 陷。在本章中,我們將參考“Oops”來了解需要分析的各種堆棧跟蹤。h](h 儘管有 }(hjhhhNhNubj)}(h**Oops**h]hOops}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 或其他類型的堆棧跟蹤,但通常需要找到出問題的行來識別和處理缺 陷。在本章中,我們將參考“Oops”來了解需要分析的各種堆棧跟蹤。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK file`` 從內核緩衝區 讀取數據並保存它。或者您可以 ``cat /proc/kmsg > file`` ,但是您必須適時 中斷以停止傳輸,因爲 ``kmsg`` 是一個“永無止境的文件”。h](h有時 }(hj#hhhNhNubjD)}(h ``klogd``h]hklogd}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj#ubh, 會掛掉,這種情況下您可以運行 }(hj#hhhNhNubjD)}(h``dmesg > file``h]h dmesg > file}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj#ubh? 從內核緩衝區 讀取數據並保存它。或者您可以 }(hj#hhhNhNubjD)}(h``cat /proc/kmsg > file``h]hcat /proc/kmsg > file}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jChj#ubh9 ,但是您必須適時 中斷以停止傳輸,因爲 }(hj#hhhNhNubjD)}(h``kmsg``h]hkmsg}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jChj#ubh( 是一個“永無止境的文件”。}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKRhjhhubh)}(hZ如果機器嚴重崩潰,無法輸入命令或磁盤不可用,那還有三個選項:h]hZ如果機器嚴重崩潰,無法輸入命令或磁盤不可用,那還有三個選項:}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhjhhubhenumerated_list)}(hhh](h list_item)}(hX手動複製屏幕上的文本,並在機器重新啓動後輸入。很難受,但這是突然崩潰下 唯一的選擇。或者你可以用數碼相機拍下屏幕——雖然不那麼好,但總比什麼都沒 有好。如果消息滾動超出控制檯頂部,使用更高分辨率(例如 ``vga=791`` ) 引導啓動將允許您閱讀更多文本。(警告:這需要 ``vesafb`` ,因此對“早期” 的Oppses沒有幫助) h]h)}(hX手動複製屏幕上的文本,並在機器重新啓動後輸入。很難受,但這是突然崩潰下 唯一的選擇。或者你可以用數碼相機拍下屏幕——雖然不那麼好,但總比什麼都沒 有好。如果消息滾動超出控制檯頂部,使用更高分辨率(例如 ``vga=791`` ) 引導啓動將允許您閱讀更多文本。(警告:這需要 ``vesafb`` ,因此對“早期” 的Oppses沒有幫助)h](hX)手動複製屏幕上的文本,並在機器重新啓動後輸入。很難受,但這是突然崩潰下 唯一的選擇。或者你可以用數碼相機拍下屏幕——雖然不那麼好,但總比什麼都沒 有好。如果消息滾動超出控制檯頂部,使用更高分辨率(例如 }(hjhhhNhNubjD)}(h ``vga=791``h]hvga=791}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubhH ) 引導啓動將允許您閱讀更多文本。(警告:這需要 }(hjhhhNhNubjD)}(h ``vesafb``h]hvesafb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubh2 ,因此對“早期” 的Oppses沒有幫助)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKXhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h從串口終端啓動(參見 :ref:`Documentation/admin-guide/serial-console.rst ` ), 在另一臺機器上運行調制解調器然後用你喜歡的通信程序捕獲輸出。 Minicom運行良好。 h]h)}(h從串口終端啓動(參見 :ref:`Documentation/admin-guide/serial-console.rst ` ), 在另一臺機器上運行調制解調器然後用你喜歡的通信程序捕獲輸出。 Minicom運行良好。h](h從串口終端啓動(參見 }(hjhhhNhNubh)}(hD:ref:`Documentation/admin-guide/serial-console.rst `h]j))}(hjh]h,Documentation/admin-guide/serial-console.rst}(hjhhhNhNubah}(h]h ](j4stdstd-refeh"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&]refdocjA refdomainjreftyperef refexplicitrefwarnjGserial_consoleuh1hhhhK^hjubhy ), 在另一臺機器上運行調制解調器然後用你喜歡的通信程序捕獲輸出。 Minicom運行良好。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK^hjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h使用Kdump(參閱 Documentation/admin-guide/kdump/kdump.rst ),使用 Documentation/admin-guide/kdump/gdbmacros.txt 中的dmesg gdbmacro從舊內存 中提取內核環形緩衝區。 h]h)}(h使用Kdump(參閱 Documentation/admin-guide/kdump/kdump.rst ),使用 Documentation/admin-guide/kdump/gdbmacros.txt 中的dmesg gdbmacro從舊內存 中提取內核環形緩衝區。h]h使用Kdump(參閱 Documentation/admin-guide/kdump/kdump.rst ),使用 Documentation/admin-guide/kdump/gdbmacros.txt 中的dmesg gdbmacro從舊內存 中提取內核環形緩衝區。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKchjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]enumtypearabicprefix(suffix)uh1jhjhhhhhKXubeh}(h]oopsah ]h"]oops消息在哪?ah$]h&]uh1jhjhhhhhKKubj)}(hhh](j)}(h找到缺陷位置h]h找到缺陷位置}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2hhhhhKhubh)}(h如果你能指出缺陷在內核源代碼中的位置,則報告缺陷的效果會非常好。這有兩種方法。 通常來說使用 ``gdb`` 會比較容易,不過內核需要用調試信息來預編譯。h](h如果你能指出缺陷在內核源代碼中的位置,則報告缺陷的效果會非常好。這有兩種方法。 通常來說使用 }(hjChhhNhNubjD)}(h``gdb``h]hgdb}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjCubhC 會比較容易,不過內核需要用調試信息來預編譯。}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKjhj2hhubj)}(hhh](j)}(hgdbh]hgdb}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjchhhhhKnubh)}(h|GNU 調試器(GNU debugger, ``gdb`` )是從 ``vmlinux`` 文件中找出OOPS的確切 文件和行號的最佳方法。h](h GNU 調試器(GNU debugger, }(hjthhhNhNubjD)}(h``gdb``h]hgdb}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjtubh )是從 }(hjthhhNhNubjD)}(h ``vmlinux``h]hvmlinux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjtubh? 文件中找出OOPS的確切 文件和行號的最佳方法。}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKphjchhubh)}(ht在使用 ``CONFIG_DEBUG_INFO`` 編譯的內核上使用gdb效果最好。可通過運行以下命令 進行設置::h](h 在使用 }(hjhhhNhNubjD)}(h``CONFIG_DEBUG_INFO``h]hCONFIG_DEBUG_INFO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubhT 編譯的內核上使用gdb效果最好。可通過運行以下命令 進行設置:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKshjchhubj)}(h@$ ./scripts/config -d COMPILE_TEST -e DEBUG_KERNEL -e DEBUG_INFOh]h@$ ./scripts/config -d COMPILE_TEST -e DEBUG_KERNEL -e DEBUG_INFO}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKvhjchhubh)}(hV在用 ``CONFIG_DEBUG_INFO`` 編譯的內核上,你可以直接從OOPS複製EIP值::h](h在用 }(hjhhhNhNubjD)}(h``CONFIG_DEBUG_INFO``h]hCONFIG_DEBUG_INFO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubh9 編譯的內核上,你可以直接從OOPS複製EIP值:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKxhjchhubj)}(h,EIP: 0060:[] Not tainted VLIh]h,EIP: 0060:[] Not tainted VLI}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKzhjchhubh)}(h,並使用GDB來將其翻譯成可讀形式::h]h+並使用GDB來將其翻譯成可讀形式:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK|hjchhubj)}(h!$ gdb vmlinux (gdb) l *0xc021e50eh]h!$ gdb vmlinux (gdb) l *0xc021e50e}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhK~hjchhubh)}(hJ如果沒有啓用 ``CONFIG_DEBUG_INFO`` ,則使用OOPS的函數偏移::h](h如果沒有啓用 }(hjhhhNhNubjD)}(h``CONFIG_DEBUG_INFO``h]hCONFIG_DEBUG_INFO}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubh! ,則使用OOPS的函數偏移:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjchhubj)}(hEIP is at vt_ioctl+0xda8/0x1482h]hEIP is at vt_ioctl+0xda8/0x1482}hj>sbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjchhubh)}(hC並在啓用 ``CONFIG_DEBUG_INFO`` 的情況下重新編譯內核::h](h 並在啓用 }(hjLhhhNhNubjD)}(h``CONFIG_DEBUG_INFO``h]hCONFIG_DEBUG_INFO}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jChjLubh 的情況下重新編譯內核:}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjchhubj)}(hX$ ./scripts/config -d COMPILE_TEST -e DEBUG_KERNEL -e DEBUG_INFO $ make vmlinux $ gdb vmlinux (gdb) l *vt_ioctl+0xda8 0x1888 is in vt_ioctl (drivers/tty/vt/vt_ioctl.c:293). 288 { 289 struct vc_data *vc = NULL; 290 int ret = 0; 291 292 console_lock(); 293 if (VT_BUSY(vc_num)) 294 ret = -EBUSY; 295 else if (vc_num) 296 vc = vc_deallocate(vc_num); 297 console_unlock();h]hX$ ./scripts/config -d COMPILE_TEST -e DEBUG_KERNEL -e DEBUG_INFO $ make vmlinux $ gdb vmlinux (gdb) l *vt_ioctl+0xda8 0x1888 is in vt_ioctl (drivers/tty/vt/vt_ioctl.c:293). 288 { 289 struct vc_data *vc = NULL; 290 int ret = 0; 291 292 console_lock(); 293 if (VT_BUSY(vc_num)) 294 ret = -EBUSY; 295 else if (vc_num) 296 vc = vc_deallocate(vc_num); 297 console_unlock();}hjlsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjchhubh)}(h&或者若您想要更詳細的顯示::h]h%或者若您想要更詳細的顯示:}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjchhubj)}(ht(gdb) p vt_ioctl $1 = {int (struct tty_struct *, unsigned int, unsigned long)} 0xae0 (gdb) l *0xae0+0xda8h]ht(gdb) p vt_ioctl $1 = {int (struct tty_struct *, unsigned int, unsigned long)} 0xae0 (gdb) l *0xae0+0xda8}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjchhubh)}(h,您也可以使用對象文件作爲替代::h]h+您也可以使用對象文件作爲替代:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjchhubj)}(hK$ make drivers/tty/ $ gdb drivers/tty/vt/vt_ioctl.o (gdb) l *vt_ioctl+0xda8h]hK$ make drivers/tty/ $ gdb drivers/tty/vt/vt_ioctl.o (gdb) l *vt_ioctl+0xda8}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjchhubh)}(h#如果你有調用跟蹤,類似::h]h"如果你有調用跟蹤,類似:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjchhubj)}(hCall Trace: [] :jbd:log_wait_commit+0xa3/0xf5 [] autoremove_wake_function+0x0/0x2e [] :jbd:journal_stop+0x1be/0x1ee ...h]hCall Trace: [] :jbd:log_wait_commit+0xa3/0xf5 [] autoremove_wake_function+0x0/0x2e [] :jbd:journal_stop+0x1be/0x1ee ...}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjchhubh)}(hc這表明問題可能在 :jbd: 模塊中。您可以在gdb中加載該模塊並列出相關代碼::h]hb這表明問題可能在 :jbd: 模塊中。您可以在gdb中加載該模塊並列出相關代碼:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjchhubj)}(h1$ gdb fs/jbd/jbd.ko (gdb) l *log_wait_commit+0xa3h]h1$ gdb fs/jbd/jbd.ko (gdb) l *log_wait_commit+0xa3}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjchhubh)}(hX3您還可以對堆棧跟蹤處的任何函數調用執行相同的操作,例如:: [] ? dvb_usb_adapter_frontend_exit+0x3a/0x70 [dvb_usb] 上述調用發生的位置可以通過以下方式看到:: $ gdb drivers/media/usb/dvb-usb/dvb-usb.o (gdb) l *dvb_usb_adapter_frontend_exit+0x3ah](h)}(hS您還可以對堆棧跟蹤處的任何函數調用執行相同的操作,例如::h]hR您還可以對堆棧跟蹤處的任何函數調用執行相同的操作,例如:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubj)}(h@[] ? dvb_usb_adapter_frontend_exit+0x3a/0x70 [dvb_usb]h]h@[] ? dvb_usb_adapter_frontend_exit+0x3a/0x70 [dvb_usb]}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjubh)}(h;上述調用發生的位置可以通過以下方式看到::h]h:上述調用發生的位置可以通過以下方式看到:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubj)}(hU$ gdb drivers/media/usb/dvb-usb/dvb-usb.o (gdb) l *dvb_usb_adapter_frontend_exit+0x3ah]hU$ gdb drivers/media/usb/dvb-usb/dvb-usb.o (gdb) l *dvb_usb_adapter_frontend_exit+0x3a}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjubeh}(h]h ]h"]h$]h&]uh1hhjchhhhhNubeh}(h]gdbah ]h"]gdbah$]h&]uh1jhj2hhhhhKnubj)}(hhh](j)}(hobjdumph]hobjdump}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4hhhhhKubh)}(hXI要調試內核,請使用objdump並從崩潰輸出中查找十六進制偏移,以找到有效的代碼/匯 編行。如果沒有調試符號,您將看到所示例程的彙編程序代碼,但是如果內核有調試 符號,C代碼也將可見(調試符號可以在內核配置菜單的hacking項中啓用)。例如::h]hXH要調試內核,請使用objdump並從崩潰輸出中查找十六進制偏移,以找到有效的代碼/匯 編行。如果沒有調試符號,您將看到所示例程的彙編程序代碼,但是如果內核有調試 符號,C代碼也將可見(調試符號可以在內核配置菜單的hacking項中啓用)。例如:}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj4hhubj)}(h0$ objdump -r -S -l --disassemble net/dccp/ipv4.oh]h0$ objdump -r -S -l --disassemble net/dccp/ipv4.o}hjSsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhj4hhubh)}(h@您需要處於內核樹的頂層以便此獲得您的C文件。h]h)}(hjch]h@您需要處於內核樹的頂層以便此獲得您的C文件。}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjaubah}(h]h ]h"]h$]h&]uh1hhj4hhhhhNubh)}(h如果您無法訪問源代碼,仍然可以使用以下方法調試一些崩潰轉儲(如Dave Miller的 示例崩潰轉儲輸出所示)::h]h如果您無法訪問源代碼,仍然可以使用以下方法調試一些崩潰轉儲(如Dave Miller的 示例崩潰轉儲輸出所示):}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj4hhubj)}(hXEIP is at +0x14/0x4c0 ... Code: 44 24 04 e8 6f 05 00 00 e9 e8 fe ff ff 8d 76 00 8d bc 27 00 00 00 00 55 57 56 53 81 ec bc 00 00 00 8b ac 24 d0 00 00 00 8b 5d 08 <8b> 83 3c 01 00 00 89 44 24 14 8b 45 28 85 c0 89 44 24 18 0f 85 Put the bytes into a "foo.s" file like this: .text .globl foo foo: .byte .... /* bytes from Code: part of OOPS dump */ Compile it with "gcc -c -o foo.o foo.s" then look at the output of "objdump --disassemble foo.o". Output: ip_queue_xmit: push %ebp push %edi push %esi push %ebx sub $0xbc, %esp mov 0xd0(%esp), %ebp ! %ebp = arg0 (skb) mov 0x8(%ebp), %ebx ! %ebx = skb->sk mov 0x13c(%ebx), %eax ! %eax = inet_sk(sk)->opth]hXEIP is at +0x14/0x4c0 ... Code: 44 24 04 e8 6f 05 00 00 e9 e8 fe ff ff 8d 76 00 8d bc 27 00 00 00 00 55 57 56 53 81 ec bc 00 00 00 8b ac 24 d0 00 00 00 8b 5d 08 <8b> 83 3c 01 00 00 89 44 24 14 8b 45 28 85 c0 89 44 24 18 0f 85 Put the bytes into a "foo.s" file like this: .text .globl foo foo: .byte .... /* bytes from Code: part of OOPS dump */ Compile it with "gcc -c -o foo.o foo.s" then look at the output of "objdump --disassemble foo.o". Output: ip_queue_xmit: push %ebp push %edi push %esi push %ebx sub $0xbc, %esp mov 0xd0(%esp), %ebp ! %ebp = arg0 (skb) mov 0x8(%ebp), %ebx ! %ebx = skb->sk mov 0x13c(%ebx), %eax ! %eax = inet_sk(sk)->opt}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhj4hhubh)}(hs`scripts/decodecode` 文件可以用來自動完成大部分工作,這取決於正在調試的CPU 體系結構。h](jX)}(h`scripts/decodecode`h]hscripts/decodecode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubh_ 文件可以用來自動完成大部分工作,這取決於正在調試的CPU 體系結構。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj4hhubeh}(h]objdumpah ]h"]objdumpah$]h&]uh1jhj2hhhhhKubeh}(h]id3ah ]h"]找到缺陷位置ah$]h&]uh1jhjhhhhhKhubj)}(hhh](j)}(h 報告缺陷h]h 報告缺陷}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(hr一旦你通過定位缺陷找到了其發生的地方,你可以嘗試自己修復它或者向上遊報告它。h]hr一旦你通過定位缺陷找到了其發生的地方,你可以嘗試自己修復它或者向上遊報告它。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h}爲了向上遊報告,您應該找出用於開發受影響代碼的郵件列表。這可以使用 ``get_maintainer.pl`` 。h](hd爲了向上遊報告,您應該找出用於開發受影響代碼的郵件列表。這可以使用 }(hjhhhNhNubjD)}(h``get_maintainer.pl``h]hget_maintainer.pl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubh 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(ho例如,您在gspca的sonixj.c文件中發現一個缺陷,則可以通過以下方法找到它的維護者::h]hn例如,您在gspca的sonixj.c文件中發現一個缺陷,則可以通過以下方法找到它的維護者:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hX4$ ./scripts/get_maintainer.pl -f drivers/media/usb/gspca/sonixj.c Hans Verkuil (odd fixer:GSPCA USB WEBCAM DRIVER,commit_signer:1/1=100%) Mauro Carvalho Chehab (maintainer:MEDIA INPUT INFRASTRUCTURE (V4L/DVB),commit_signer:1/1=100%) Tejun Heo (commit_signer:1/1=100%) Bhaktipriya Shridhar (commit_signer:1/1=100%,authored:1/1=100%,added_lines:4/4=100%,removed_lines:9/9=100%) linux-media@vger.kernel.org (open list:GSPCA USB WEBCAM DRIVER) linux-kernel@vger.kernel.org (open list)h]hX4$ ./scripts/get_maintainer.pl -f drivers/media/usb/gspca/sonixj.c Hans Verkuil (odd fixer:GSPCA USB WEBCAM DRIVER,commit_signer:1/1=100%) Mauro Carvalho Chehab (maintainer:MEDIA INPUT INFRASTRUCTURE (V4L/DVB),commit_signer:1/1=100%) Tejun Heo (commit_signer:1/1=100%) Bhaktipriya Shridhar (commit_signer:1/1=100%,authored:1/1=100%,added_lines:4/4=100%,removed_lines:9/9=100%) linux-media@vger.kernel.org (open list:GSPCA USB WEBCAM DRIVER) linux-kernel@vger.kernel.org (open list)}hj sbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjhhubh)}(h請注意它將指出:h]h請注意它將指出:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh bullet_list)}(hhh](j)}(h最後接觸源代碼的開發人員(如果這是在git樹中完成的)。在上面的例子中是Tejun 和Bhaktipriya(在這個特定的案例中,沒有人真正參與這個文件的開發);h]h)}(h最後接觸源代碼的開發人員(如果這是在git樹中完成的)。在上面的例子中是Tejun 和Bhaktipriya(在這個特定的案例中,沒有人真正參與這個文件的開發);h]h最後接觸源代碼的開發人員(如果這是在git樹中完成的)。在上面的例子中是Tejun 和Bhaktipriya(在這個特定的案例中,沒有人真正參與這個文件的開發);}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj.ubah}(h]h ]h"]h$]h&]uh1jhj+hhhhhNubj)}(h'驅動維護人員(Hans Verkuil);h]h)}(hjHh]h'驅動維護人員(Hans Verkuil);}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjFubah}(h]h ]h"]h$]h&]uh1jhj+hhhhhNubj)}(h3子系統維護人員(Mauro Carvalho Chehab);h]h)}(hj_h]h3子系統維護人員(Mauro Carvalho Chehab);}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj]ubah}(h]h ]h"]h$]h&]uh1jhj+hhhhhNubj)}(hL驅動程序和/或子系統郵件列表(linux-media@vger.kernel.org);h]h)}(hjvh](h+驅動程序和/或子系統郵件列表(}(hjxhhhNhNubh)}(hlinux-media@vger.kernel.orgh]hlinux-media@vger.kernel.org}(hjhhhNhNubah}(h]h ]h"]h$]h&]refuri"mailto:linux-media@vger.kernel.orguh1hhjxubh);}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjtubah}(h]h ]h"]h$]h&]uh1jhj+hhhhhNubj)}(h=Linux內核郵件列表(linux-kernel@vger.kernel.org)。 h]h)}(h` , 以幫助您的代碼被接受。h](h請務必閱讀 }(hjXhhhNhNubh)}(hG:ref:`Documentation/process/submitting-patches.rst `h]j))}(hjbh]h,Documentation/process/submitting-patches.rst}(hjdhhhNhNubah}(h]h ](j4stdstd-refeh"]h$]h&]uh1j(hj`ubah}(h]h ]h"]h$]h&]refdocjA refdomainjnreftyperef refexplicitrefwarnjGsubmittingpatchesuh1hhhhMhjXubh& , 以幫助您的代碼被接受。}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj+hhubeh}(h]id5ah ]h"] 修復缺陷ah$]h&]uh1jhjhhhhhMubh transition)}(hK---------------------------------------------------------------------------h]h}(h]h ]h"]h$]h&]uh1jhhhMhjhhubj)}(hhh](j)}(h-用 ``klogd`` 進行Oops跟蹤的注意事項h](h用 }(hjhhhNhNubjD)}(h ``klogd``h]hklogd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubh 進行Oops跟蹤的注意事項}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhMubh)}(h爲了幫助Linus和其他內核開發人員, ``klogd`` 對保護故障的處理提供了大量支持。 爲了完整支持地址解析,至少應該使用 ``sysklogd`` 包的1.3-pl3版本。h](h0爲了幫助Linus和其他內核開發人員, }(hjhhhNhNubjD)}(h ``klogd``h]hklogd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubhf 對保護故障的處理提供了大量支持。 爲了完整支持地址解析,至少應該使用 }(hjhhhNhNubjD)}(h ``sysklogd``h]hsysklogd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubh 包的1.3-pl3版本。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hX>當發生保護故障時, ``klogd`` 守護進程會自動將內核日誌消息中的重要地址轉換爲 它們的等效符號。然後通過 ``klogd`` 使用的任何報告機制來轉發這個已翻譯的內核 消息。保護錯誤消息可以直接從消息文件中剪切出來並轉發給內核開發人員。h](h當發生保護故障時, }(hjhhhNhNubjD)}(h ``klogd``h]hklogd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubhl 守護進程會自動將內核日誌消息中的重要地址轉換爲 它們的等效符號。然後通過 }(hjhhhNhNubjD)}(h ``klogd``h]hklogd}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubh 使用的任何報告機制來轉發這個已翻譯的內核 消息。保護錯誤消息可以直接從消息文件中剪切出來並轉發給內核開發人員。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM"hjhhubh)}(hX6``klogd`` 執行兩種類型的地址解析,靜態翻譯和動態翻譯。靜態翻譯使用System.map 文件。爲了進行靜態轉換, ``klogd`` 守護進程必須能夠在守護進程初始化時找到系 統映射文件。有關 ``klogd`` 如何搜索映射文件的信息,請參見klogd手冊頁。h](jD)}(h ``klogd``h]hklogd}(hj) hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj% ubh 執行兩種類型的地址解析,靜態翻譯和動態翻譯。靜態翻譯使用System.map 文件。爲了進行靜態轉換, }(hj% hhhNhNubjD)}(h ``klogd``h]hklogd}(hj; hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj% ubhW 守護進程必須能夠在守護進程初始化時找到系 統映射文件。有關 }(hj% hhhNhNubjD)}(h ``klogd``h]hklogd}(hjM hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj% ubh? 如何搜索映射文件的信息,請參見klogd手冊頁。}(hj% hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM&hjhhubh)}(h當使用內核可加載模塊時,動態地址轉換非常重要。由於內核模塊的內存是從內核的 動態內存池中分配的,因此無論是模塊的開頭還是模塊中的函數和符號都沒有固定的 位置。h]h當使用內核可加載模塊時,動態地址轉換非常重要。由於內核模塊的內存是從內核的 動態內存池中分配的,因此無論是模塊的開頭還是模塊中的函數和符號都沒有固定的 位置。}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM*hjhhubh)}(h內核支持系統調用,允許程序確定加載哪些模塊及其在內存中的位置。klogd守護進程 使用這些系統調用構建了一個符號表,可用於調試可加載內核模塊中發生的保護錯誤。h]h內核支持系統調用,允許程序確定加載哪些模塊及其在內存中的位置。klogd守護進程 使用這些系統調用構建了一個符號表,可用於調試可加載內核模塊中發生的保護錯誤。}(hjs hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM.hjhhubh)}(hklogd至少會提供產生保護故障的模塊的名稱。如果可加載模塊的開發人員選擇從模塊 導出符號信息,則可能會有其他可用的符號信息。h]hklogd至少會提供產生保護故障的模塊的名稱。如果可加載模塊的開發人員選擇從模塊 導出符號信息,則可能會有其他可用的符號信息。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM1hjhhubh)}(hX?由於內核模塊環境可以是動態的,因此當模塊環境發生變化時,必須有一種通知 ``klogd`` 守護進程的機制。有一些可用的命令行選項允許klogd向當前正在執行的守 護進程發出信號示意應該刷新符號信息。有關更多信息,請參閱 ``klogd`` 手冊頁。h](hj由於內核模塊環境可以是動態的,因此當模塊環境發生變化時,必須有一種通知 }(hj hhhNhNubjD)}(h ``klogd``h]hklogd}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj ubh 守護進程的機制。有一些可用的命令行選項允許klogd向當前正在執行的守 護進程發出信號示意應該刷新符號信息。有關更多信息,請參閱 }(hj hhhNhNubjD)}(h ``klogd``h]hklogd}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj ubh 手冊頁。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM4hjhhubh)}(hsysklogd發行版附帶了一個補丁,它修改了 ``modules-2.0.0`` 包,以便在加載或 卸載模塊時自動向klogd發送信號。應用此補丁基本上可無縫支持調試內核可加載模塊 發生的保護故障。h](h6sysklogd發行版附帶了一個補丁,它修改了 }(hj hhhNhNubjD)}(h``modules-2.0.0``h]h modules-2.0.0}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj ubh 包,以便在加載或 卸載模塊時自動向klogd發送信號。應用此補丁基本上可無縫支持調試內核可加載模塊 發生的保護故障。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM8hjhhubh)}(hF以下是 ``klogd`` 處理的可加載模塊中的保護故障示例::h](h 以下是 }(hj hhhNhNubjD)}(h ``klogd``h]hklogd}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj ubh2 處理的可加載模塊中的保護故障示例:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM<hjhhubj)}(hX9Aug 29 09:51:01 blizard kernel: Unable to handle kernel paging request at virtual address f15e97cc Aug 29 09:51:01 blizard kernel: current->tss.cr3 = 0062d000, %cr3 = 0062d000 Aug 29 09:51:01 blizard kernel: *pde = 00000000 Aug 29 09:51:01 blizard kernel: Oops: 0002 Aug 29 09:51:01 blizard kernel: CPU: 0 Aug 29 09:51:01 blizard kernel: EIP: 0010:[oops:_oops+16/3868] Aug 29 09:51:01 blizard kernel: EFLAGS: 00010212 Aug 29 09:51:01 blizard kernel: eax: 315e97cc ebx: 003a6f80 ecx: 001be77b edx: 00237c0c Aug 29 09:51:01 blizard kernel: esi: 00000000 edi: bffffdb3 ebp: 00589f90 esp: 00589f8c Aug 29 09:51:01 blizard kernel: ds: 0018 es: 0018 fs: 002b gs: 002b ss: 0018 Aug 29 09:51:01 blizard kernel: Process oops_test (pid: 3374, process nr: 21, stackpage=00589000) Aug 29 09:51:01 blizard kernel: Stack: 315e97cc 00589f98 0100b0b4 bffffed4 0012e38e 00240c64 003a6f80 00000001 Aug 29 09:51:01 blizard kernel: 00000000 00237810 bfffff00 0010a7fa 00000003 00000001 00000000 bfffff00 Aug 29 09:51:01 blizard kernel: bffffdb3 bffffed4 ffffffda 0000002b 0007002b 0000002b 0000002b 00000036 Aug 29 09:51:01 blizard kernel: Call Trace: [oops:_oops_ioctl+48/80] [_sys_ioctl+254/272] [_system_call+82/128] Aug 29 09:51:01 blizard kernel: Code: c7 00 05 00 00 00 eb 08 90 90 90 90 90 90 90 90 89 ec 5d c3h]hX9Aug 29 09:51:01 blizard kernel: Unable to handle kernel paging request at virtual address f15e97cc Aug 29 09:51:01 blizard kernel: current->tss.cr3 = 0062d000, %cr3 = 0062d000 Aug 29 09:51:01 blizard kernel: *pde = 00000000 Aug 29 09:51:01 blizard kernel: Oops: 0002 Aug 29 09:51:01 blizard kernel: CPU: 0 Aug 29 09:51:01 blizard kernel: EIP: 0010:[oops:_oops+16/3868] Aug 29 09:51:01 blizard kernel: EFLAGS: 00010212 Aug 29 09:51:01 blizard kernel: eax: 315e97cc ebx: 003a6f80 ecx: 001be77b edx: 00237c0c Aug 29 09:51:01 blizard kernel: esi: 00000000 edi: bffffdb3 ebp: 00589f90 esp: 00589f8c Aug 29 09:51:01 blizard kernel: ds: 0018 es: 0018 fs: 002b gs: 002b ss: 0018 Aug 29 09:51:01 blizard kernel: Process oops_test (pid: 3374, process nr: 21, stackpage=00589000) Aug 29 09:51:01 blizard kernel: Stack: 315e97cc 00589f98 0100b0b4 bffffed4 0012e38e 00240c64 003a6f80 00000001 Aug 29 09:51:01 blizard kernel: 00000000 00237810 bfffff00 0010a7fa 00000003 00000001 00000000 bfffff00 Aug 29 09:51:01 blizard kernel: bffffdb3 bffffed4 ffffffda 0000002b 0007002b 0000002b 0000002b 00000036 Aug 29 09:51:01 blizard kernel: Call Trace: [oops:_oops_ioctl+48/80] [_sys_ioctl+254/272] [_system_call+82/128] Aug 29 09:51:01 blizard kernel: Code: c7 00 05 00 00 00 eb 08 90 90 90 90 90 90 90 90 89 ec 5d c3}hj sbah}(h]h ]h"]h$]h&]hhuh1jhhhM>hjhhubeh}(h] klogd-oopsah ]h"])用 klogd 進行oops跟蹤的注意事項ah$]h&]uh1jhjhhhhhMubeh}(h]id1ah ]h"] 追蹤缺陷ah$]h&]uh1jhhhhhhhK ubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjB error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j j jjj/j,jjj1j.jjj(j%jjj j u nametypes}(j jj/jj1jj(jj uh}(j jjjqj,jjj2j.jcjj4j%jjj+j ju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jP KsRparse_messages]transform_messages] transformerN include_log]