Bläddra i källkod

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 <[email protected]>
Rodolfo Giometti 8 år sedan
förälder
incheckning
2437e0f670

+ 12 - 0
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))

+ 1 - 0
package/libs/sysfsutils/files/local.conf

@@ -0,0 +1 @@
+# local sysctl settings can be stored in this directory

+ 22 - 0
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

+ 48 - 0
package/libs/sysfsutils/files/sysfsutils

@@ -0,0 +1,48 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2017 Rodolfo Giometti <[email protected]>
+#
+# Based on Debian's script /etc/init.d/sysfsutils by
+# Martin Pitt <[email protected]>
+
+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
+}