Hello, yesterday I had the problem that a openwrt box (x86) has many processes with status D and reboot (even reboot -f) does not work. By default sysrq is not enabled in kernel and cant be made as module.
After some research someone in #openwrt got the idea to create a kernel panic (which works if automatic reboot on kernel panic is enabled, sysctl -n kernel.panic must have a value > 0) via a module described at the page here (http://www.unix.com/unix-dummies-questions-answers/131850-simulating-kernel-panic.html). I created a package which builds the kernel module panic.ko and after upload and insmod it and the box finally did a reboot. I think this module could be useful if no reboot works/sysrq not enabled because it can be created after image creation and works with simple upload/insmod. The patch for the package is attached. With best regards Christoph -- Linux User Group Wernigerode http://www.lug-wr.de/
diff -burN package2/kernel-panic/Makefile package/kernel-panic/Makefile
--- package.old/kernel-panic/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ package/kernel-panic/Makefile 2011-12-22 08:52:27.267271121 +0100
@@ -0,0 +1,53 @@
+#
+# Copyright (C) 2008 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/kernel.mk
+
+PKG_NAME:=kernel-panic
+PKG_RELEASE:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define KernelPackage/kernel-panic
+ SUBMENU:=Other modules
+ TITLE:=Kernel Panic module
+ DEPENDS:=@LINUX_2_6
+ FILES:=$(PKG_BUILD_DIR)/panic.$(LINUX_KMOD_SUFFIX)
+ KCONFIG:=
+endef
+
+define KernelPackage/kernel-panic/description
+ Kernel module to generate a kernel panic
+endef
+
+EXTRA_KCONFIG:= \
+ CONFIG_KERNEL_PANIC=m
+
+EXTRA_CFLAGS:= \
+ $(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=m,%,$(filter %=m,$(EXTRA_KCONFIG)))) \
+ $(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=y,%,$(filter %=y,$(EXTRA_KCONFIG)))) \
+
+MAKE_OPTS:= \
+ ARCH="$(LINUX_KARCH)" \
+ CROSS_COMPILE="$(TARGET_CROSS)" \
+ SUBDIRS="$(PKG_BUILD_DIR)" \
+ EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \
+ $(EXTRA_KCONFIG)
+
+define Build/Prepare
+ mkdir -p $(PKG_BUILD_DIR)
+ $(CP) ./src/* $(PKG_BUILD_DIR)/
+endef
+
+define Build/Compile
+ $(MAKE) -C "$(LINUX_DIR)" \
+ $(MAKE_OPTS) \
+ modules
+endef
+
+$(eval $(call KernelPackage,kernel-panic))
diff -burN package.old/kernel-panic/src/Kconfig package/kernel-panic/src/Kconfig
--- package.old/kernel-panic/src/Kconfig 1970-01-01 01:00:00.000000000 +0100
+++ package/kernel-panic/src/Kconfig 2011-12-22 08:47:30.879261754 +0100
@@ -0,0 +1,2 @@
+config KERNEL_PANIC
+ tristate "Kernel Panic module"
diff -burN package.old/kernel-panic/src/Makefile package/kernel-panic/src/Makefile
--- package.old/kernel-panic/src/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ package/kernel-panic/src/Makefile 2011-12-22 08:54:11.959274430 +0100
@@ -0,0 +1 @@
+obj-${CONFIG_KERNEL_PANIC} += panic.o
diff -burN package.old/kernel-panic/src/panic.c package/kernel-panic/src/panic.c
--- package.old/kernel-panic/src/panic.c 1970-01-01 01:00:00.000000000 +0100
+++ package/kernel-panic/src/panic.c 2011-12-21 22:57:45.000000000 +0100
@@ -0,0 +1,10 @@
+// panic.c
+#include <linux/module.h>
+
+static int __init panic_init_module(void) {
+ panic(" panic has been called");
+}
+
+module_init(panic_init_module);
+MODULE_LICENSE("GPL");
+
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/mailman/listinfo/openwrt-devel
