wth0722 发表于 2014-09-15 10:56

如何產生vmcore

各位好,請問一下當我已經把下面config都選入了,但產生panic時,vmcore還是無法產生出,想請教各位是什麼原因嗎?

‧         Boot options--->
   ‧         [*] Kexec system call (EXPERIMENTAL)
   ‧         [*] Export atags in procfs (NEW)
‧         Kernel hacking--->
   ‧         [*] Compile the kernel with debug info


BTW. 我目前是在 ARM Qemu上面作測試

Tinnal 发表于 2014-09-15 12:48

你这仅仅把KEXEC打开了。自己去百度一下KDUMP相关的文章吧。工作还差很多呢。

arm-linux-gcc 发表于 2014-09-15 12:50

你需要crash kernel,在first kernel起来之后,需要用kexec加载crash kernel
然后first kernel panic时,才会去执行crash kernel
crash kernel成功启动之后,才能看到vmcore

wth0722 发表于 2014-09-15 16:29

回复 3# arm-linux-gcc

感謝回應

目前的平台為Qemu+ARM

是有加入crashkernel=64M@0x0 到 command-line上

以及也porting好了kexec-tool使用下面方式去執行

在版子上使用以下方式執行

/home/app09/workspaces/kexec-tools-2.0.7/build/sbin/kexec -p /home/app09/linux-stable/vmlinux --initrd=/home/app09/ramdisk_16M --append="root=/dev/ram0 rw user_debug=31 console=ttyAMA0,115200n8"

發現會出現下面這錯誤Could not find a free area of memory of 0x1000 bytes...
locate_hole failed
請問有誰有在Qemu+ ARM是成功的,可否分享一下心得


   

arm-linux-gcc 发表于 2014-09-15 16:36

回复 4# wth0722


0地址肯定是不行的
arm linux的crashkernel的保留地址的实现有bug,不能自动分配,只能手动指定


你把完整的内核启动log贴出来


wth0722 发表于 2014-09-15 17:31

回复 5# arm-linux-gcc


我有試過crashkernel=128M@16M依然是不行

看了一下上面吶command會作哪些事情

其實他就是去保留那塊記憶體而已(在開機時會作)

arm-linux-gcc 发表于 2014-09-15 19:47

回复 6# wth0722


    放在low memory的中间,这是最保险的

Tinnal 发表于 2014-09-15 22:49

你的内存有多大呀,是不是真没有这么一大块内存? 建议看看/proc/meminfo, 或在内存查找的过程打点信息。盲目去试不太可取。

wth0722 发表于 2014-09-16 19:25

回复 7# arm-linux-gcc


    已經放到low_memory中間了

    也確定記憶體有這麼大的空間

    目前查的方向為reserve_crashkernel()這邊

    cmd為crashkernel=64M@32M

    看到printk("crash_base=0x%08x , crash_size=0x%0x8\n",crash_base,crash_size);

    crash_base=0, 0x20000008

    但是下面console印出的又是對的
    Reserving 64MB of memory at 32MB for crashkernel (System RAM: 128MB)

    我再查查看reserve_crashkernel()這邊

wth0722 发表于 2014-09-16 19:51

回复 9# wth0722


它是對的

因為它的型態是unsigned long long

印出來是必須是要轉為(unsigned long)才會正確

所以我再看看有沒有其他人在Qemu上試成功好了
页: [1]
查看完整版本: 如何產生vmcore