如何產生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上面作測試 你这仅仅把KEXEC打开了。自己去百度一下KDUMP相关的文章吧。工作还差很多呢。 你需要crash kernel,在first kernel起来之后,需要用kexec加载crash kernel
然后first kernel panic时,才会去执行crash kernel
crash kernel成功启动之后,才能看到vmcore 回复 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是成功的,可否分享一下心得
回复 4# wth0722
0地址肯定是不行的
arm linux的crashkernel的保留地址的实现有bug,不能自动分配,只能手动指定
你把完整的内核启动log贴出来
回复 5# arm-linux-gcc
我有試過crashkernel=128M@16M依然是不行
看了一下上面吶command會作哪些事情
其實他就是去保留那塊記憶體而已(在開機時會作)
回复 6# wth0722
放在low memory的中间,这是最保险的 你的内存有多大呀,是不是真没有这么一大块内存? 建议看看/proc/meminfo, 或在内存查找的过程打点信息。盲目去试不太可取。 回复 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()這邊 回复 9# wth0722
它是對的
因為它的型態是unsigned long long
印出來是必須是要轉為(unsigned long)才會正確
所以我再看看有沒有其他人在Qemu上試成功好了
页:
[1]