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