summaryrefslogtreecommitdiff
path: root/package
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2010-06-26 17:10:02 +0200
committerWaldemar Brodkorb <wbx@openadk.org>2010-06-26 17:10:02 +0200
commit7fe6a59dfd76c9b6902b748b2db8d63d70ee8525 (patch)
treef98c8d8f14c8be0c24ccf18f71fa8d0f4acf077d /package
parent47e110abbf0d3142d737e753833d0d6239965b2a (diff)
finetune kernel configuration, enable initramfs rootfs and enable reset button
alix2d has a reset button, which might be used to startup a rescue system or anything you think about. add a small daemon from ipcop forum to implement this. See: http://www.ipcop-forum.de/forum/viewtopic.php?f=7&t=19183&hilit=alixswitch&start=30 finetune kernel configuration, enable MFGPT timers. Disable unsupported MTRR. Enable watchdog. Enable initramfs and initramfs+piggyback for alix targets.
Diffstat (limited to 'package')
-rw-r--r--package/Config.in1
-rw-r--r--package/alix-switch/Makefile35
-rw-r--r--package/alix-switch/files/alix-switch15
-rw-r--r--package/alix-switch/files/alix-switch.init27
-rw-r--r--package/alix-switch/files/alix-switch.postinst3
-rw-r--r--package/alix-switch/src/alix-switchd.c111
-rw-r--r--package/cfgfs/Makefile2
-rw-r--r--package/grub-bin/Makefile2
8 files changed, 194 insertions, 2 deletions
diff --git a/package/Config.in b/package/Config.in
index 8922d7900..3c477c70e 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -16,6 +16,7 @@ config ADK_ENABLE_IPV6
exception proves the rule. ;)
menu "Basesystem"
+source "package/alix-switch/Config.in"
source "package/adkinstall/Config.in"
source "package/base-files/Config.in"
source "package/base-files/Config.in.manual"
diff --git a/package/alix-switch/Makefile b/package/alix-switch/Makefile
new file mode 100644
index 000000000..442d2d3af
--- /dev/null
+++ b/package/alix-switch/Makefile
@@ -0,0 +1,35 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include ${TOPDIR}/rules.mk
+
+PKG_NAME:= alix-switch
+PKG_VERSION:= 1.0
+PKG_RELEASE:= 1
+PKG_DESCR:= simple daemon listening on button events
+PKG_SECTION:= base
+
+PKG_TARGET_DEPENDS:= alix
+
+NO_DISTFILES:= 1
+
+include ${TOPDIR}/mk/package.mk
+
+$(eval $(call PKG_template,ALIX_SWITCH,${PKG_NAME},${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
+
+PKGDFLT_ALIX_SWITCH= y
+
+CONFIG_STYLE:= manual
+BUILD_STYLE:= manual
+INSTALL_STYLE:= manual
+
+do-build:
+ ${TARGET_CC} -Wall ${TCPPFLAGS} ${TCFLAGS} \
+ -o ${WRKBUILD}/alix-switchd ${WRKBUILD}/alix-switchd.c
+
+do-install:
+ ${INSTALL_DIR} ${IDIR_ALIX_SWITCH}/usr/sbin ${IDIR_ALIX_SWITCH}/etc
+ ${INSTALL_BIN} ${WRKBUILD}/alix-switchd ${IDIR_ALIX_SWITCH}/usr/sbin
+ ${INSTALL_BIN} ./files/alix-switch ${IDIR_ALIX_SWITCH}/etc
+
+include ${TOPDIR}/mk/pkg-bottom.mk
diff --git a/package/alix-switch/files/alix-switch b/package/alix-switch/files/alix-switch
new file mode 100644
index 000000000..ad439a221
--- /dev/null
+++ b/package/alix-switch/files/alix-switch
@@ -0,0 +1,15 @@
+#!/bin/sh
+# launched by alix-switchd in case of button event
+
+case "$1" in
+ on)
+ echo "alix-switch: on"
+ ;;
+ off)
+ echo "alix-switch: off"
+ ;;
+ *)
+ echo "Usage: $0 {on|off}"
+ ;;
+esac
+exit 0
diff --git a/package/alix-switch/files/alix-switch.init b/package/alix-switch/files/alix-switch.init
new file mode 100644
index 000000000..c783a1be5
--- /dev/null
+++ b/package/alix-switch/files/alix-switch.init
@@ -0,0 +1,27 @@
+#!/bin/sh
+#PKG alix-switch
+#INIT 10
+
+. /etc/rc.conf
+
+case $1 in
+autostop) ;;
+autostart)
+ test x"${alix_switch:-NO}" = x"NO" && exit 0
+ exec sh $0 start
+ ;;
+start)
+ alix-switchd -d
+ ;;
+stop)
+ pkill alix-switchd
+ ;;
+restart)
+ sh $0 stop
+ sh $0 start
+ ;;
+*)
+ echo "usage: $0 (start|stop|restart)"
+ exit 1
+esac
+exit $?
diff --git a/package/alix-switch/files/alix-switch.postinst b/package/alix-switch/files/alix-switch.postinst
new file mode 100644
index 000000000..6e0e60f12
--- /dev/null
+++ b/package/alix-switch/files/alix-switch.postinst
@@ -0,0 +1,3 @@
+#!/bin/sh
+. $IPKG_INSTROOT/etc/functions.sh
+add_rcconf alix_switchd alix_switchd NO
diff --git a/package/alix-switch/src/alix-switchd.c b/package/alix-switch/src/alix-switchd.c
new file mode 100644
index 000000000..d98748fa1
--- /dev/null
+++ b/package/alix-switch/src/alix-switchd.c
@@ -0,0 +1,111 @@
+/*
+* alix-switchd.c
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*/
+
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+#include <time.h>
+#include <unistd.h>
+#include <sys/io.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#define SCRIPT "/etc/alix-switch"
+#define GPIOBASE 0x6100
+
+typedef void (*sighandler_t)(int);
+
+static sighandler_t handle_signal (int sig_nr, sighandler_t signalhandler) {
+
+ struct sigaction neu_sig, alt_sig;
+
+ neu_sig.sa_handler = signalhandler;
+ sigemptyset(&neu_sig.sa_mask);
+ neu_sig.sa_flags = SA_RESTART;
+ if (sigaction (sig_nr, &neu_sig, &alt_sig) < 0)
+ return SIG_ERR;
+
+ return alt_sig.sa_handler;
+}
+
+static void start_daemon (void) {
+
+ int i;
+ pid_t pid;
+
+ if (setsid() > 0)
+ exit(EXIT_FAILURE);
+
+ handle_signal(SIGHUP, SIG_IGN);
+
+ if ((pid = fork ()) != 0)
+ exit(EXIT_FAILURE);
+
+ chdir("/");
+ umask(0);
+ for (i = sysconf(_SC_OPEN_MAX); i > 0; i--)
+ close(i);
+}
+
+
+int main(int argc, char *argv[]) {
+
+ int i;
+ unsigned long bPort = 0;
+ struct timespec sleep;
+ int bDaemon = 0, bSwitch = 0, bState = 0;
+
+ for(i = 1; i < argc; i++) {
+ if (!strcasecmp(argv[i], "-d") || !strcasecmp(argv[i], "--daemon")) {
+ bDaemon = 1;
+ } else {
+ printf( "\nusage: %s [-d | --daemon]\n", argv[0]);
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ if (iopl(3)) {
+ fprintf( stderr, "Could not set I/O permissions to level 3\n");
+ exit(EXIT_FAILURE);
+ }
+
+ if (bDaemon)
+ start_daemon();
+
+ sleep.tv_sec = 0;
+ sleep.tv_nsec = 50000000;
+
+ while(1) {
+ bPort = inl(GPIOBASE + 0xB0);
+ if ((bPort & 0x100) == 0)
+ bState = 1;
+ else
+ bState = 0;
+
+ if (bState && !bSwitch)
+ system(SCRIPT " on");
+
+ bSwitch = bState;
+ nanosleep(&sleep, NULL);
+ }
+
+ if (iopl(0)) {
+ fprintf(stderr, "Could not set I/O permissions to level 0");
+ exit(EXIT_FAILURE);
+ }
+
+ return EXIT_SUCCESS;
+}
diff --git a/package/cfgfs/Makefile b/package/cfgfs/Makefile
index b7ca8a67c..96e297cfb 100644
--- a/package/cfgfs/Makefile
+++ b/package/cfgfs/Makefile
@@ -14,7 +14,7 @@ PKG_TARGET_DEPENDS:= alix wrap foxboard ag241 foxg20 routerboard
WRKDIST= ${WRKDIR}/${PKG_NAME}-${PKG_VERSION}
NO_DISTFILES:= 1
-CFLINE_CFGFS:= select BUSYBOX_COMM\n\tselect BUSYBOX_MD5SUM\n\tselect BUSYBOX_XARGS\n\tselect BUSYBOX_FEATURE_SORT_BIG\n\tselect BUSYBOX_DIFF\n\tdepends on !ADK_TARGET_ROOTFS_NFSROOT
+CFLINE_CFGFS:= select BUSYBOX_COMM\n\tselect BUSYBOX_MD5SUM\n\tselect BUSYBOX_XARGS\n\tselect BUSYBOX_FEATURE_SORT_BIG\n\tselect BUSYBOX_DIFF\n\tdepends on !ADK_TARGET_ROOTFS_NFSROOT && !ADK_TARGET_ROOTFS_INITRAMFS_PIGGYBACK && !ADK_TARGET_ROOTFS_INITRAMFS
include ${TOPDIR}/mk/package.mk
diff --git a/package/grub-bin/Makefile b/package/grub-bin/Makefile
index df8a0d9d3..d4ec32554 100644
--- a/package/grub-bin/Makefile
+++ b/package/grub-bin/Makefile
@@ -14,7 +14,7 @@ PKG_SECTION:= base
PKG_SITES:= http://openadk.org/distfiles/
PKG_TARGET_DEPENDS:= x86 x86_64
-CFLINE_GRUB_BIN:= select BUSYBOX_FEATURE_STAT_FORMAT
+CFLINE_GRUB_BIN:= select BUSYBOX_FEATURE_STAT_FORMAT\n\tdepends on !ADK_TARGET_ROOTFS_INITRAMFS_PIGGYBACK && !ADK_TARGET_ROOTFS_INITRAMFS
include ${TOPDIR}/mk/package.mk