1 #!/bin/sh /etc/rc.common
6 EXTRA_COMMANDS="status"
7 EXTRA_HELP=" status Print crashkernel status"
16 config_get_bool enabled "$cfg" enabled 1
17 config_get_bool save_dmesg "$cfg" save_dmesg 1
18 config_get_bool save_vmcore "$cfg" save_vmcore 0
20 [ "$enabled" -gt 0 ] || return 2
22 [ "$save_dmesg" -gt 0 ] || [ "$save_vmcore" -gt 0 ] || return 2
24 config_get path "$cfg" path "/"
26 [ -d "$path" ] || mkdir -p "$path" 2>/dev/null || return 1
36 config_get_bool enabled "$cfg" enabled 1
37 [ "$enabled" -gt 0 ] || return
39 config_get_bool save_dmesg "$cfg" save_dmesg 1
40 config_get_bool save_vmcore "$cfg" save_vmcore 0
41 config_get path "$cfg" path "/"
43 timestamp=$(date "+%Y%m%dT%H%M%S")
45 if [ "$save_vmcore" -eq 1 ]; then
46 echo -n "Saving vmcore (this may take a while)..."
47 # would like 'sparse' but busybox doesn't support it
48 dd if=/proc/vmcore of="$path/vmcore-$timestamp" conv=fsync bs=1M
52 if [ "$save_dmesg" -eq 1 ]; then
53 vmcore-dmesg /proc/vmcore > "$path/dmesg-$timestamp"
65 if [ -r "$kernel" ]; then
70 kernel="$(find_mtd_part kernel)"
71 if [ -r "$kernel" ]; then
76 for voldir in /sys/class/ubi/ubi*_*; do
77 [ ! -e "$voldir" ] && continue
78 if [ "$(cat "${voldir}/name")" = "kernel" ]; then
79 kernel="/dev/$(basename "$voldir")"
92 kernel="$(find_kernel)"
93 [ $? -gt 0 ] && return 1
97 grep -q "crashkernel=" /proc/cmdline || return 1
98 append_cmdline="1 irqpoll reset_devices maxcpus=1"
101 append_cmdline="1 maxcpus=1 reset_devices"
104 kexec -p "$kernel" --reuse-cmdline --append="$append_cmdline"
111 if [ ! -e /sys/kernel/kexec_crash_loaded ]; then
115 if [ -e /proc/vmcore ]; then
117 config_foreach run_kdump kdump
120 config_foreach verify_kdump kdump
122 [ $retval = 1 ] && return 1
123 [ $retval = 0 ] && load_crashkernel
129 [ "$(cat /sys/kernel/kexec_crash_loaded)" = "1" ] || return
131 if [ -e "$BOOT_IMAGE" ]; then
132 kexec -p -u "$BOOT_IMAGE"
139 if [ ! -e /sys/kernel/kexec_crash_loaded ]; then
140 echo "crashdump not supported by kernel"
144 if [ $(cat /sys/kernel/kexec_crash_size) -eq 0 ]; then
145 echo "memory for crashdump kernel not reserved!"
146 echo "check crashkernel= kernel cmdline parameter"
147 echo "(a reboot is required after installing kdump)"
151 kernel="$(find_kernel)"
152 if [ $? -gt 0 ]; then
153 echo "cannot find kernel image"
156 echo "using kernel image $kernel"
159 echo -n "kdump configuration is "
162 if [ $retval = 0 ]; then
163 if [ "$(config_foreach echo kdump)" ]; then
164 config_foreach verify_kdump kdump
171 if [ $retval = 0 ]; then
173 elif [ $retval = 2 ]; then
179 echo -n "kexec crash kernel "
180 if [ "$(cat /sys/kernel/kexec_crash_loaded)" = "0" ]; then