diff options
| author | Wenlin Kang <wenlin.kang@windriver.com> | 2015-12-11 14:16:53 +0800 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-12-16 12:12:16 +0000 |
| commit | a444eb5951112a4900665677b3bff323a8828e3f (patch) | |
| tree | 272e6a91b59d954903c9702ed3267c7d7e8d81a3 | |
| parent | be9f7f960c4a0c7f6a7693ce478d75f7464f7e70 (diff) | |
| download | poky-a444eb5951112a4900665677b3bff323a8828e3f.tar.gz | |
kexec-tools: added the script kdump
Added the script file kdump,it provides the follow support:
1. Load a kdump kernel image into memory;
2. Copy away vmcore when system panic.
(From OE-Core rev: c2492edcb9366ed1741fc6be7d41bc17844041fd)
Signed-off-by: Wenlin Kang <wenlin.kang@windriver.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
| -rw-r--r-- | meta/recipes-kernel/kexec/kexec-tools.inc | 5 | ||||
| -rwxr-xr-x | meta/recipes-kernel/kexec/kexec-tools/kdump | 163 | ||||
| -rw-r--r-- | meta/recipes-kernel/kexec/kexec-tools/kdump.conf | 18 | ||||
| -rw-r--r-- | meta/recipes-kernel/kexec/kexec-tools_2.0.10.bb | 8 |
4 files changed, 193 insertions, 1 deletions
diff --git a/meta/recipes-kernel/kexec/kexec-tools.inc b/meta/recipes-kernel/kexec/kexec-tools.inc index 7797a25738..758a3a78b8 100644 --- a/meta/recipes-kernel/kexec/kexec-tools.inc +++ b/meta/recipes-kernel/kexec/kexec-tools.inc | |||
| @@ -8,7 +8,10 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=ea5bed2f60d357618ca161ad539f7c0a \ | |||
| 8 | file://kexec/kexec.c;beginline=1;endline=20;md5=af10f6ae4a8715965e648aa687ad3e09" | 8 | file://kexec/kexec.c;beginline=1;endline=20;md5=af10f6ae4a8715965e648aa687ad3e09" |
| 9 | DEPENDS = "zlib xz" | 9 | DEPENDS = "zlib xz" |
| 10 | 10 | ||
| 11 | SRC_URI = "${KERNELORG_MIRROR}/linux/utils/kernel/kexec/kexec-tools-${PV}.tar.gz" | 11 | SRC_URI = "${KERNELORG_MIRROR}/linux/utils/kernel/kexec/kexec-tools-${PV}.tar.gz \ |
| 12 | file://kdump \ | ||
| 13 | file://kdump.conf \ | ||
| 14 | " | ||
| 12 | 15 | ||
| 13 | PR = "r1" | 16 | PR = "r1" |
| 14 | 17 | ||
diff --git a/meta/recipes-kernel/kexec/kexec-tools/kdump b/meta/recipes-kernel/kexec/kexec-tools/kdump new file mode 100755 index 0000000000..3fb133fb35 --- /dev/null +++ b/meta/recipes-kernel/kexec/kexec-tools/kdump | |||
| @@ -0,0 +1,163 @@ | |||
| 1 | #! /bin/sh | ||
| 2 | # | ||
| 3 | # kdump | ||
| 4 | # | ||
| 5 | # Description: The kdump script provides the support: | ||
| 6 | # 1. Load a kdump kernel image into memory; | ||
| 7 | # 2. Copy away vmcore when system panic. | ||
| 8 | # | ||
| 9 | |||
| 10 | #default | ||
| 11 | KDUMP_KVER="`uname -r`" | ||
| 12 | KDUMP_KIMAGE="/boot/bzImage-${KDUMP_KVER}" | ||
| 13 | KDUMP_CMDLINE="`cat /proc/cmdline`" | ||
| 14 | KDUMP_CMDLINE_APPEND="kdump_needed maxcpus=1 irqpoll reset_devices" | ||
| 15 | KDUMP_VMCORE_PATH="/var/crash/`date +"%Y-%m-%d"`" | ||
| 16 | |||
| 17 | #get right kernel image | ||
| 18 | march="`uname -m`" | ||
| 19 | case ${march} in | ||
| 20 | x86*|i?86) | ||
| 21 | ;; | ||
| 22 | *) | ||
| 23 | KDUMP_KIMAGE="/boot/uImage-${KDUMP_KVER}" | ||
| 24 | ;; | ||
| 25 | esac | ||
| 26 | |||
| 27 | KEXEC=usr/sbin/kexec | ||
| 28 | KEXEC_ARGS="-p" | ||
| 29 | |||
| 30 | MAKEDUMPFILE=/usr/bin/makedumpfile | ||
| 31 | MAKEDUMPFILE_ARGS="-E -d 1" | ||
| 32 | |||
| 33 | LOGGER="logger -p info -t kdump" | ||
| 34 | |||
| 35 | if [ -f /etc/sysconfig/kdump.conf ]; then | ||
| 36 | . /etc/sysconfig/kdump.conf | ||
| 37 | fi | ||
| 38 | |||
| 39 | do_check() | ||
| 40 | { | ||
| 41 | #check makedumpfile | ||
| 42 | if [ ! -e ${MAKEDUMPFILE} -o ! -x ${MAKEDUMPFILE} ] ;then | ||
| 43 | echo "No makedumpfile found." | ||
| 44 | return 1; | ||
| 45 | fi | ||
| 46 | |||
| 47 | #check kexec | ||
| 48 | if [ ! -e ${KEXEC} -o ! -x ${KEXEC} ] ;then | ||
| 49 | echo "No kexec found." | ||
| 50 | return 1; | ||
| 51 | fi | ||
| 52 | |||
| 53 | #check whether kdump kernel image exists on the system | ||
| 54 | if [ ! -f ${KDUMP_KIMAGE} ]; then | ||
| 55 | echo "No kdump kernel image found." | ||
| 56 | return 1 | ||
| 57 | fi | ||
| 58 | } | ||
| 59 | |||
| 60 | do_save_vmcore() | ||
| 61 | { | ||
| 62 | mkdir -p ${KDUMP_VMCORE_PATH} | ||
| 63 | echo "Saving a vmcore to ${KDUMP_VMCORE_PATH}." | ||
| 64 | |||
| 65 | ${MAKEDUMPFILE} ${MAKEDUMPFILE_ARGS} /proc/vmcore ${KDUMP_VMCORE_PATH}/vmcore-"`date +"%H:%M:%S"`" | ||
| 66 | # cp --sparse=always /proc/vmcore ${KDUMP_VMCORE_PATH}/vmcore-"`date +"%H:%M:%S"`" | ||
| 67 | rc=$? | ||
| 68 | if [ ${rc} == 0 ]; then | ||
| 69 | ${LOGGER} "Saved a vmcore to ${KDUMP_VMCORE_PATH}." | ||
| 70 | else | ||
| 71 | ${LOGGER} "Failed to save vmcore!" | ||
| 72 | fi | ||
| 73 | return ${rc} | ||
| 74 | } | ||
| 75 | |||
| 76 | do_start() | ||
| 77 | { | ||
| 78 | #check file | ||
| 79 | do_check | ||
| 80 | |||
| 81 | #check whether the running kernel supports kdump. | ||
| 82 | if [ ! -e /sys/kernel/kexec_crash_loaded ]; then | ||
| 83 | echo "Kdump isn't supported on the running kernel!!!" | ||
| 84 | ${LOGGER} "Kdump isn't supported on the running kernel!!!" | ||
| 85 | return 1 | ||
| 86 | fi | ||
| 87 | |||
| 88 | #check whether kdump kernel image has been loaded | ||
| 89 | rc=`cat /sys/kernel/kexec_crash_loaded` | ||
| 90 | if [ ${rc} != 0 ]; then | ||
| 91 | echo "Kdump is already running."; | ||
| 92 | ${LOGGER} "Kdump is already running." | ||
| 93 | return 0 | ||
| 94 | fi | ||
| 95 | |||
| 96 | #check the running kernel cmdline option,insure "crashkenrel=" always set. | ||
| 97 | grep -q crashkernel= /proc/cmdline | ||
| 98 | if [ $? != 0 ]; then | ||
| 99 | echo "Kdump isn't supported on the running kernel,please check boot option!!!" | ||
| 100 | ${LOGGER} "Kdump isn't supported on the running kernel,please check boot option!!!" | ||
| 101 | return 1 | ||
| 102 | fi | ||
| 103 | |||
| 104 | #handle kdump cmdline parameters, remove some useless options | ||
| 105 | kcmdline="" | ||
| 106 | for x in `cat /proc/cmdline`; do | ||
| 107 | case $x in | ||
| 108 | crashkernel*) | ||
| 109 | ;; | ||
| 110 | *) | ||
| 111 | kcmdline="${kcmdline} $x" | ||
| 112 | ;; | ||
| 113 | esac | ||
| 114 | done | ||
| 115 | |||
| 116 | KDUMP_CMDLINE="${kcmdline} ${KDUMP_CMDLINE_APPEND}" | ||
| 117 | |||
| 118 | #Load the kdump kernel image | ||
| 119 | ${KEXEC} ${KEXEC_ARGS} "${KDUMP_KIMAGE}" --append="${KDUMP_CMDLINE}" | ||
| 120 | if [ $? != 0 ]; then | ||
| 121 | echo "Failed to load kdump kernel!" | ||
| 122 | ${LOGGER} "Failed to load kdump kernel!" | ||
| 123 | return 1 | ||
| 124 | fi | ||
| 125 | |||
| 126 | echo "Kdump started up." | ||
| 127 | ${LOGGER} "Kdump started up." | ||
| 128 | } | ||
| 129 | |||
| 130 | do_stop() | ||
| 131 | { | ||
| 132 | ${KEXEC} -p -u 2>/dev/null | ||
| 133 | if [ $? == 0 ]; then | ||
| 134 | echo "Kdump has been stopped." | ||
| 135 | ${LOGGER} "Kdump has been stopped." | ||
| 136 | else | ||
| 137 | echo "Failed to stop kdump!" | ||
| 138 | ${LOGGER} "Failed to stop kdump!" | ||
| 139 | fi | ||
| 140 | } | ||
| 141 | |||
| 142 | case "$1" in | ||
| 143 | start) | ||
| 144 | if [ -s /proc/vmcore ]; then | ||
| 145 | do_save_vmcore | ||
| 146 | reboot | ||
| 147 | else | ||
| 148 | do_start | ||
| 149 | fi | ||
| 150 | ;; | ||
| 151 | restart) | ||
| 152 | do_stop | ||
| 153 | do_start | ||
| 154 | ;; | ||
| 155 | stop) | ||
| 156 | do_stop | ||
| 157 | ;; | ||
| 158 | *) | ||
| 159 | echo $"Usage: $0 {start|stop|restart}" | ||
| 160 | exit 1 | ||
| 161 | esac | ||
| 162 | |||
| 163 | exit $? | ||
diff --git a/meta/recipes-kernel/kexec/kexec-tools/kdump.conf b/meta/recipes-kernel/kexec/kexec-tools/kdump.conf new file mode 100644 index 0000000000..42a2435b96 --- /dev/null +++ b/meta/recipes-kernel/kexec/kexec-tools/kdump.conf | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | #the kdump kernel version string. | ||
| 2 | #KDUMP_KVER="`uname -r`" | ||
| 3 | |||
| 4 | #this will be passed to the kdump kernel as kdump kernel command line, it | ||
| 5 | #usually comes from /proc/cmdline | ||
| 6 | #KDUMP_CMDLINE="`cat /proc/cmdline`" | ||
| 7 | |||
| 8 | # append arguments to the kdump commandline | ||
| 9 | #KDUMP_CMDLINE_APPEND="kdump_needed maxcpus=1 irqpoll reset_devices" | ||
| 10 | |||
| 11 | #the kernel image for kdump | ||
| 12 | #KDUMP_KIMAGE="/boot/bzImage-${KDUMP_KVER}" | ||
| 13 | |||
| 14 | #Where to save the vmcore | ||
| 15 | #KDUMP_VMCORE_PATH="/var/crash/`date +"%Y-%m-%d"`" | ||
| 16 | |||
| 17 | #the arguments to makedumpfile | ||
| 18 | MAKEDUMPFILE_ARGS="--dump-dmesg -x /boot/vmlinux-`uname -r`" | ||
diff --git a/meta/recipes-kernel/kexec/kexec-tools_2.0.10.bb b/meta/recipes-kernel/kexec/kexec-tools_2.0.10.bb index ffdb983a41..f21121733f 100644 --- a/meta/recipes-kernel/kexec/kexec-tools_2.0.10.bb +++ b/meta/recipes-kernel/kexec/kexec-tools_2.0.10.bb | |||
| @@ -17,6 +17,14 @@ PACKAGES =+ "kexec kdump vmcore-dmesg" | |||
| 17 | ALLOW_EMPTY_${PN} = "1" | 17 | ALLOW_EMPTY_${PN} = "1" |
| 18 | RRECOMMENDS_${PN} = "kexec kdump vmcore-dmesg" | 18 | RRECOMMENDS_${PN} = "kexec kdump vmcore-dmesg" |
| 19 | 19 | ||
| 20 | FILES_${PN} =+ "${sysconfig}/init.d/kdump ${sysconfig}/sysconfig/kdump.conf" | ||
| 20 | FILES_kexec = "${sbindir}/kexec" | 21 | FILES_kexec = "${sbindir}/kexec" |
| 21 | FILES_kdump = "${sbindir}/kdump" | 22 | FILES_kdump = "${sbindir}/kdump" |
| 22 | FILES_vmcore-dmesg = "${sbindir}/vmcore-dmesg" | 23 | FILES_vmcore-dmesg = "${sbindir}/vmcore-dmesg" |
| 24 | |||
| 25 | do_install_append () { | ||
| 26 | install -d ${D}${sysconfdir}/init.d | ||
| 27 | install -m 0755 ${WORKDIR}/kdump ${D}${sysconfdir}/init.d/kdump | ||
| 28 | install -d ${D}${sysconfdir}/sysconfig | ||
| 29 | install -m 0644 ${WORKDIR}/kdump.conf ${D}${sysconfdir}/sysconfig | ||
| 30 | } | ||
