From charlesreid1

Here's a great page with information about the Widy slider switch, LEDs, etc: https://wiki.openwrt.org/toh/tp-link/tl-mr3040

Creating Startup Services

The OpenWrt operating system uses the /etc/init.d/ directory to store a bunch of scripts to run on boot. You can also find a sample startup script

Where Startup Services Go

If you want something to run on the Widy on boot, you can put it in /etc/init.d/.

You will see, when you look inside that directory, that there are already a bunch of scripts:

root@OpenWrt:/etc/init.d# ls -l
-rwxr-xr-x    1 root     root          1411 Sep 20  2014 boot
-rwxr-xr-x    1 root     root           729 Oct  1  2014 cron
-rwxr-xr-x    1 root     root         14350 Oct  1  2014 dnsmasq
-rwxr-xr-x    1 root     root           252 Sep 20  2014 done
-rwxr-xr-x    1 root     root          4153 Oct  1  2014 dropbear
-rwxr-xr-x    1 root     root           997 Oct  1  2014 firewall
-rwxr-xr-x    1 root     root           341 Sep 20  2014 fstab
-rwxr-xr-x    1 root     root          2025 Sep 20  2014 led
-rwxr-xr-x    1 root     root          2169 Oct  1  2014 log
-rwxr-xr-x    1 root     root          2742 Sep 20  2014 network
-rwxr-xr-x    1 root     root           244 Oct  1  2014 odhcpd
-rwxr-xr-x    1 root     root           422 Sep 23  2014 snort
-rwxr-xr-x    1 root     root           125 Sep 20  2014 sysctl
-rwxr-xr-x    1 root     root           247 Sep 20  2014 sysfixtime
-rwxr-xr-x    1 root     root           770 Oct  1  2014 sysntpd
-rwxr-xr-x    1 root     root          1025 Sep 20  2014 system
-rwxr-xr-x    1 root     root           926 Oct  1  2014 telnet
-rwxr-xr-x    1 root     root          3444 Oct  1  2014 uhttpd
-rwxr-xr-x    1 root     root           106 Sep 20  2014 umount

Sample Startup Script

There's a nice sample startup script in /etc/rc.common:

#!/bin/sh
# Copyright (C) 2006-2012 OpenWrt.org

. $IPKG_INSTROOT/lib/functions.sh
. $IPKG_INSTROOT/lib/functions/service.sh

initscript=$1
action=${2:-help}
shift 2

start() {
        return 0
}

stop() {
        return 0
}

reload() {
        return 1
}

restart() {
        trap '' TERM
        stop "$@"
        start "$@"
}

boot() {
        start "$@"
}

shutdown() {
        stop
}

disable() {
        name="$(basename "${initscript}")"
        rm -f "$IPKG_INSTROOT"/etc/rc.d/S??$name
        rm -f "$IPKG_INSTROOT"/etc/rc.d/K??$name
}

enable() {
        name="$(basename "${initscript}")"
        disable
        [ -n "$START" -o -n "$STOP" ] || {
                echo "/etc/init.d/$name does not have a START or STOP value"
                return 1
        }
        [ "$START" ] && ln -s "../init.d/$name" "$IPKG_INSTROOT/etc/rc.d/S${START}${name##S[0-9][0-9]}"
        [ "$STOP"  ] && ln -s "../init.d/$name" "$IPKG_INSTROOT/etc/rc.d/K${STOP}${name##K[0-9][0-9]}"
}

enabled() {
        name="$(basename "${initscript}")"
        [ -x "$IPKG_INSTROOT/etc/rc.d/S${START}${name##S[0-9][0-9]}" ]
}

depends() {
        return 0
}

help() {
        cat <<EOF
Syntax: $initscript [command]

Available commands:
        start   Start the service
        stop    Stop the service
        restart Restart the service
        reload  Reload configuration files (or restart if that fails)
        enable  Enable service autostart
        disable Disable service autostart
$EXTRA_HELP
EOF
}

# for procd
start_service() {
        return 0
}

stop_service() {
        return 0
}

service_triggers() {
        return 0
}

service_running() {
        return 0
}

${INIT_TRACE:+set -x}

. "$initscript"

[ -n "$USE_PROCD" ] && {
        EXTRA_COMMANDS="${EXTRA_COMMANDS} running"

        . $IPKG_INSTROOT/lib/functions/procd.sh
        basescript=$(readlink "$initscript")
        rc_procd() {
                procd_open_service "$(basename ${basescript:-$initscript})" "$initscript"
                "$@"
                procd_close_service
        }

        start() {
                rc_procd start_service "$@"
                if eval "type service_started" 2>/dev/null >/dev/null; then
                        service_started
                fi
        }

        stop() {
                stop_service "$@"
                procd_kill "$(basename ${basescript:-$initscript})" "$1"
        }

        reload() {
                if eval "type reload_service" 2>/dev/null >/dev/null; then
                        reload_service "$@"
                else
                        start
                fi
        }

        running() {
                service_running "$@"
        }
}

ALL_COMMANDS="start stop reload restart boot shutdown enable disable enabled depends ${EXTRA_COMMANDS}"
list_contains ALL_COMMANDS "$action" || action=help
[ "$action" = "reload" ] && action='eval reload "$@" || restart "$@" && :'
$action "$@"

Flags