.. SPDX-License-Identifier: GPL-2.0 .. include:: ../disclaimer-zh_TW.rst :Original: :doc:`../../../admin-guide/bug-hunting` :è¯è€…: å³æƒ³æˆ Wu XiangCheng <bobwxc@email.cn> 胡皓文 Hu Haowen <src.res@email.cn> 追蹤缺陷 ========= å…§æ ¸éŒ¯èª¤å ±å‘Šé€šå¸¸é™„å¸¶å¦‚ä¸‹å †æ£§è½‰å„²:: ------------[ 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: [<c12ba080>] ? dump_stack+0x44/0x64 [<c103ed6a>] ? __warn+0xfa/0x120 [<c109e8a7>] ? module_put+0x57/0x70 [<c109e8a7>] ? module_put+0x57/0x70 [<c103ee33>] ? warn_slowpath_null+0x23/0x30 [<c109e8a7>] ? module_put+0x57/0x70 [<f80ca4d0>] ? gp8psk_fe_set_frontend+0x460/0x460 [dvb_usb_gp8psk] [<c109f617>] ? symbol_put_addr+0x27/0x50 [<f80bc9ca>] ? dvb_usb_adapter_frontend_exit+0x3a/0x70 [dvb_usb] [<f80bb3bf>] ? dvb_usb_exit+0x2f/0xd0 [dvb_usb] [<c13d03bc>] ? usb_disable_endpoint+0x7c/0xb0 [<f80bb48a>] ? dvb_usb_device_exit+0x2a/0x50 [dvb_usb] [<c13d2882>] ? usb_unbind_interface+0x62/0x250 [<c136b514>] ? __pm_runtime_idle+0x44/0x70 [<c13620d8>] ? __device_release_driver+0x78/0x120 [<c1362907>] ? driver_detach+0x87/0x90 [<c1361c48>] ? bus_remove_driver+0x38/0x90 [<c13d1c18>] ? usb_deregister+0x58/0xb0 [<c109fbb0>] ? SyS_delete_module+0x130/0x1f0 [<c1055654>] ? task_work_run+0x64/0x80 [<c1000fa5>] ? exit_to_usermode_loop+0x85/0x90 [<c10013f0>] ? do_fast_syscall_32+0x80/0x130 [<c1549f43>] ? sysenter_past_esp+0x40/0x6a ---[ end trace 6ebc60ef3981792f ]--- é€™æ¨£çš„å †æ£§è·Ÿè¹¤æä¾›äº†è¶³å¤ çš„ä¿¡æ¯ä¾†è˜åˆ¥å…§æ ¸åŽŸå§‹ç¢¼ä¸ç™¼ç”ŸéŒ¯èª¤çš„é‚£ä¸€è¡Œã€‚æ ¹æ“šå•é¡Œçš„ åš´é‡æ€§ï¼Œå®ƒé‚„å¯èƒ½åŒ…å« **「Oopsã€** 一詞,比如:: BUG: unable to handle kernel NULL pointer dereference at (null) IP: [<c06969d4>] iret_exc+0x7d0/0xa59 *pdpt = 000000002258a001 *pde = 0000000000000000 Oops: 0002 [#1] PREEMPT SMP ... 儘管有 **Oops** æˆ–å…¶ä»–é¡žåž‹çš„å †æ£§è·Ÿè¹¤ï¼Œä½†é€šå¸¸éœ€è¦æ‰¾åˆ°å‡ºå•é¡Œçš„行來è˜åˆ¥å’Œè™•ç†ç¼º é™·ã€‚åœ¨æœ¬ç« ä¸ï¼Œæˆ‘們將åƒè€ƒã€ŒOopsã€ä¾†äº†è§£éœ€è¦åˆ†æžçš„å„ç¨®å †æ£§è·Ÿè¹¤ã€‚ å¦‚æžœå…§æ ¸æ˜¯ç”¨ ``CONFIG_DEBUG_INFO`` ç·¨è¯çš„,那麼å¯ä»¥ä½¿ç”¨æ–‡ä»¶ï¼š `scripts/decode_stacktrace.sh` 。 連çµçš„模塊 ----------- å—到汙染或æ£åœ¨åŠ 載/å¸è¼‰çš„模塊用「(…)ã€æ¨™è¨˜ï¼Œæ±™æŸ“標誌在 `Documentation/admin-guide/tainted-kernels.rst` 文件ä¸é€²è¡Œäº†æ述,「æ£åœ¨è¢«åŠ 載ã€ç”¨ã€Œ+ã€æ¨™è¨»ï¼Œã€Œæ£åœ¨è¢«å¸è¼‰ã€ç”¨ã€Œ-ã€æ¨™è¨»ã€‚ Oops消æ¯åœ¨å“ªï¼Ÿ --------------- 通常,Oops文本由klogdå¾žå…§æ ¸ç·©è¡å€è®€å–,然後交給 ``syslogd`` ,後者將其寫入 syslog文件,通常是 ``/var/log/messages`` (å–決於 ``/etc/syslog.conf`` )。 在使用systemd的系統上,它也å¯ä»¥ç”± ``journald`` 守è·é€²ç¨‹å˜å„²ï¼Œä¸¦é€šéŽé‹è¡Œ ``journalctl`` 命令進行訪å•ã€‚ 有時 ``klogd`` 會掛掉,這種情æ³ä¸‹æ‚¨å¯ä»¥é‹è¡Œ ``dmesg > file`` å¾žå…§æ ¸ç·©è¡å€ 讀å–數據並ä¿å˜å®ƒã€‚或者您å¯ä»¥ ``cat /proc/kmsg > file`` ï¼Œä½†æ˜¯æ‚¨å¿…é ˆé©æ™‚ ä¸æ–·ä»¥åœæ¢å‚³è¼¸ï¼Œå› 爲 ``kmsg`` 是一個「永無æ¢å¢ƒçš„文件ã€ã€‚ 如果機器嚴é‡å´©æ½°ï¼Œç„¡æ³•è¼¸å…¥å‘½ä»¤æˆ–ç£ç¢Ÿä¸å¯ç”¨ï¼Œé‚£é‚„有三個é¸é …: (1) 手動複製å±å¹•ä¸Šçš„文本,並在機器é‡æ–°å•“動後輸入。很難å—,但這是çªç„¶å´©æ½°ä¸‹ 唯一的é¸æ“‡ã€‚æˆ–è€…ä½ å¯ä»¥ç”¨æ•¸ä½ç›¸æ©Ÿæ‹ä¸‹å±å¹•â€”—雖然ä¸é‚£éº¼å¥½ï¼Œä½†ç¸½æ¯”什麼都沒 有好。如果消æ¯æ»¾å‹•è¶…出控制å°é ‚部,使用更高解æžåº¦ï¼ˆä¾‹å¦‚ ``vga=791`` ) 引導啓動將å…許您閱讀更多文本。(è¦å‘Šï¼šé€™éœ€è¦ ``vesafb`` ï¼Œå› æ¤å°ã€Œæ—©æœŸã€ çš„Oppses沒有幫助) (2) 從串å£çµ‚端啓動(åƒè¦‹ :ref:`Documentation/admin-guide/serial-console.rst <serial_console>` ), 在å¦ä¸€å°æ©Ÿå™¨ä¸Šé‹è¡Œæ•¸æ“šæ©Ÿç„¶å¾Œç”¨ä½ å–œæ¡çš„通信程åºæ•ç²è¼¸å‡ºã€‚ Minicomé‹è¡Œè‰¯å¥½ã€‚ (3) 使用Kdump(åƒé–± Documentation/admin-guide/kdump/kdump.rst ),使用 Documentation/admin-guide/kdump/gdbmacros.txt ä¸çš„dmesg gdbmacroå¾žèˆŠå…§å˜ ä¸æå–å…§æ ¸ç’°å½¢ç·©è¡å€ã€‚ 找到缺陷ä½ç½® ------------- å¦‚æžœä½ èƒ½æŒ‡å‡ºç¼ºé™·åœ¨å…§æ ¸åŽŸå§‹ç¢¼ä¸çš„ä½ç½®ï¼Œå‰‡å ±å‘Šç¼ºé™·çš„效果會éžå¸¸å¥½ã€‚這有兩種方法。 通常來說使用 ``gdb`` 會比較容易,ä¸éŽå…§æ ¸éœ€è¦ç”¨èª¿è©¦ä¿¡æ¯ä¾†é ç·¨è¯ã€‚ gdb ^^^^ GNU 調試器(GNU debugger, ``gdb`` )是從 ``vmlinux`` 文件ä¸æ‰¾å‡ºOOPS的確切 文件和行號的最佳方法。 在使用 ``CONFIG_DEBUG_INFO`` ç·¨è¯çš„å…§æ ¸ä¸Šä½¿ç”¨gdb效果最好。å¯é€šéŽé‹è¡Œä»¥ä¸‹å‘½ä»¤ 進行è¨ç½®:: $ ./scripts/config -d COMPILE_TEST -e DEBUG_KERNEL -e DEBUG_INFO 在用 ``CONFIG_DEBUG_INFO`` ç·¨è¯çš„å…§æ ¸ä¸Šï¼Œä½ å¯ä»¥ç›´æŽ¥å¾žOOPS複製EIP值:: EIP: 0060:[<c021e50e>] Not tainted VLI 並使用GDB來將其翻è¯æˆå¯è®€å½¢å¼:: $ gdb vmlinux (gdb) l *0xc021e50e 如果沒有啓用 ``CONFIG_DEBUG_INFO`` ,則使用OOPS的函數å移:: EIP is at vt_ioctl+0xda8/0x1482 並在啓用 ``CONFIG_DEBUG_INFO`` 的情æ³ä¸‹é‡æ–°ç·¨è¯å…§æ ¸:: $ ./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(); 或者若您想è¦æ›´è©³ç´°çš„顯示:: (gdb) p vt_ioctl $1 = {int (struct tty_struct *, unsigned int, unsigned long)} 0xae0 <vt_ioctl> (gdb) l *0xae0+0xda8 您也å¯ä»¥ä½¿ç”¨å°è±¡æ–‡ä»¶ä½œçˆ²æ›¿ä»£:: $ make drivers/tty/ $ gdb drivers/tty/vt/vt_ioctl.o (gdb) l *vt_ioctl+0xda8 å¦‚æžœä½ æœ‰èª¿ç”¨è·Ÿè¹¤ï¼Œé¡žä¼¼:: Call Trace: [<ffffffff8802c8e9>] :jbd:log_wait_commit+0xa3/0xf5 [<ffffffff810482d9>] autoremove_wake_function+0x0/0x2e [<ffffffff8802770b>] :jbd:journal_stop+0x1be/0x1ee ... 這表明å•é¡Œå¯èƒ½åœ¨ :jbd: 模塊ä¸ã€‚您å¯ä»¥åœ¨gdbä¸åŠ 載該模塊並列出相關代碼:: $ gdb fs/jbd/jbd.ko (gdb) l *log_wait_commit+0xa3 .. note:: 您還å¯ä»¥å°å †æ£§è·Ÿè¹¤è™•çš„任何函數調用執行相åŒçš„æ“作,例如:: [<f80bc9ca>] ? 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+0x3a objdump ^^^^^^^^ è¦èª¿è©¦å…§æ ¸ï¼Œè«‹ä½¿ç”¨objdump並從崩潰輸出ä¸æŸ¥æ‰¾åå…進ä½å移,以找到有效的代碼/匯 編行。如果沒有調試符號,您將看到所示例程的彙編程åºä»£ç¢¼ï¼Œä½†æ˜¯å¦‚æžœå…§æ ¸æœ‰èª¿è©¦ 符號,C代碼也將å¯è¦‹ï¼ˆèª¿è©¦ç¬¦è™Ÿå¯ä»¥åœ¨å…§æ ¸é…ç½®èœå–®çš„hackingé …ä¸å•“用)。例如:: $ objdump -r -S -l --disassemble net/dccp/ipv4.o .. note:: 您需è¦è™•æ–¼å…§æ ¸æ¨¹çš„é ‚å±¤ä»¥ä¾¿æ¤ç²å¾—您的C文件。 如果您無法訪å•åŽŸå§‹ç¢¼ï¼Œä»ç„¶å¯ä»¥ä½¿ç”¨ä»¥ä¸‹æ–¹æ³•èª¿è©¦ä¸€äº›å´©æ½°è½‰å„²ï¼ˆå¦‚Dave Millerçš„ 示例崩潰轉儲輸出所示):: EIP 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 `scripts/decodecode` 文件å¯ä»¥ç”¨ä¾†è‡ªå‹•å®Œæˆå¤§éƒ¨åˆ†å·¥ä½œï¼Œé€™å–決於æ£åœ¨èª¿è©¦çš„CPU 體系çµæ§‹ã€‚ å ±å‘Šç¼ºé™· --------- ä¸€æ—¦ä½ é€šéŽå®šä½ç¼ºé™·æ‰¾åˆ°äº†å…¶ç™¼ç”Ÿçš„åœ°æ–¹ï¼Œä½ å¯ä»¥å˜—試自己修復它或者å‘ä¸Šæ¸¸å ±å‘Šå®ƒã€‚ 爲了å‘ä¸Šæ¸¸å ±å‘Šï¼Œæ‚¨æ‡‰è©²æ‰¾å‡ºç”¨æ–¼é–‹ç™¼å—影響代碼的郵件列表。這å¯ä»¥ä½¿ç”¨ ``get_maintainer.pl`` 。 例如,您在gspcaçš„sonixj.c文件ä¸ç™¼ç¾ä¸€å€‹ç¼ºé™·ï¼Œå‰‡å¯ä»¥é€šéŽä»¥ä¸‹æ–¹æ³•æ‰¾åˆ°å®ƒçš„ç¶è·è€…:: $ ./scripts/get_maintainer.pl -f drivers/media/usb/gspca/sonixj.c Hans Verkuil <hverkuil@xs4all.nl> (odd fixer:GSPCA USB WEBCAM DRIVER,commit_signer:1/1=100%) Mauro Carvalho Chehab <mchehab@kernel.org> (maintainer:MEDIA INPUT INFRASTRUCTURE (V4L/DVB),commit_signer:1/1=100%) Tejun Heo <tj@kernel.org> (commit_signer:1/1=100%) Bhaktipriya Shridhar <bhaktipriya96@gmail.com> (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) 請注æ„它將指出: - 最後接觸原始碼的開發人員(如果這是在git樹ä¸å®Œæˆçš„)。在上é¢çš„例åä¸æ˜¯Tejun å’ŒBhaktipriya(在這個特定的案例ä¸ï¼Œæ²’有人真æ£åƒèˆ‡é€™å€‹æ–‡ä»¶çš„開發); - é©…å‹•ç¶è·äººå“¡ï¼ˆHans Verkuil); - å系統ç¶è·äººå“¡ï¼ˆMauro Carvalho Chehab); - 驅動程åºå’Œ/或å系統郵件列表(linux-media@vger.kernel.org); - Linuxå…§æ ¸éƒµä»¶åˆ—è¡¨ï¼ˆlinux-kernel@vger.kernel.org)。 é€šå¸¸ï¼Œä¿®å¾©ç¼ºé™·çš„æœ€å¿«æ–¹æ³•æ˜¯å°‡å®ƒå ±å‘Šçµ¦ç”¨æ–¼é–‹ç™¼ç›¸é—œä»£ç¢¼çš„éƒµä»¶åˆ—è¡¨ï¼ˆlinux-media ML),抄é€é©…動程åºç¶è·è€…(Hans)。 å¦‚æžœä½ å®Œå…¨ä¸çŸ¥é“è©²æŠŠå ±å‘Šå¯„çµ¦èª°ï¼Œä¸” ``get_maintainer.pl`` 也沒有æ供任何有用 çš„ä¿¡æ¯ï¼Œè«‹ç™¼é€åˆ°linux-kernel@vger.kernel.org。 æ„Ÿè¬æ‚¨çš„幫助,這使Linux儘å¯èƒ½ç©©å®š:-) 修復缺陷 --------- å¦‚æžœä½ æ‡‚å¾—ç·¨ç¨‹ï¼Œä½ ä¸åƒ…å¯ä»¥é€šéŽå ±å‘ŠéŒ¯èª¤ä¾†å¹«åŠ©æˆ‘們,還å¯ä»¥æ供一個解決方案。 畢竟,開æºå°±æ˜¯åˆ†äº«ä½ çš„å·¥ä½œï¼Œä½ ä¸æƒ³å› çˆ²ä½ çš„å¤©æ‰è€Œè¢«èªå¯å—Žï¼Ÿ å¦‚æžœä½ æ±ºå®šé€™æ¨£åšï¼Œè«‹åœ¨åˆ¶å®šè§£æ±ºæ–¹æ¡ˆå¾Œå°‡å…¶æ交到上游。 請務必閱讀 :ref:`Documentation/process/submitting-patches.rst <submittingpatches>` , 以幫助您的代碼被接å—。 --------------------------------------------------------------------------- 用 ``klogd`` 進行Oops跟蹤的注æ„äº‹é … ------------------------------------ 爲了幫助Linuså’Œå…¶ä»–å…§æ ¸é–‹ç™¼äººå“¡ï¼Œ ``klogd`` å°ä¿è·æ•…障的處ç†æ供了大é‡æ”¯æŒã€‚ 爲了完整支æŒåœ°å€è§£æžï¼Œè‡³å°‘應該使用 ``sysklogd`` 包的1.3-pl3版本。 當發生ä¿è·æ•…障時, ``klogd`` 守è·é€²ç¨‹æœƒè‡ªå‹•å°‡å…§æ ¸æ—¥èªŒæ¶ˆæ¯ä¸çš„é‡è¦åœ°å€è½‰æ›çˆ² 它們的ç‰æ•ˆç¬¦è™Ÿã€‚ç„¶å¾Œé€šéŽ ``klogd`` ä½¿ç”¨çš„ä»»ä½•å ±å‘Šæ©Ÿåˆ¶ä¾†è½‰ç™¼é€™å€‹å·²ç¿»è¯çš„å…§æ ¸ 消æ¯ã€‚ä¿è·éŒ¯èª¤æ¶ˆæ¯å¯ä»¥ç›´æŽ¥å¾žæ¶ˆæ¯æ–‡ä»¶ä¸å‰ªåˆ‡å‡ºä¾†ä¸¦è½‰ç™¼çµ¦å…§æ ¸é–‹ç™¼äººå“¡ã€‚ ``klogd`` 執行兩種類型的地å€è§£æžï¼Œéœæ…‹ç¿»è¯å’Œå‹•æ…‹ç¿»è¯ã€‚éœæ…‹ç¿»è¯ä½¿ç”¨System.map 文件。爲了進行éœæ…‹è½‰æ›ï¼Œ ``klogd`` 守è·é€²ç¨‹å¿…é ˆèƒ½å¤ åœ¨å®ˆè·é€²ç¨‹åˆå§‹åŒ–時找到系 çµ±æ˜ å°„æ–‡ä»¶ã€‚æœ‰é—œ ``klogd`` 如何æœç´¢æ˜ 射文件的信æ¯ï¼Œè«‹åƒè¦‹klogd手冊é 。 ç•¶ä½¿ç”¨å…§æ ¸å¯åŠ 載模塊時,動態地å€è½‰æ›éžå¸¸é‡è¦ã€‚ç”±æ–¼å…§æ ¸æ¨¡å¡Šçš„å…§å˜æ˜¯å¾žå…§æ ¸çš„ å‹•æ…‹å…§å˜æ± ä¸åˆ†é…çš„ï¼Œå› æ¤ç„¡è«–是模塊的開é 還是模塊ä¸çš„函數和符號都沒有固定的 ä½ç½®ã€‚ å…§æ ¸æ”¯æŒç³»çµ±èª¿ç”¨ï¼Œå…許程åºç¢ºå®šåŠ 載哪些模塊åŠå…¶åœ¨å…§å˜ä¸çš„ä½ç½®ã€‚klogd守è·é€²ç¨‹ 使用這些系統調用構建了一個符號表,å¯ç”¨æ–¼èª¿è©¦å¯åŠ è¼‰å…§æ ¸æ¨¡å¡Šä¸ç™¼ç”Ÿçš„ä¿è·éŒ¯èª¤ã€‚ klogd至少會æ供產生ä¿è·æ•…障的模塊的å稱。如果å¯åŠ 載模塊的開發人員é¸æ“‡å¾žæ¨¡å¡Š 導出符號信æ¯ï¼Œå‰‡å¯èƒ½æœƒæœ‰å…¶ä»–å¯ç”¨çš„符號信æ¯ã€‚ ç”±æ–¼å…§æ ¸æ¨¡å¡Šç’°å¢ƒå¯ä»¥æ˜¯å‹•æ…‹çš„ï¼Œå› æ¤ç•¶æ¨¡å¡Šç’°å¢ƒç™¼ç”Ÿè®ŠåŒ–æ™‚ï¼Œå¿…é ˆæœ‰ä¸€ç¨®é€šçŸ¥ ``klogd`` 守è·é€²ç¨‹çš„機制。有一些å¯ç”¨çš„命令行é¸é …å…許klogdå‘當å‰æ£åœ¨åŸ·è¡Œçš„守 è·é€²ç¨‹ç™¼å‡ºä¿¡è™Ÿç¤ºæ„應該刷新符號信æ¯ã€‚有關更多信æ¯ï¼Œè«‹åƒé–± ``klogd`` 手冊é 。 sysklogd發行版附帶了一個補ä¸ï¼Œå®ƒä¿®æ”¹äº† ``modules-2.0.0`` åŒ…ï¼Œä»¥ä¾¿åœ¨åŠ è¼‰æˆ– å¸è¼‰æ¨¡å¡Šæ™‚自動å‘klogd發é€ä¿¡è™Ÿã€‚應用æ¤è£œä¸åŸºæœ¬ä¸Šå¯ç„¡ç¸«æ”¯æŒèª¿è©¦å…§æ ¸å¯åŠ 載模塊 發生的ä¿è·æ•…障。 以下是 ``klogd`` 處ç†çš„å¯åŠ 載模塊ä¸çš„ä¿è·æ•…障示例:: Aug 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 --------------------------------------------------------------------------- :: Dr. G.W. Wettstein Oncology Research Div. Computing Facility Roger Maris Cancer Center INTERNET: greg@wind.rmcc.com 820 4th St. N. Fargo, ND 58122 Phone: 701-234-7556