summaryrefslogtreecommitdiffstats
path: root/package/libs
diff options
context:
space:
mode:
authorRodolfo Giometti <giometti@linux.it>2017-06-28 10:49:01 +0200
committerJo-Philipp Wich <jo@mein.io>2018-12-18 07:55:45 +0100
commitfbd8407248216838c700d615bb084190dedf19e0 (patch)
tree2c4dc33417472faf31d18d78925299e8fd226956 /package/libs
parent903ef9aaecfb91e91c6ffd6626dcb9660a34bbb4 (diff)
downloadopenwrt-fbd8407248216838c700d615bb084190dedf19e0.tar.gz
openwrt-fbd8407248216838c700d615bb084190dedf19e0.tar.bz2
openwrt-fbd8407248216838c700d615bb084190dedf19e0.zip
package sysfsutils: add support for sysfs settings at boot
This patch is based on sysfsutils package's behaviour on Debian OS. Signed-off-by: Rodolfo Giometti <giometti@linux.it> (backported from 2437e0f67050cad79cc1778b18cefd8d3cd86d07)
Diffstat (limited to 'package/libs')
-rw-r--r--package/libs/sysfsutils/Makefile12
-rw-r--r--package/libs/sysfsutils/files/local.conf1
-rw-r--r--package/libs/sysfsutils/files/sysfs.conf22
-rw-r--r--package/libs/sysfsutils/files/sysfsutils48
4 files changed, 83 insertions, 0 deletions
diff --git a/package/libs/sysfsutils/Makefile b/package/libs/sysfsutils/Makefile
index 6265442ea8..60275ec343 100644
--- a/package/libs/sysfsutils/Makefile
+++ b/package/libs/sysfsutils/Makefile
@@ -65,9 +65,21 @@ define Package/libsysfs/install
endef
define Package/sysfsutils/install
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/sysfsutils $(1)/etc/init.d/
+
+ $(INSTALL_DATA) ./files/sysfs.conf $(1)/etc/
+ $(INSTALL_DIR) $(1)/etc/sysfs.d
+ $(INSTALL_DATA) ./files/local.conf $(1)/etc/sysfs.d/
+
$(INSTALL_DIR) $(1)/usr/bin
$(CP) $(PKG_INSTALL_DIR)/usr/bin/systool $(1)/usr/bin/
endef
+define Package/sysfsutils/conffiles
+/etc/sysfs.conf
+/etc/sysfs.d/local.conf
+endef
+
$(eval $(call BuildPackage,libsysfs))
$(eval $(call BuildPackage,sysfsutils))
diff --git a/package/libs/sysfsutils/files/local.conf b/package/libs/sysfsutils/files/local.conf
new file mode 100644
index 0000000000..891da73df8
--- /dev/null
+++ b/package/libs/sysfsutils/files/local.conf
@@ -0,0 +1 @@
+# local sysctl settings can be stored in this directory
diff --git a/package/libs/sysfsutils/files/sysfs.conf b/package/libs/sysfsutils/files/sysfs.conf
new file mode 100644
index 0000000000..f03246284f
--- /dev/null
+++ b/package/libs/sysfsutils/files/sysfs.conf
@@ -0,0 +1,22 @@
+#
+# /etc/sysfs.conf - Configuration file for setting sysfs attributes.
+#
+# The sysfs mount directory is automatically prepended to the attribute paths.
+#
+# Syntax:
+# attribute = value
+# mode attribute = 0600 # (any valid argument for chmod)
+# owner attribute = root:wheel # (any valid argument for chown)
+#
+# Examples:
+#
+# Always use the powersave CPU frequency governor
+# devices/system/cpu/cpu0/cpufreq/scaling_governor = powersave
+#
+# Use userspace CPU frequency governor and set initial speed
+# devices/system/cpu/cpu0/cpufreq/scaling_governor = userspace
+# devices/system/cpu/cpu0/cpufreq/scaling_setspeed = 600000
+#
+# Set permissions of suspend control file
+# mode power/state = 0660
+# owner power/state = root:power
diff --git a/package/libs/sysfsutils/files/sysfsutils b/package/libs/sysfsutils/files/sysfsutils
new file mode 100644
index 0000000000..0305ca82a9
--- /dev/null
+++ b/package/libs/sysfsutils/files/sysfsutils
@@ -0,0 +1,48 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2017 Rodolfo Giometti <giometti@enneenne.com>
+#
+# Based on Debian's script /etc/init.d/sysfsutils by
+# Martin Pitt <mpitt@debian.org>
+
+load_conffile() {
+ FILE="$1"
+ sed 's/#.*$//; /^[[:space:]]*$/d;
+ s/^[[:space:]]*\([^=[:space:]]*\)[[:space:]]*\([^=[:space:]]*\)[[:space:]]*=[[:space:]]*\(.*\)/\1 \2 \3/' \
+ $FILE | {
+ while read f1 f2 f3; do
+ if [ "$f1" = "mode" -a -n "$f2" -a -n "$f3" ]; then
+ if [ -f "/sys/$f2" ] || [ -d "/sys/$f2" ]; then
+ chmod "$f3" "/sys/$f2"
+ else
+ echo "unknown attribute $f2"
+ fi
+ elif [ "$f1" = "owner" -a -n "$f2" -a -n "$f3" ]; then
+ if [ -f "/sys/$f2" ]; then
+ chown "$f3" "/sys/$f2"
+ else
+ echo "unknown attribute $f2"
+ fi
+ elif [ "$f1" -a -n "$f2" -a -z "$f3" ]; then
+ if [ -f "/sys/$f1" ]; then
+ # Some fields need a terminating newline, others
+ # need the terminating newline to be absent :-(
+ echo -n "$f2" > "/sys/$f1" 2>/dev/null ||
+ echo "$f2" > "/sys/$f1"
+ else
+ echo "unknown attribute $f1"
+ fi
+ else
+ echo "syntax error in $CONFFILE: '$f1' '$f2' '$f3'"
+ exit 1
+ fi
+ done
+ }
+}
+
+START=11
+start() {
+ for file in /etc/sysfs.conf /etc/sysfs.d/*.conf; do
+ [ -r "$file" ] || continue
+ load_conffile "$file"
+ done
+}