kexec and arm64 advice

Simon T smith.not.western at gmail.com
Mon Oct 24 07:42:45 PDT 2016


Hi,

I'm trying to get kexec working on a cross-compiled arm64/aarch64
system, using Linux kernel 4.4.23. I'm using kexec-tool's master
branch (commit e345e27417db00a9e754ca0ca14b2ec87d0552f7 from
https://git.kernel.org/cgit/linux/kernel/git/geoff/kexec-tools.git). I
initially tried using the patches for linux-kexec's kexec-13 branch
with manual massaging in some spots because kexec-13 is for 4.4.0 not
4.4.23. Both tools and kernel appear to build fine, however when it
comes time to kexec, I encounter this message: "kexec_load failed:
Function not implemented"

Searching through the patches, I don't find any reference to kexec_load itself.

Should I be applying a different version of kexec-tools, or
linux-kexec patches, to my build? (I'm restricted to 4.4.23 as the
base kernel)

Is there a way post compile to check if the kexec_load function is
implemented, aside from actually deploying the image and calling
kexec? I've run strings against the Image but it doesn't give an exact
match for kexec_load (see below).

Anything else I should be looking at?

# kexec -l /mnt/target/boot/vmlinux --initrd=/tmp/root.sfs
Modified cmdline:root=/dev/mmcblk0p2
Unable to find /proc/device-tree/chosen/[linux,]stdout-path, printing
from purgatory is disabled
kexec_load failed: Function not implemented
entry       = 0x8095f000 flags = 0xb70000
nr_segments = 4
segment[0].buf   = 0x7fa0f64010
segment[0].bufsz = 0x7fbc00
segment[0].mem   = 0x80080000
segment[0].memsz = 0x8d0000
segment[1].buf   = 0x20cc0830
segment[1].bufsz = 0xe515
segment[1].mem   = 0x80950000
segment[1].memsz = 0xf000
segment[2].buf   = 0x20ccf840
segment[2].bufsz = 0x6080
segment[2].mem   = 0x8095f000
segment[2].memsz = 0x7000
segment[3].buf   = 0x7f9e843010
segment[3].bufsz = 0x2720000
segment[3].mem   = 0xc0000000
segment[3].memsz = 0x2720000

(I've also tried kexec -l with boot/Image instead of boot/vmlinux)

$ grep -i kexec .config
CONFIG_KERNEL_KEXEC=y
CONFIG_PACKAGE_kexec-tools=y
CONFIG_KEXEC_TOOLS_TARGET_NAME="aarch64"
# CONFIG_KEXEC_TOOLS_kdump is not set
CONFIG_KEXEC_ZLIB=y
# CONFIG_KEXEC_LZMA is not set

$ strings <build_dir>/arch/arm64/boot/Image  | grep kexec_load
Wcompat_sys_kexec_load
Wsys_kexec_load

Thanks!

Simon



More information about the kexec mailing list