#!/bin/bash

#
#  append to kernel param
#  panic=20 memmap=256K$0xfc0000 ramoops.mem_address=0xfc0000 ramoops.mem_size=0x40000
#  for grub/grub2
#  panic=20 memmap=256K\$0xfc0000 ramoops.mem_address=0xfc0000 ramoops.mem_size=0x40000
#

case "$1" in
  start)
	[ -d /dev/pstore ] || mkdir /dev/pstore
	grep -q pstore /proc/filesystems && ! grep -q pstore /proc/mounts && mount -t pstore none /dev/pstore

	modprobe ramoops mem_address=0xfc0000 mem_size=0x40000 record_size=8192 console_size=8192
	D="`date +%Y%m%d%H%M%S`"
	for i in /dev/pstore/console-ramoops* ; do
	[ -f "$i" ] && cp "$i" /var/log/ramoops.$D.console-ramoops${i##*console-ramoops}
	done
	for i in /dev/pstore/dmesg-ramoops-* ; do
	  [ -n "$i" -a -f "$i" ] || continue
	  DF="/var/log/ramoops$D${i##*/}"
	  cp "$i" "$DF" && rm "$i"
	  [ -f "$DF" -a "$DF" != "${DF%.enc.z}" ] && deflate-ramoops "$DF" >"${DF%.enc.z}" && rm "$DF"
	done 
	  echo 10 >/proc/sys/kernel/panic
	  echo 1 >/proc/sys/kernel/panic_on_oops
	  echo 1 >/proc/sys/kernel/panic_on_io_nmi
	  echo 0 >/proc/sys/vm/panic_on_oom
	  echo 1 >/proc/sys/kernel/panic_on_unrecovered_nmi 
	;;
  stop)
  	rmmod ramoops
	  echo 0 >/proc/sys/kernel/panic
	  echo 0 >/proc/sys/kernel/panic_on_oops
	  ;;
  *)
  	echo "$0 start|stop"
esac
