vmcore_init() failure using uImage on fsl_booke

Dennis Flynn dennis.flynn at ericsson.com
Tue Sep 13 17:33:42 EDT 2011


I am seeing a problem with the kdump kernel running on my Freescale mpc8536 based board.
Specifically when the crash kernel boots after a forced panic, vmcore fails to initialize.
The following errors are displayed by vmcore_init()

Warning: Core image elf header not found
Kdump: vmcore not initialized

I only see this problem when loading a uImage-ppc image type. The problem does not occur when loading a elf-ppc image type (i.e. vmlinux).
I am using kernel version 2.6.39 and kexec-tools version as of 6/16/2011.

The problem seems to one of vmcore_init not being able to locate the ELF image header within the old kernel (/dev/oldmem).
See additional details below.

Reserved crash kernel memory: crashkernel=256M at 512

uImage file built as below to match the reserved memory area:

lxapp-2:lc$ mkimage -A ppc -O linux -T kernel -C gzip -a 0x20000000 -e 0x20000000 -n Linux- -d vmlinux.bin.gz uImage.kdump
Image Name:   Linux-
Created:      Mon Sep 12 14:06:23 2011
Image Type:   PowerPC Linux Kernel Image (gzip compressed)
Data Size:    4842545 Bytes = 4729.05 kB = 4.62 MB
Load Address: 20000000
Entry Point:  20000000

After loading the crash kernel (uImage.kdump) I then force a kernel panic and the crash kernel is invoked as expected. However it appears as though the crash kernel is having trouble accessing some of the memory of the original kernel (/dev/oldmem). Specifically the test for the ELF header magic number is failing during vmcore_init(). As a result /proc/vmcore is not available within the crash kernel and hence I cannot create a dump of the original kernel. Here's the errors I am seeing. Note I have augmented the debug prints slightly to verify the inability to see the kernel image elf header.

Reading 16 bytes from address 0x000000002086E000 within /dev/oldmem
00 00 00 00 00 00 00 00
Warning: Core image elf header not found
Kdump: vmcore not initialized

Here's the crash kernel bootline showing the elfcorehdr argument passed to the crash kernel.

Kernel command line: irqpoll maxcpus=1 reset_devices boot_mode=crash root=/dev/nfs  nfsroot=  ip=  rbn_net_dev=eth0 console=ttyS0,115200 dump_type=kernel dump_server= dump_server_port=9999 hwether=x board_name=wolf_lc slot_number=255  elfcorehdr=532920K savemaxmem=2048M
To help me debug all of this I added some debug prints to the powerpc kexec code (default_machine_kexec()) so I could verify the kernel kimage and memory segment contents. See below.

Calling reboot_code_buffer (vaddr:0xe086f000): page_list=0x00000004, reboot_code_buffer_phys=0x2086f000, start=0x2fffa724

Dumping kimage @ 0xdfbdf800
  head: 0x00000004
  entry: 0xdfbdf800
  last_entry: 0xdfbdf800
  destination: 0x00000000
  start: 0x2fffa724
  control_code_page: 0xc0c97de0
  swap_page: 0x  (null)
  control_page: 0x2086ffff
  type: 0x00000001
  preserve_context: 0x00000000
nr_segments = 5
segment[0].buf   = 48831008
segment[0].bufsz = 75d640
segment[0].mem   = 0x20000000
segment[0].memsz = 85e000
segment[1].buf   = 1007d988
segment[1].bufsz = 10000
segment[1].mem   = 0x2085e000
segment[1].memsz = 10000
segment[2].buf   = 1007d350
segment[2].bufsz = 400
segment[2].mem   = 0x2086e000
segment[2].memsz = 1000
segment[3].buf   = 10093fa8
segment[3].bufsz = 2b62
segment[3].mem   = 0x217fd000
segment[3].memsz = 3000
segment[4].buf   = 1008e380
segment[4].bufsz = 5c20
segment[4].mem   = 0x2fffa000
segment[4].memsz = 6000

Thanks for any help,

More information about the kexec mailing list