亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: Crash工具實(shí)戰(zhàn)-變量解析 [打印本頁(yè)]

作者: humjb_1983    時(shí)間: 2014-07-16 21:07
標(biāo)題: Crash工具實(shí)戰(zhàn)-變量解析
本帖最后由 humjb_1983 于 2014-07-16 21:19 編輯

(一時(shí)心血來(lái)潮總結(jié)的,供大家參考,時(shí)間倉(cāng)促,不足之處勿拍磚,歡迎討論~)
Crash工具用于解析Vmcore文件,Vmcore文件為通過(guò)kdump等手段收集的操作系統(tǒng)core dump信息,在不采用壓縮的情況下,其相當(dāng)于整個(gè)物理內(nèi)存的鏡像,所以其中包括了最全面、最完整的信息,對(duì)于分析定位各種疑難問(wèn)題有極大的幫助。配置kdump后,在內(nèi)核panic后,會(huì)自動(dòng)進(jìn)入kump流程,搜集Vmcore。
Crash工具即為專門用于分析vmcore文件的工具,其中提供了大量的實(shí)用分析命令,極大的提高了vmcore的分析效率。
在分析vmcore的過(guò)程中,常常需要解析內(nèi)核某個(gè)流程中的關(guān)鍵變量的值,以便確認(rèn)故障當(dāng)時(shí)系統(tǒng)的狀態(tài),本文主要介紹變量的解析方法,主要分全局變量和局部變量?jī)煞N情況。
1、全局變量解析非常簡(jiǎn)單,可通過(guò)在crash中直接p <變量名>打印,如:
  1.     crash> p jiffies
  2.     jiffies = $3 = 5540265294
復(fù)制代碼
2、局部變量的解析比較復(fù)雜。
Vmcore搜集的僅為故障當(dāng)時(shí)內(nèi)存使用情況的一個(gè)快照,是靜態(tài)信息,無(wú)法進(jìn)行動(dòng)態(tài)調(diào)試(雖然聽說(shuō)可以,但沒(méi)見(jiàn)過(guò)~~),對(duì)于某個(gè)進(jìn)程而言,在Vmcore中能發(fā)掘的進(jìn)程上下文信息,通常只有堆棧和寄存器的值。而我們了解,通常局部變量在棧中分配,但也可能直接使用寄存器保存,所以可以(也只能)通過(guò)“尋找局部變量跟堆;蚣拇嫫鞯年P(guān)系”來(lái)解析局部變量的值。所以這里分兩種情況:
1)位于棧中的局部變量
這種情況比較常見(jiàn),此時(shí),局部變量必然位于某一級(jí)函數(shù)的堆棧中,該局部變量可能通過(guò)指針一級(jí)級(jí)向底層函數(shù)傳遞,所以可能位于多個(gè)函數(shù)的堆棧中,可以從不同的函數(shù)堆棧中解析。但解析會(huì)比較困難,難點(diǎn)在于難以確認(rèn)相關(guān)變量在堆棧中的具體位置,解析方法很靈活,需要結(jié)合相關(guān)源代碼,仔細(xì)分析流程,找到關(guān)鍵的點(diǎn),更多的取決于分析者的經(jīng)驗(yàn)和代碼理解能力。
如下以實(shí)例說(shuō)明解析過(guò)程:
vmcore中某阻塞的進(jìn)程有如下的堆棧:
  1.     crash> bt 9242
  2.     PID: 9242 TASK: ffff8805f3a21540 CPU: 4 COMMAND: "xxx"
  3.      #0 [ffff8805f3a23428] schedule at ffffffff814f8b42
  4.      #1 [ffff8805f3a234f0] schedule_timeout at ffffffff814f9a6d
  5.      #2 [ffff8805f3a235a0] __down at ffffffff814fa992
  6.      #3 [ffff8805f3a235f0] down at ffffffff81097c11
  7.      #4 [ffff8805f3a23620] xfs_buf_lock at ffffffffa0523433 [xfs]
  8.      #5 [ffff8805f3a23650] _xfs_buf_find at ffffffffa05235f2 [xfs]
  9.      #6 [ffff8805f3a236c0] xfs_buf_get at ffffffffa05237db [xfs]
  10.      #7 [ffff8805f3a23700] xfs_buf_read at ffffffffa0523e4c [xfs]
  11.      #8 [ffff8805f3a23730] xfs_trans_read_buf at ffffffffa0519a98 [xfs]
  12.      #9 [ffff8805f3a23780] xfs_read_agf at ffffffffa04cfd26 [xfs]
  13.     #10 [ffff8805f3a237c0] xfs_alloc_read_agf at ffffffffa04cfe99 [xfs]
  14.     #11 [ffff8805f3a237f0] xfs_alloc_fix_freelist at ffffffffa04d28a1 [xfs]
  15.     #12 [ffff8805f3a238d0] xfs_alloc_vextent at ffffffffa04d2e16 [xfs]
復(fù)制代碼
可以看出,進(jìn)程阻塞在信號(hào)量上,需要解析如下函數(shù)中xfs_buf_t *bp變量的值,以確認(rèn)其中bp->b_sema信號(hào)量的狀態(tài)。
  1. void
  2.     xfs_buf_lock(
  3.         xfs_buf_t        *bp)
  4.     {
  5.         trace_xfs_buf_lock(bp, _RET_IP_);

  6.         if (atomic_read(&bp->b_io_remaining))
  7.             blk_run_address_space(bp->b_target->bt_mapping);
  8.         down(&bp->b_sema);
  9.         XB_SET_OWNER(bp);

  10.         trace_xfs_buf_lock_done(bp, _RET_IP_);
  11.     }
復(fù)制代碼
該變量是通過(guò)入?yún)纳霞?jí)函數(shù)傳入的,而跟蹤上級(jí)函數(shù)會(huì)發(fā)現(xiàn)其為在上級(jí)函數(shù)_xfs_buf_find中分配的局部變量,解析方法有兩種:

A、在上級(jí)函數(shù)中通過(guò)該變量與堆棧的關(guān)系解析
bp變量是在上級(jí)函數(shù)_xfs_buf_find定義局部變量,那么其通常會(huì)在該級(jí)棧中分配空間。但難點(diǎn)還在于如何確認(rèn)該變量在堆棧中的位置,關(guān)鍵在于找到“寄存器和堆棧關(guān)聯(lián)”的地方,還得分析關(guān)鍵代碼流程:
  1. _xfs_buf_find(
  2.         xfs_buftarg_t        *btp,    /* block device target        */
  3.         xfs_off_t        ioff,    /* starting offset of range    */
  4.         size_t            isize,    /* length of range        */
  5.         xfs_buf_flags_t        flags,
  6.         xfs_buf_t        *new_bp)
  7.     {
  8.         xfs_off_t        range_base;
  9.         size_t            range_length;
  10.         xfs_bufhash_t        *hash;
  11.         xfs_buf_t        *bp, *n;

  12.         range_base = (ioff << BBSHIFT);
  13.         range_length = (isize << BBSHIFT);
  14.     ...
  15.     found:
  16.         spin_unlock(&hash->bh_lock);

  17.         /* Attempt to get the semaphore without sleeping,
  18.          * if this does not work then we need to drop the
  19.          * spinlock and do a hard attempt on the semaphore.
  20.          */
  21.         if (down_trylock(&bp->b_sema)) {
  22.             if (!(flags & XBF_TRYLOCK)) {
  23.                 /* wait for buffer ownership */
  24.                 xfs_buf_lock(bp);
  25.                 XFS_STATS_INC(xb_get_locked_waited);
  26.     ...
復(fù)制代碼
可以看到,bp是作為xfs_buf_lock函數(shù)的入?yún)魅氲模沁@里應(yīng)該會(huì)通過(guò)寄存器或其它方式進(jìn)行傳參,則必然會(huì)對(duì)bp所在的堆棧位置進(jìn)行操作,由此應(yīng)能找到bp在堆棧中的位置。
反匯編相關(guān)代碼:
  1. crash> dis -l _xfs_buf_find
  2.     /usr/src/debug/kernel-2.6.32-220.el6/linux-2.6.32-220.el6.x86_64/fs/xfs/linux-2.6/xfs_buf.c: 431
  3.     0xffffffffa05234f0 <_xfs_buf_find>: push %rbp
  4.     0xffffffffa05234f1 <_xfs_buf_find+1>: mov %rsp,%rbp
  5.     0xffffffffa05234f4 <_xfs_buf_find+4>: push %r15
  6.     0xffffffffa05234f6 <_xfs_buf_find+6>: push %r14
  7.     ...
  8.     0xffffffffa05235e6 <_xfs_buf_find+246>: mov %rcx,%rdi
  9.     0xffffffffa05235e9 <_xfs_buf_find+249>: mov %rcx,-0x58(%rbp) //可以看出rbp偏移0x58即為入?yún)p的值
  10.     0xffffffffa05235ed <_xfs_buf_find+253>: callq 0xffffffffa05233e0 <xfs_buf_lock> //此處調(diào)用xfs_buf_lock
  11.     ...
復(fù)制代碼
找到調(diào)用xfs_buf_lock函數(shù)的地方,在此之前準(zhǔn)備入?yún)ⅲ僮髁硕褩?strong>-0x58(%rbp) ,可以看出rbp偏移0x58即為入?yún)p的值
再看看堆棧中-0x58(%rbp)中的內(nèi)容具體是啥:
  1. crash> bt -f 9242
  2.     PID: 9242 TASK: ffff8805f3a21540 CPU: 4 COMMAND: "xxx"
  3.      #0 [ffff8805f3a23428] schedule at ffffffff814f8b42
  4.         ffff8805f3a23430: 0000000000000082 ffff8805f3a234a8
  5.         ffff8805f3a23440: 0000000181164d0e ffff880c20518300
  6.         ffff8805f3a23450: 00051200f3a21b00 ffff880c20518300
  7.         ffff8805f3a23460: 00051200f3a21540 ffff8805f3a21af8
  8.         ffff8805f3a23470: ffff8805f3a23fd8 000000000000f4e8
  9.         ffff8805f3a23480: ffff8805f3a21af8 ffff880c20e1a080
  10.         ffff8805f3a23490: ffff8805f3a21540 ffff8805f3a234d8
  11.         ffff8805f3a234a0: 0000000000000246 ffff880c1d102400
  12.         ffff8805f3a234b0: 0000000000000246 ffff8805f3a234d8
  13.         ffff8805f3a234c0: ffff8802ecd784b8 7fffffffffffffff
  14.         ffff8805f3a234d0: ffff8805f3a235a8 7fffffffffffffff
  15.         ffff8805f3a234e0: 0000000000000200 ffff8805f3a23598
  16.         ffff8805f3a234f0: ffffffff814f9a6d
  17.     ...
  18.      #5 [ffff8805f3a23650] _xfs_buf_find at ffffffffa05235f2 [xfs]
  19.         ffff8805f3a23658: ffff8805f563e600 ffff8802ecd78480
  20.         ffff8805f3a23668: 0001400500000000 ffff8805f563e690
  21.         ffff8805f3a23678: ffff8805f3a236b8 0000000000000001
  22.         ffff8805f3a23688: ffff8805f3a21af8 ffff8808fe07c0c0
  23.         ffff8805f3a23698: 0000000000014005 000000003a382231
  24.         ffff8805f3a236a8: 0000000000000001 ffff8805f563e0c0
  25.     rsp--> ffff8805f3a236b8: ffff8805f3a236f8 ffffffffa05237db
復(fù)制代碼
我們知道:
(1)棧的地址是向低地址延伸的,也就是說(shuō)壓棧時(shí),sp(棧頂?shù)刂?減小。
(2)第一個(gè)壓棧的上級(jí)函數(shù)的返回地址,所以其中的ffffffffa05237db為上級(jí)函數(shù)的返回地址(從上述堆棧中可以明顯看出~)
在_xfs_buf_find()函數(shù)反匯編的第一句,就對(duì)rbp(即上級(jí)堆棧棧幀指針)進(jìn)行了壓棧,所以 ffff8805f3a236f8為rbp。
0xffffffffa05234f0 <_xfs_buf_find>: push %rbp
此時(shí)的rsp應(yīng)該就是ffff8805f3a236b8:接下來(lái):
0xffffffffa05234f1 <_xfs_buf_find+1>: mov %rsp,%rbp
那么此時(shí)的rbp也就等于ffff8805f3a236b8,那么rbp-0x58就是ffff8802ecd78480即為我們苦苦尋找的bp指針了。
通過(guò)如下命令驗(yàn)證下該bp指針的內(nèi)容,其類型為xfs_buf_t結(jié)構(gòu)體:
  1. crash> struct xfs_buf_t ffff8802ecd78480
  2.     struct xfs_buf_t {
  3.       b_rbnode = {
  4.         rb_parent_color = 18446612143895321536,
  5.         rb_right = 0x0,
  6.         rb_left = 0x0
  7.       },
  8.       b_file_offset = 500099736064,
  9.       b_buffer_length = 512,
  10.       b_hold = {
  11.         counter = 6
  12.       },
  13.       b_lru_ref = {
  14.         counter = 3
  15.       },
  16.       b_flags = 3145844,
  17.       b_sema = {
  18.         lock = {
  19.           raw_lock = {
  20.             slock = 151718155
  21.           }
  22.         },
  23.         count = 0,
  24.         wait_list = {
  25.           next = 0xffff88008c3f38c8,
  26.           prev = 0xffff8805f3a235a8
  27.         }
  28.       },
復(fù)制代碼
內(nèi)容輸出正常,應(yīng)說(shuō)明解析是正確的。
從該結(jié)構(gòu)體內(nèi)容可以看出,該xfs_lock被其它進(jìn)程占用了,且等待隊(duì)列中有進(jìn)程正在等待該鎖,進(jìn)一步分析wait_list可以得到每個(gè)等待進(jìn)行的相關(guān)信息,這里不再贅述具體方法。

B、在本級(jí)或下級(jí)函數(shù)中通過(guò)該變量與堆棧的關(guān)系解析
解析關(guān)鍵在于:需要找到引用該變量的關(guān)鍵點(diǎn),比如這里的down(&bp->b_sema)函數(shù),以bp變量所為入?yún),那么就必然?huì)對(duì)該變量進(jìn)行操作,比如通過(guò)寄存器傳參到down函數(shù)中,在此可以尋找到蛛絲馬跡。
首先,需要對(duì)xfs_buf_lock函數(shù)進(jìn)行反匯編:
  1. crash> dis -l xfs_buf_lock
  2.     /usr/src/debug/kernel-2.6.32-220.el6/linux-2.6.32-220.el6.x86_64/fs/xfs/linux-2.6/xfs_buf.c: 933
  3.     0xffffffffa05233e0 <xfs_buf_lock>: push %rbp
  4.     0xffffffffa05233e1 <xfs_buf_lock+1>: mov %rsp,%rbp
  5.     0xffffffffa05233e4 <xfs_buf_lock+4>: sub $0x20,%rsp
  6.     0xffffffffa05233e8 <xfs_buf_lock+8>: mov %rbx,-0x18(%rbp)
  7.     0xffffffffa05233ec <xfs_buf_lock+12>: mov %r12,-0x10(%rbp)
  8.     0xffffffffa05233f0 <xfs_buf_lock+16>: mov %r13,-0x8(%rbp)
  9.     0xffffffffa05233f4 <xfs_buf_lock+20>: nopl 0x0(%rax,%rax,1)
  10. ...
  11.     /usr/src/debug/kernel-2.6.32-220.el6/linux-2.6.32-220.el6.x86_64/fs/xfs/linux-2.6/xfs_buf.c: 940
  12.     0xffffffffa052342a <xfs_buf_lock+74>: lea 0x38(%rbx),%rdi
  13.     0xffffffffa052342e <xfs_buf_lock+78>: callq 0xffffffff81097bd0 <down>
  14.     /usr/src/debug/kernel-2.6.32-220.el6/linux-2.6.32-220.el6.x86_64/fs/xfs/linux-2.6/xfs_trace.h: 325
  15.     0xffffffffa0523433 <xfs_buf_lock+83>: mov 0x2976e(%rip),%r11d # 0xffffffffa054cba8 <__tracepoint_xfs_buf_lock_done+8>
  16.     /usr/src/debug/kernel-2.6.32-220.el6/linux-2.6.32-220.el6.x86_64/fs/xfs/linux-2.6/xfs_buf.c: 943
  17.     0xffffffffa052343a <xfs_buf_lock+90>: mov 0x8(%rbp),%r12
復(fù)制代碼
找到關(guān)鍵點(diǎn):調(diào)用down()函數(shù)的地方,然后可以發(fā)現(xiàn),在call down之前,就行了相關(guān)寄存器操作,可以推測(cè)是進(jìn)行傳參相關(guān)的準(zhǔn)備。
可以發(fā)現(xiàn)有
lea 0x38(%rbx),%rdi
對(duì)比代碼
down(&bp->b_sema);
可以看出,入?yún)⑹莃p結(jié)構(gòu)體的一個(gè)成員,剛好跟0x38偏移對(duì)應(yīng),由此可推測(cè)此時(shí)的rbx寄存器為存放bp指針的寄存器。
接下來(lái),需要尋找rbx寄存器跟堆棧的關(guān)系,需要找到從rbx向堆棧寫、或從堆棧向rbx讀的相關(guān)操作,而在當(dāng)級(jí)函數(shù)的反匯編代碼中顯然沒(méi)有,需要進(jìn)入下級(jí)函數(shù)down()中,看看是否有相關(guān)操作,對(duì)down()進(jìn)行反匯編:
  1. crash> dis -l down
  2.     /usr/src/debug/kernel-2.6.32-220.el6/linux-2.6.32-220.el6.x86_64/kernel/semaphore.c: 54
  3.     0xffffffff81097bd0 <down>: push %rbp
  4.     0xffffffff81097bd1 <down+1>: mov %rsp,%rbp
  5.     0xffffffff81097bd4 <down+4>: push %rbx
  6.     0xffffffff81097bd5 <down+5>: sub $0x18,%rsp
  7.     0xffffffff81097bd9 <down+9>: nopl 0x0(%rax,%rax,1)
  8.     0xffffffff81097bde <down+14>: mov %rdi,%rbx
  9.     ...
復(fù)制代碼
可以看出,其中第5行對(duì)rbx寄存器進(jìn)行壓棧,bingo!,這正是我們要尋找的,由此說(shuō)明bp指針的值,必然可以在down()這一級(jí)函數(shù)的棧中找到。
解析堆棧:
  1. crash> bt -f 9242
  2.     PID: 9242 TASK: ffff8805f3a21540 CPU: 4 COMMAND: "_0605_KLINUX_DF"
  3.      #0 [ffff8805f3a23428] schedule at ffffffff814f8b42
  4.         ffff8805f3a23430: 0000000000000082 ffff8805f3a234a8
  5.         ffff8805f3a23440: 0000000181164d0e ffff880c20518300
  6.         ffff8805f3a23450: 00051200f3a21b00 ffff880c20518300
  7.         ffff8805f3a23460: 00051200f3a21540 ffff8805f3a21af8
  8.         ffff8805f3a23470: ffff8805f3a23fd8 000000000000f4e8
  9.         ffff8805f3a23480: ffff8805f3a21af8 ffff880c20e1a080
  10.         ffff8805f3a23490: ffff8805f3a21540 ffff8805f3a234d8
  11.         ffff8805f3a234a0: 0000000000000246 ffff880c1d102400
  12.         ffff8805f3a234b0: 0000000000000246 ffff8805f3a234d8
  13.         ffff8805f3a234c0: ffff8802ecd784b8 7fffffffffffffff
  14.         ffff8805f3a234d0: ffff8805f3a235a8 7fffffffffffffff
  15.         ffff8805f3a234e0: 0000000000000200 ffff8805f3a23598
  16.         ffff8805f3a234f0: ffffffff814f9a6d
  17.     ...
  18.      #3 [ffff8805f3a235f0] down at ffffffff81097c11
  19.         ffff8805f3a235f8: ffff8805f3a23618 0000000000000292
  20.         ffff8805f3a23608: ffff8802ecd78480 ffff8802ecd78480
  21.         ffff8805f3a23618: ffff8805f3a23648 ffffffffa0523433
  22.      #4 [ffff8805f3a23620] xfs_buf_lock at ffffffffa0523433 [xfs]
  23.         ffff8805f3a23628: 0000000000016ec0 0000000000016ec0
  24.         ffff8805f3a23638: ffff8808fe07c0c0 ffff8802ecd78490
  25.         ffff8805f3a23648: ffff8805f3a236b8 ffffffffa05235f2
復(fù)制代碼
down()的堆棧在第#3級(jí),再看看down()的反匯編代碼的頭三句:
  1. 0xffffffff81097bd0 <down>: push %rbp
  2. 0xffffffff81097bd1 <down+1>: mov %rsp,%rbp
  3. 0xffffffff81097bd4 <down+4>: push %rbx
復(fù)制代碼
顯然,接下來(lái)壓棧的是rbp,即ffff8805f3a23648是rbp,即上一級(jí)堆棧的棧幀指針。
第3句,即對(duì)rbx壓棧,說(shuō)明rbx(即我們要找的bp指針的值)就位于down()函數(shù)堆棧中的第3個(gè)位置(第1為上級(jí)函數(shù)返回地址、第2為rbp),即:
ffff8802ecd78480
所以,我們找到了。。。。

2)位于寄存器中的局部變量
由于Vmcore只是一個(gè)內(nèi)存快照的靜態(tài)數(shù)據(jù),所以其中保存的進(jìn)程上下文中,只保存了最后一級(jí)函數(shù)執(zhí)行時(shí)的寄存器內(nèi)容,所以,如果相關(guān)局部變量位于最后一級(jí)函數(shù)中,且用寄存器保存,那么此時(shí)可以直接通過(guò)相關(guān)進(jìn)程的bt上下文得到:
  1. crash> bt 9242
  2.     PID: 9242 TASK: ffff8805f3a21540 CPU: 4 COMMAND: "_0605_KLINUX_DF"
  3.      #0 [ffff8805f3a23428] schedule at ffffffff814f8b42
  4.      #1 [ffff8805f3a234f0] schedule_timeout at ffffffff814f9a6d
  5.      #2 [ffff8805f3a235a0] __down at ffffffff814fa992
  6.      #3 [ffff8805f3a235f0] down at ffffffff81097c11
  7.      #4 [ffff8805f3a23620] xfs_buf_lock at ffffffffa0523433 [xfs]
  8.      #5 [ffff8805f3a23650] _xfs_buf_find at ffffffffa05235f2 [xfs]
  9.      #6 [ffff8805f3a236c0] xfs_buf_get at ffffffffa05237db [xfs]
  10.     ..
  11.     #24 [ffff8805f3a23f80] system_call_fastpath at ffffffff8100b0f2
  12.         RIP: 0000003885e0ed2d RSP: 00007f43871e36e0 RFLAGS: 00003297
  13.         RAX: 0000000000000002 RBX: ffffffff8100b0f2 RCX: 0000000000000000
  14.         RDX: 0000000000000241 RSI: 0000000000000241 RDI: 00007f43871e3710
  15.         RBP: 00007f43871e365c R8: 00007f43871df440 R9: 0000000000100000
  16.         R10: 0000000000000000 R11: 0000000000003293 R12: ffffffff8117a830
  17.         R13: ffff8805f3a23f78 R14: 00007f43871e3710 R15: 00007f43871e391c
  18.         ORIG_RAX: 0000000000000002 CS: 0033 SS: 002b
復(fù)制代碼
但是,如果需要解析的局部變量位于中間流程,且使用寄存器保存,且不能在最后一級(jí)函數(shù)執(zhí)行時(shí)的進(jìn)程上下文中體現(xiàn),那么此類局部變量就無(wú)法解析了。。
作者: humjb_1983    時(shí)間: 2014-07-16 21:21
哎,代碼中的格式不能調(diào)(調(diào)了沒(méi)看到效果~),不能突出重點(diǎn),不太好看,湊合看了哈。
作者: humjb_1983    時(shí)間: 2014-07-17 10:31
第一個(gè)精,感謝 embeddedlwp兄 支持。。。。
作者: daniel_11    時(shí)間: 2014-07-17 12:18
好文,學(xué)習(xí)下。有個(gè)問(wèn)題請(qǐng)教下,在嵌入式系統(tǒng)中,沒(méi)有很大的存儲(chǔ)設(shè)備,利用kdump分析kernel crash是否可行?謝謝!
作者: humjb_1983    時(shí)間: 2014-07-17 13:57
daniel_11 發(fā)表于 2014-07-17 12:18
好文,學(xué)習(xí)下。有個(gè)問(wèn)題請(qǐng)教下,在嵌入式系統(tǒng)中,沒(méi)有很大的存儲(chǔ)設(shè)備,利用kdump分析kernel crash是否可行? ...

感謝!
支持kdump只需滿足如下條件:
由于需要占用額外的內(nèi)存,目前的內(nèi)核128M應(yīng)該就行(最低64M可能也行),也就是說(shuō)你的物理內(nèi)存需要>OS和業(yè)務(wù)自身需要的內(nèi)存+128M。
對(duì)于vmcore的存儲(chǔ),可以放在本機(jī),也可以通過(guò)網(wǎng)絡(luò)上傳到其它主機(jī)上,所以如果本地存儲(chǔ)不足,可以通過(guò)配置將其轉(zhuǎn)儲(chǔ)到遠(yuǎn)程主機(jī),不存在問(wèn)題。
作者: humjb_1983    時(shí)間: 2014-07-17 14:33
格式實(shí)在不好看,在blog中也貼了一下,有興趣可以參考:
http://blog.chinaunix.net/uid-14528823-id-4358785.html
作者: chenyu105    時(shí)間: 2014-07-17 20:33
回復(fù) 4# daniel_11

用網(wǎng)絡(luò)來(lái)傳。我們這邊也準(zhǔn)備在嵌入式板子上部署kdump。
   
作者: daniel_11    時(shí)間: 2014-07-18 10:15
humjb_1983 發(fā)表于 2014-07-17 13:57
感謝!
支持kdump只需滿足如下條件:
由于需要占用額外的內(nèi)存,目前的內(nèi)核128M應(yīng)該就行(最低64M可能也行 ...

多謝,準(zhǔn)備嘗試下。
作者: daniel_11    時(shí)間: 2014-07-18 10:20
chenyu105 發(fā)表于 2014-07-17 20:33
回復(fù) 4# daniel_11

用網(wǎng)絡(luò)來(lái)傳。我們這邊也準(zhǔn)備在嵌入式板子上部署kdump。

謝謝回復(fù)。請(qǐng)問(wèn),你們?cè)鯓哟_保kernel crash后,網(wǎng)絡(luò)傳輸正常?
作者: humjb_1983    時(shí)間: 2014-07-18 10:33
daniel_11 發(fā)表于 2014-07-18 10:20
謝謝回復(fù)。請(qǐng)問(wèn),你們?cè)鯓哟_保kernel crash后,網(wǎng)絡(luò)傳輸正常?

首先,網(wǎng)絡(luò)的鏈路狀態(tài)從物理上保證。
其次,kdump在捕獲到panic后,會(huì)kexec執(zhí)行一個(gè)新的capture內(nèi)核,其中會(huì)重新初始化硬件,包括網(wǎng)卡,所以只要物理上沒(méi)問(wèn)題,這里的網(wǎng)絡(luò)應(yīng)該沒(méi)問(wèn)題。。
作者: daniel_11    時(shí)間: 2014-07-18 10:47
humjb_1983 發(fā)表于 2014-07-18 10:33
首先,網(wǎng)絡(luò)的鏈路狀態(tài)從物理上保證。
其次,kdump在捕獲到panic后,會(huì)kexec執(zhí)行一個(gè)新的capture內(nèi)核,其 ...

了解,多謝!以前只是了解kdump,從沒(méi)有在板子上實(shí)現(xiàn)過(guò),值得嘗試下。
作者: njuzhyf    時(shí)間: 2014-07-18 11:13
多謝分享。好精!過(guò)段時(shí)間我也來(lái)寫個(gè)kdump是如何實(shí)現(xiàn)的~~
作者: humjb_1983    時(shí)間: 2014-07-18 11:16
njuzhyf 發(fā)表于 2014-07-18 11:13
多謝分享。好精!過(guò)段時(shí)間我也來(lái)寫個(gè)kdump是如何實(shí)現(xiàn)的~~

期待分享。。!
作者: hmsghnh    時(shí)間: 2014-07-18 13:20
gdb 不是都支持反向調(diào)試了嗎?    還是不能倒推 得到  底層函數(shù)調(diào)用時(shí)的寄存器值?
作者: humjb_1983    時(shí)間: 2014-07-18 13:48
hmsghnh 發(fā)表于 2014-07-18 13:20
gdb 不是都支持反向調(diào)試了嗎?    還是不能倒推 得到  底層函數(shù)調(diào)用時(shí)的寄存器值?

不知你說(shuō)的反向調(diào)試具體是什么意思?
其實(shí)主要是介紹一種思路,在crash中,使用bt -F <pid>實(shí)際是能進(jìn)行部分符號(hào)的自動(dòng)替換的,會(huì)有一些用處,但不能解決所有的問(wèn)題,所有自己通過(guò)分析代碼和反匯編在棧或寄存器中尋找是比較可靠的。
作者: hmsghnh    時(shí)間: 2014-07-23 09:57
我是說(shuō)reverse-continue等命令,那個(gè)是需要事先record了才行的。coredump的分析時(shí)候應(yīng)該是不能往后執(zhí)行。
作者: super皮波    時(shí)間: 2014-07-23 10:19
但是,如果需要解析的局部變量位于中間流程,且使用寄存器保存,且不能在最后一級(jí)函數(shù)執(zhí)行時(shí)的進(jìn)程上下文中體現(xiàn),那么此類局部變量就無(wú)法解析了。。

我這正好用的是arm芯片,局部變量都是用寄存器存放的,每次用crash分析的時(shí)候如果函數(shù)過(guò)大,中間的局部變量的值有時(shí)候無(wú)法確定,這是最大的困惑
另外有時(shí)候編譯器會(huì)做優(yōu)化,把一些static的函數(shù)當(dāng)成inline函數(shù)鏈接,這樣的函數(shù)反匯編出來(lái)之后,很蛋疼
vmcore可以動(dòng)態(tài)調(diào)試嗎?誰(shuí)了解這塊說(shuō)說(shuō)唄
作者: humjb_1983    時(shí)間: 2014-07-23 18:03
super皮波 發(fā)表于 2014-07-23 10:19
但是,如果需要解析的局部變量位于中間流程,且使用寄存器保存,且不能在最后一級(jí)函數(shù)執(zhí)行時(shí)的進(jìn)程上下文中 ...

是的~
vmcore動(dòng)態(tài)調(diào)試比較困難,可以在當(dāng)前的運(yùn)行環(huán)境中做最簡(jiǎn)單的調(diào)試,比如看看變量變化之類的,其它估計(jì)很難了~
作者: yuanhangzhe    時(shí)間: 2014-07-24 14:38
路過(guò),學(xué)習(xí)了
作者: super皮波    時(shí)間: 2014-08-06 14:42
回復(fù) 18# humjb_1983
請(qǐng)教一個(gè)問(wèn)題,我用的arm芯片,在sysdump文件中找到當(dāng)前進(jìn)程的pgd,為什么pgd中對(duì)應(yīng)的內(nèi)存都是0呢,也就是找不到頁(yè)面的映射
如下log信息
已經(jīng)確認(rèn)的信息,c170c000確實(shí)是當(dāng)前進(jìn)程的pgd,通過(guò)rd讀取這段內(nèi)存地址,里面的數(shù)據(jù)都是0
我覺(jué)得很奇怪,humjb_1983兄是否遇到過(guò)這樣的問(wèn)題


pgd = c170c000
[22109.841759] c2 Unable to handle kernel paging request at virtual address bfd87ba4
[22109.841813] c0 [bfd87ba4] *pgd=00000000
[22109.841846] c2 Internal error: Oops: 5 [#1] PREEMPT SMP ARM
[22109.844151] c1 emc_freq: __emc_clk_set flag =  0x000c8410 , version flag = 0x11223368 phy register = 0x00060000
[22109.844332] c1 emc_freq: __emc_clk_set clk = 200 REG_AON_APB_DPLL_CFG = 1210032, PUBL_DLLGCR = 60000
[22109.844342] c1 emc_freq: clk set success, set clk = 200, get clk = 200, sence = 0
[22109.844352] c1 sys timer = 0x2b30a8eb, ap sys count = 0x01516c28
[22109.844362] c1 emc_freq: __emc_clk_set REG_AON_APB_DPLL_CFG = 1210032, PUBL_DLLGCR = 60000
[22109.844369] c1 sprdfb: DMC change freq(1)
[22109.893089] c0 Modules linked in: sprdwl goodix_ts trout_fm mali(O)
[22109.899417] c2 CPU: 2 PID: 16886 Comm: setprop Tainted: G        W  O 3.10.17 #1
[22109.906858] c2 task: d9a0e400 ti: c9f56000 task.ti: c9f56000
[22109.912676] c2 PC is at unmap_single_vma+0x1b8/0x5bc
[22109.917683] c2 LR is at unmap_single_vma+0x190/0x5bc
[22109.922795] c2 pc : [<c0102c28>]    lr : [<c0102c00>]    psr: a00f0013
                  sp : c9f57e08  ip : 0009babd  fp : c9f57e2c
[22109.934951] c2 r10: cfb3b038  r9 : bfd87ba0  r8 : b6f41000
[22109.940482] c2 r7 : c9f57e30  r6 : da2e5318  r5 : 002cd000  r4 : c0dfe8e0
[22109.947417] c2 r3 : 00000001  r2 : c0d6f75c  r1 : 002cd000  r0 : bfd87ba0





   
作者: humjb_1983    時(shí)間: 2014-08-06 17:42
super皮波 發(fā)表于 2014-08-06 14:42
回復(fù) 18# humjb_1983
請(qǐng)教一個(gè)問(wèn)題,我用的arm芯片,在sysdump文件中找到當(dāng)前進(jìn)程的pgd,為什么pgd中對(duì)應(yīng) ...

你的pgd是從哪兒取的,怎么取的?代碼貼一下呢?
作者: humjb_1983    時(shí)間: 2014-08-06 19:06
super皮波 發(fā)表于 2014-08-06 14:42
回復(fù) 18# humjb_1983
請(qǐng)教一個(gè)問(wèn)題,我用的arm芯片,在sysdump文件中找到當(dāng)前進(jìn)程的pgd,為什么pgd中對(duì)應(yīng) ...

再看了一下,你這個(gè)應(yīng)該是發(fā)生oops了,應(yīng)該是從相關(guān)信息看,應(yīng)該是在內(nèi)核態(tài)訪問(wèn)了用戶態(tài)的地址,而該地址還沒(méi)有對(duì)應(yīng)的頁(yè)表項(xiàng),所以發(fā)生缺頁(yè),而這種情況是不允許的,所以最終oops。

需要看看具體出錯(cuò)的位置,請(qǐng)?zhí)峁┫峦暾亩褩;厮。另外,是否在你的?nèi)核代碼中直接訪問(wèn)了用戶態(tài)的地址空間,這種情況下應(yīng)該使用copy_from_user,否則就有可能出現(xiàn)這樣的問(wèn)題。

當(dāng)然還有可能是內(nèi)存越界、亂踩導(dǎo)致的,那就更復(fù)雜了。。。
作者: super皮波    時(shí)間: 2014-08-06 22:50
回復(fù) 21# humjb_1983
明天上班的時(shí)候貼一下
   
作者: super皮波    時(shí)間: 2014-08-07 10:46
回復(fù) 22# humjb_1983
這是完整的在crash中的log信息

c2 Unable to handle kernel paging request at virtual address bfd87ba4
[22109.841794] c2 pgd = c170c000
[22109.841813] c0 [bfd87ba4] *pgd=00000000
[22109.841846] c2 Internal error: Oops: 5 [#1] PREEMPT SMP ARM
[22109.844151] c1 emc_freq: __emc_clk_set flag =  0x000c8410 , version flag = 0x11223368 phy register = 0x00060000
[22109.844332] c1 emc_freq: __emc_clk_set clk = 200 REG_AON_APB_DPLL_CFG = 1210032, PUBL_DLLGCR = 60000
[22109.844342] c1 emc_freq: clk set success, set clk = 200, get clk = 200, sence = 0
[22109.844352] c1 sys timer = 0x2b30a8eb, ap sys count = 0x01516c28
[22109.844362] c1 emc_freq: __emc_clk_set REG_AON_APB_DPLL_CFG = 1210032, PUBL_DLLGCR = 60000
[22109.844369] c1 sprdfb: DMC change freq(1)
[22109.893089] c0 Modules linked in: sprdwl goodix_ts trout_fm mali(O)
[22109.899417] c2 CPU: 2 PID: 16886 Comm: setprop Tainted: G        W  O 3.10.17 #1
[22109.906858] c2 task: d9a0e400 ti: c9f56000 task.ti: c9f56000
[22109.912676] c2 PC is at unmap_single_vma+0x1b8/0x5bc
[22109.917683] c2 LR is at unmap_single_vma+0x190/0x5bc
[22109.922795] c2 pc : [<c0102c28>]    lr : [<c0102c00>]    psr: a00f0013
                  sp : c9f57e08  ip : 0009babd  fp : c9f57e2c
[22109.934951] c2 r10: cfb3b038  r9 : bfd87ba0  r8 : b6f41000
[22109.940482] c2 r7 : c9f57e30  r6 : da2e5318  r5 : 002cd000  r4 : c0dfe8e0
[22109.947417] c2 r3 : 00000001  r2 : c0d6f75c  r1 : 002cd000  r0 : bfd87ba0
[22109.954253] c2 Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
[22109.961797] c2 Control: 10c53c7d  Table: 8170c06a  DAC: 00000015
[22109.967846] c2
                  PC: 0xc0102ba8:

   
作者: super皮波    時(shí)間: 2014-08-07 10:50
棧里的信息就不貼了
我現(xiàn)在的問(wèn)題是pgd對(duì)應(yīng)內(nèi)存地址中的值都是0,按理來(lái)說(shuō)不應(yīng)該都是0,應(yīng)該有一些地址空間是映射的
我發(fā)現(xiàn)所有task的pgd所對(duì)應(yīng)的內(nèi)存地址(也就是頁(yè)目錄項(xiàng)都是0),判斷的方法就是在crash中通過(guò)rd命令去讀pgd中的地址
這塊應(yīng)該不是內(nèi)存被踩的緣故,我讀過(guò)好幾個(gè)task的pgd,頁(yè)目錄項(xiàng)都是0,我一次讀1024個(gè)項(xiàng)
你遇到過(guò)這樣的問(wèn)題嗎
crash> rd 0xc170c000 1024
c170c000:  00000000 00000000 00000000 00000000   ................
c170c010:  00000000 00000000 00000000 00000000   ................
c170c020:  00000000 00000000 00000000 00000000   ................
c170c030:  00000000 00000000 00000000 00000000   ................
c170c040:  00000000 00000000 00000000 00000000   ................
c170c050:  00000000 00000000 00000000 00000000   ................
c170c060:  00000000 00000000 00000000 00000000   ................
c170c070:  00000000 00000000 00000000 00000000   ................
c170c080:  00000000 00000000 00000000 00000000   ................
c170c090:  00000000 00000000 00000000 00000000   ................
c170c0a0:  00000000 00000000 00000000 00000000   ................
c170c0b0:  00000000 00000000 00000000 00000000   ................
c170c0c0:  00000000 00000000 00000000 00000000   ................
c170c0d0:  00000000 00000000 00000000 00000000   ................
c170c0e0:  00000000 00000000 00000000 00000000   ................
c170c0f0:  00000000 00000000 00000000 00000000   ................
c170c100:  00000000 00000000 00000000 00000000   ................
c170c110:  00000000 00000000 00000000 00000000   ................
c170c120:  00000000 00000000 00000000 00000000   ................
c170c130:  00000000 00000000 00000000 00000000   ................
c170c140:  00000000 00000000 00000000 00000000   ................
c170c150:  00000000 00000000 00000000 00000000   ................
c170c160:  00000000 00000000 00000000 00000000   ................
c170c170:  00000000 00000000 00000000 00000000   ................
c170c180:  00000000 00000000 00000000 00000000   ................
c170c190:  00000000 00000000 00000000 00000000   ................
c170c1a0:  00000000 00000000 00000000 00000000   ................
c170c1b0:  00000000 00000000 00000000 00000000   ................
c170c1c0:  00000000 00000000 00000000 00000000   ................
c170c1d0:  00000000 00000000 00000000 00000000   ................
c170c1e0:  00000000 00000000 00000000 00000000   ................
c170c1f0:  00000000 00000000 00000000 00000000   ................
c170c200:  00000000 00000000 00000000 00000000   ................
c170c210:  00000000 00000000 00000000 00000000   ................
c170c220:  00000000 00000000 00000000 00000000   ................
c170c230:  00000000 00000000 00000000 00000000   ................
c170c240:  00000000 00000000 00000000 00000000   ................
c170c250:  00000000 00000000 00000000 00000000   ................
c170c260:  00000000 00000000 00000000 00000000   ................
c170c270:  00000000 00000000 00000000 00000000   ................
c170c280:  00000000 00000000 00000000 00000000   ................
c170c290:  00000000 00000000 00000000 00000000   ................
c170c2a0:  00000000 00000000 00000000 00000000   ................
c170c2b0:  00000000 00000000 00000000 00000000   ................
c170c2c0:  00000000 00000000 00000000 00000000   ................
c170c2d0:  00000000 00000000 00000000 00000000   ................
c170c2e0:  00000000 00000000 00000000 00000000   ................
c170c2f0:  00000000 00000000 00000000 00000000   ................
c170c300:  00000000 00000000 00000000 00000000   ................
c170c310:  00000000 00000000 00000000 00000000   ................
c170c320:  00000000 00000000 00000000 00000000   ................
c170c330:  00000000 00000000 00000000 00000000   ................
c170c340:  00000000 00000000 00000000 00000000   ................
c170c350:  00000000 00000000 00000000 00000000   ................
c170c360:  00000000 00000000 00000000 00000000   ................
c170c370:  00000000 00000000 00000000 00000000   ................
c170c380:  00000000 00000000 00000000 00000000   ................
c170c390:  00000000 00000000 00000000 00000000   ................
c170c3a0:  00000000 00000000 00000000 00000000   ................
c170c3b0:  00000000 00000000 00000000 00000000   ................
c170c3c0:  00000000 00000000 00000000 00000000   ................
c170c3d0:  00000000 00000000 00000000 00000000   ................
c170c3e0:  00000000 00000000 00000000 00000000   ................
c170c3f0:  00000000 00000000 00000000 00000000   ................
c170c400:  00000000 00000000 00000000 00000000   ................
c170c410:  00000000 00000000 00000000 00000000   ................
c170c420:  00000000 00000000 00000000 00000000   ................
c170c430:  00000000 00000000 00000000 00000000   ................
c170c440:  00000000 00000000 00000000 00000000   ................
c170c450:  00000000 00000000 00000000 00000000   ................
c170c460:  00000000 00000000 00000000 00000000   ................
c170c470:  00000000 00000000 00000000 00000000   ................
c170c480:  00000000 00000000 00000000 00000000   ................
c170c490:  00000000 00000000 00000000 00000000   ................
c170c4a0:  00000000 00000000 00000000 00000000   ................
c170c4b0:  00000000 00000000 00000000 00000000   ................
c170c4c0:  00000000 00000000 00000000 00000000   ................
c170c4d0:  00000000 00000000 00000000 00000000   ................
c170c4e0:  00000000 00000000 00000000 00000000   ................
c170c4f0:  00000000 00000000 00000000 00000000   ................
c170c500:  00000000 00000000 00000000 00000000   ................
c170c510:  00000000 00000000 00000000 00000000   ................
c170c520:  00000000 00000000 00000000 00000000   ................
c170c530:  00000000 00000000 00000000 00000000   ................
c170c540:  00000000 00000000 00000000 00000000   ................
c170c550:  00000000 00000000 00000000 00000000   ................
c170c560:  00000000 00000000 00000000 00000000   ................
c170c570:  00000000 00000000 00000000 00000000   ................
c170c580:  00000000 00000000 00000000 00000000   ................
c170c590:  00000000 00000000 00000000 00000000   ................
c170c5a0:  00000000 00000000 00000000 00000000   ................
c170c5b0:  00000000 00000000 00000000 00000000   ................
c170c5c0:  00000000 00000000 00000000 00000000   ................
c170c5d0:  00000000 00000000 00000000 00000000   ................
c170c5e0:  00000000 00000000 00000000 00000000   ................
c170c5f0:  00000000 00000000 00000000 00000000   ................
c170c600:  00000000 00000000 00000000 00000000   ................
c170c610:  00000000 00000000 00000000 00000000   ................
c170c620:  00000000 00000000 00000000 00000000   ................
c170c630:  00000000 00000000 00000000 00000000   ................
c170c640:  00000000 00000000 00000000 00000000   ................
c170c650:  00000000 00000000 00000000 00000000   ................
c170c660:  00000000 00000000 00000000 00000000   ................
c170c670:  00000000 00000000 00000000 00000000   ................
c170c680:  00000000 00000000 00000000 00000000   ................
c170c690:  00000000 00000000 00000000 00000000   ................
c170c6a0:  00000000 00000000 00000000 00000000   ................
c170c6b0:  00000000 00000000 00000000 00000000   ................
c170c6c0:  00000000 00000000 00000000 00000000   ................
c170c6d0:  00000000 00000000 00000000 00000000   ................
c170c6e0:  00000000 00000000 00000000 00000000   ................
c170c6f0:  00000000 00000000 00000000 00000000   ................
c170c700:  00000000 00000000 00000000 00000000   ................
c170c710:  00000000 00000000 00000000 00000000   ................
c170c720:  00000000 00000000 00000000 00000000   ................
c170c730:  00000000 00000000 00000000 00000000   ................
c170c740:  00000000 00000000 00000000 00000000   ................
c170c750:  00000000 00000000 00000000 00000000   ................
c170c760:  00000000 00000000 00000000 00000000   ................
c170c770:  00000000 00000000 00000000 00000000   ................
c170c780:  00000000 00000000 00000000 00000000   ................
c170c790:  00000000 00000000 00000000 00000000   ................
c170c7a0:  00000000 00000000 00000000 00000000   ................
c170c7b0:  00000000 00000000 00000000 00000000   ................
c170c7c0:  00000000 00000000 00000000 00000000   ................
c170c7d0:  00000000 00000000 00000000 00000000   ................
c170c7e0:  00000000 00000000 00000000 00000000   ................
c170c7f0:  00000000 00000000 00000000 00000000   ................
c170c800:  00000000 00000000 00000000 00000000   ................
c170c810:  00000000 00000000 00000000 00000000   ................
c170c820:  00000000 00000000 00000000 00000000   ................
c170c830:  00000000 00000000 00000000 00000000   ................
c170c840:  00000000 00000000 00000000 00000000   ................
c170c850:  00000000 00000000 00000000 00000000   ................
c170c860:  00000000 00000000 00000000 00000000   ................
c170c870:  00000000 00000000 00000000 00000000   ................
c170c880:  00000000 00000000 00000000 00000000   ................
c170c890:  00000000 00000000 00000000 00000000   ................
c170c8a0:  00000000 00000000 00000000 00000000   ................
c170c8b0:  00000000 00000000 00000000 00000000   ................
c170c8c0:  00000000 00000000 00000000 00000000   ................
c170c8d0:  00000000 00000000 00000000 00000000   ................
c170c8e0:  00000000 00000000 00000000 00000000   ................
c170c8f0:  00000000 00000000 00000000 00000000   ................
c170c900:  00000000 00000000 00000000 00000000   ................
c170c910:  00000000 00000000 00000000 00000000   ................
c170c920:  00000000 00000000 00000000 00000000   ................
c170c930:  00000000 00000000 00000000 00000000   ................
c170c940:  00000000 00000000 00000000 00000000   ................
c170c950:  00000000 00000000 00000000 00000000   ................
c170c960:  00000000 00000000 00000000 00000000   ................
c170c970:  00000000 00000000 00000000 00000000   ................
c170c980:  00000000 00000000 00000000 00000000   ................
c170c990:  00000000 00000000 00000000 00000000   ................
c170c9a0:  00000000 00000000 00000000 00000000   ................
c170c9b0:  00000000 00000000 00000000 00000000   ................
c170c9c0:  00000000 00000000 00000000 00000000   ................
c170c9d0:  00000000 00000000 00000000 00000000   ................
c170c9e0:  00000000 00000000 00000000 00000000   ................
c170c9f0:  00000000 00000000 00000000 00000000   ................
c170ca00:  00000000 00000000 00000000 00000000   ................
c170ca10:  00000000 00000000 00000000 00000000   ................
c170ca20:  00000000 00000000 00000000 00000000   ................
c170ca30:  00000000 00000000 00000000 00000000   ................
c170ca40:  00000000 00000000 00000000 00000000   ................
c170ca50:  00000000 00000000 00000000 00000000   ................
c170ca60:  00000000 00000000 00000000 00000000   ................
c170ca70:  00000000 00000000 00000000 00000000   ................
c170ca80:  00000000 00000000 00000000 00000000   ................
c170ca90:  00000000 00000000 00000000 00000000   ................
c170caa0:  00000000 00000000 00000000 00000000   ................
c170cab0:  00000000 00000000 00000000 00000000   ................
c170cac0:  00000000 00000000 00000000 00000000   ................
c170cad0:  00000000 00000000 00000000 00000000   ................
c170cae0:  00000000 00000000 00000000 00000000   ................
c170caf0:  00000000 00000000 00000000 00000000   ................
c170cb00:  00000000 00000000 00000000 00000000   ................
c170cb10:  00000000 00000000 00000000 00000000   ................
c170cb20:  00000000 00000000 00000000 00000000   ................
c170cb30:  00000000 00000000 00000000 00000000   ................
c170cb40:  00000000 00000000 00000000 00000000   ................
c170cb50:  00000000 00000000 00000000 00000000   ................
c170cb60:  00000000 00000000 00000000 00000000   ................
c170cb70:  00000000 00000000 00000000 00000000   ................
c170cb80:  00000000 00000000 00000000 00000000   ................
c170cb90:  00000000 00000000 00000000 00000000   ................
c170cba0:  00000000 00000000 00000000 00000000   ................
c170cbb0:  00000000 00000000 00000000 00000000   ................
c170cbc0:  00000000 00000000 00000000 00000000   ................
c170cbd0:  00000000 00000000 00000000 00000000   ................
c170cbe0:  00000000 00000000 00000000 00000000   ................
c170cbf0:  00000000 00000000 00000000 00000000   ................
c170cc00:  00000000 00000000 00000000 00000000   ................
c170cc10:  00000000 00000000 00000000 00000000   ................
c170cc20:  00000000 00000000 00000000 00000000   ................
c170cc30:  00000000 00000000 00000000 00000000   ................
c170cc40:  00000000 00000000 00000000 00000000   ................
c170cc50:  00000000 00000000 00000000 00000000   ................
c170cc60:  00000000 00000000 00000000 00000000   ................
c170cc70:  00000000 00000000 00000000 00000000   ................
c170cc80:  00000000 00000000 00000000 00000000   ................
c170cc90:  00000000 00000000 00000000 00000000   ................
c170cca0:  00000000 00000000 00000000 00000000   ................
c170ccb0:  00000000 00000000 00000000 00000000   ................
c170ccc0:  00000000 00000000 00000000 00000000   ................
c170ccd0:  00000000 00000000 00000000 00000000   ................
c170cce0:  00000000 00000000 00000000 00000000   ................
c170ccf0:  00000000 00000000 00000000 00000000   ................
c170cd00:  00000000 00000000 00000000 00000000   ................
c170cd10:  00000000 00000000 00000000 00000000   ................
c170cd20:  00000000 00000000 00000000 00000000   ................
c170cd30:  00000000 00000000 00000000 00000000   ................
c170cd40:  00000000 00000000 00000000 00000000   ................
c170cd50:  00000000 00000000 00000000 00000000   ................
c170cd60:  00000000 00000000 00000000 00000000   ................
c170cd70:  00000000 00000000 00000000 00000000   ................
c170cd80:  00000000 00000000 00000000 00000000   ................
c170cd90:  00000000 00000000 00000000 00000000   ................
c170cda0:  00000000 00000000 00000000 00000000   ................
c170cdb0:  00000000 00000000 00000000 00000000   ................
c170cdc0:  00000000 00000000 00000000 00000000   ................
c170cdd0:  00000000 00000000 00000000 00000000   ................
c170cde0:  00000000 00000000 00000000 00000000   ................
c170cdf0:  00000000 00000000 00000000 00000000   ................
c170ce00:  00000000 00000000 00000000 00000000   ................
c170ce10:  00000000 00000000 00000000 00000000   ................
c170ce20:  00000000 00000000 00000000 00000000   ................
c170ce30:  00000000 00000000 00000000 00000000   ................
c170ce40:  00000000 00000000 00000000 00000000   ................
c170ce50:  00000000 00000000 00000000 00000000   ................
c170ce60:  00000000 00000000 00000000 00000000   ................
c170ce70:  00000000 00000000 00000000 00000000   ................
c170ce80:  00000000 00000000 00000000 00000000   ................
c170ce90:  00000000 00000000 00000000 00000000   ................
c170cea0:  00000000 00000000 00000000 00000000   ................
c170ceb0:  00000000 00000000 00000000 00000000   ................
c170cec0:  00000000 00000000 00000000 00000000   ................
c170ced0:  00000000 00000000 00000000 00000000   ................
c170cee0:  00000000 00000000 00000000 00000000   ................
c170cef0:  00000000 00000000 00000000 00000000   ................
c170cf00:  00000000 00000000 00000000 00000000   ................
c170cf10:  00000000 00000000 00000000 00000000   ................
c170cf20:  00000000 00000000 00000000 00000000   ................
c170cf30:  00000000 00000000 00000000 00000000   ................
c170cf40:  00000000 00000000 00000000 00000000   ................
c170cf50:  00000000 00000000 00000000 00000000   ................
c170cf60:  00000000 00000000 00000000 00000000   ................
c170cf70:  00000000 00000000 00000000 00000000   ................
c170cf80:  00000000 00000000 00000000 00000000   ................
c170cf90:  00000000 00000000 00000000 00000000   ................
c170cfa0:  00000000 00000000 00000000 00000000   ................
c170cfb0:  00000000 00000000 00000000 00000000   ................
c170cfc0:  00000000 00000000 00000000 00000000   ................
c170cfd0:  00000000 00000000 00000000 00000000   ................
c170cfe0:  00000000 00000000 00000000 00000000   ................
c170cff0:  00000000 00000000 00000000 00000000   ..



作者: humjb_1983    時(shí)間: 2014-08-07 11:48
super皮波 發(fā)表于 2014-08-07 10:50
棧里的信息就不貼了
我現(xiàn)在的問(wèn)題是pgd對(duì)應(yīng)內(nèi)存地址中的值都是0,按理來(lái)說(shuō)不應(yīng)該都是0,應(yīng)該有一些地址空間是 ...

你的current進(jìn)程具體是什么進(jìn)程?
arm的pgd好像有2048項(xiàng),你這只打印了1024/4=256項(xiàng),你多打點(diǎn),因?yàn)榍懊娴亩际怯脩艨臻g的地址,很可能是沒(méi)有映射的,但最后的是內(nèi)核態(tài)的地址,是肯定映射好了的,理論上最后的一部分應(yīng)該是有東西的。。。
作者: goingstudy    時(shí)間: 2014-08-07 12:20
回復(fù) 1# humjb_1983

想請(qǐng)問(wèn)一下, 對(duì)于Xen 的dom0 怎樣配置kdump,常規(guī)的方式試了不行
   
作者: humjb_1983    時(shí)間: 2014-08-07 12:34
goingstudy 發(fā)表于 2014-08-07 12:20
回復(fù) 1# humjb_1983

想請(qǐng)問(wèn)一下, 對(duì)于Xen 的dom0 怎樣配置kdump,常規(guī)的方式試了不行

默認(rèn)的確實(shí)有問(wèn)題,需要對(duì)kdump的流程進(jìn)行修改才能支持。。。。
作者: super皮波    時(shí)間: 2014-08-07 14:05
回復(fù) 26# humjb_1983
確實(shí),剛才仔細(xì)看了看代碼,arm中的pgd_shift宏是21,一直以為是22呢,所以共有2048項(xiàng)

rd xxxx  1024  是讀1024項(xiàng),不是1024個(gè)字節(jié)

多謝humjb_1983兄


   
作者: humjb_1983    時(shí)間: 2014-08-07 14:33
super皮波 發(fā)表于 2014-08-07 14:05
回復(fù) 26# humjb_1983
確實(shí),剛才仔細(xì)看了看代碼,arm中的pgd_shift宏是21,一直以為是22呢,所以共有2048項(xiàng) ...

呵呵,那后面的1024項(xiàng)中有內(nèi)容么?

作者: super皮波    時(shí)間: 2014-08-07 15:15
回復(fù) 30# humjb_1983
必須有了,沒(méi)有不就粗大事了嘛

   
作者: goingstudy    時(shí)間: 2014-08-08 09:45
回復(fù) 28# humjb_1983
這。。。,是有補(bǔ)丁嗎,還是。。?

   
作者: humjb_1983    時(shí)間: 2014-08-08 10:02
goingstudy 發(fā)表于 2014-08-08 09:45
回復(fù) 28# humjb_1983
這。。。,是有補(bǔ)丁嗎,還是。。?

暫時(shí)沒(méi)看到補(bǔ)丁,需要自己修改。。
主要問(wèn)題是,xen中的dom0不是跑在ring 0上的,而kdump過(guò)程中需要分配物理內(nèi)存,此時(shí)dom0中原來(lái)的內(nèi)存分配方式就不管用了,需要使用超調(diào),還需要修改下相關(guān)的流程。。
作者: zhj1011    時(shí)間: 2014-08-13 10:44
用這個(gè)工具,反匯編查bug不錯(cuò)。
作者: humjb_1983    時(shí)間: 2014-08-13 12:34
zhj1011 發(fā)表于 2014-08-13 10:44
用這個(gè)工具,反匯編查bug不錯(cuò)。

呵呵,對(duì)的,有問(wèn)題歡迎一起討論。。。。
作者: blake326    時(shí)間: 2014-08-14 12:52
mark mark
作者: ckf513728912    時(shí)間: 2014-08-18 15:55
謝謝分享,近來(lái)也在學(xué)Crash工具。
作者: ArcLinux    時(shí)間: 2014-08-31 16:54

好文,學(xué)習(xí)下。
作者: ArcLinux    時(shí)間: 2014-08-31 16:54
收藏了!
作者: lanwei86e    時(shí)間: 2014-09-02 14:49
說(shuō)一下樓主辛苦了
作者: 圣鈺佳泰    時(shí)間: 2014-09-07 14:14
收藏了,給公司工程師看看




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2