use hotplug2 for serializing hotplug events on 2.6
SVN-Revision: 7097
This commit is contained in:
parent
341b6afd55
commit
ca7a815602
9 changed files with 70 additions and 16 deletions
|
@ -27,13 +27,11 @@ start() {
|
||||||
ln -s /tmp/resolv.conf.auto /tmp/resolv.conf
|
ln -s /tmp/resolv.conf.auto /tmp/resolv.conf
|
||||||
[ "$FAILSAFE" = "true" ] && touch /tmp/.failsafe
|
[ "$FAILSAFE" = "true" ] && touch /tmp/.failsafe
|
||||||
|
|
||||||
# manually trigger hotplug before loading modules
|
# the coldplugging of network interfaces needs to happen later, so we do it manually here
|
||||||
for iface in $(awk -F: '/:/ {print $1}' /proc/net/dev); do
|
for iface in $(awk -F: '/:/ {print $1}' /proc/net/dev); do
|
||||||
/usr/bin/env -i ACTION=add INTERFACE="$iface" /sbin/hotplug-call net
|
/usr/bin/env -i ACTION=add INTERFACE="$iface" /sbin/hotplug-call net
|
||||||
done
|
done
|
||||||
|
/sbin/hotplug2 --persistent --max-children 1 &
|
||||||
/sbin/hotplug2 --persistent --max-children 5 &
|
|
||||||
echo /sbin/hotplug-call > /proc/sys/kernel/hotplug
|
|
||||||
|
|
||||||
# create /dev/root if it doesn't exist
|
# create /dev/root if it doesn't exist
|
||||||
[ -e /dev/root ] || {
|
[ -e /dev/root ] || {
|
||||||
|
|
|
@ -4,17 +4,26 @@
|
||||||
|
|
||||||
mount none /proc -t proc
|
mount none /proc -t proc
|
||||||
size=$(awk '/Mem:/ {l=5242880;print((s=$2/2)<l)?$2-l:s}' /proc/meminfo)
|
size=$(awk '/Mem:/ {l=5242880;print((s=$2/2)<l)?$2-l:s}' /proc/meminfo)
|
||||||
|
|
||||||
mount none /tmp -t tmpfs -o size=$size,nosuid,nodev,mode=1777
|
mount none /tmp -t tmpfs -o size=$size,nosuid,nodev,mode=1777
|
||||||
if grep devfs /proc/filesystems > /dev/null; then
|
if grep devfs /proc/filesystems >/dev/null; then
|
||||||
mount none /dev -t devfs
|
mount none /dev -t devfs
|
||||||
else
|
else
|
||||||
mount -t sysfs none /sys
|
|
||||||
mount -t tmpfs tmpfs /dev -o size=512K
|
mount -t tmpfs tmpfs /dev -o size=512K
|
||||||
mknod /dev/console c 5 1
|
mknod /dev/console c 5 1
|
||||||
exec >/dev/console </dev/console 2>&1
|
exec >/dev/console </dev/console 2>&1
|
||||||
mkdir /dev/shm
|
|
||||||
/sbin/hotplug2 --no-persistent --coldplug --max-children 1
|
|
||||||
fi
|
fi
|
||||||
|
mkdir /dev/shm
|
||||||
|
if grep sysfs /proc/filesystems >/dev/null; then
|
||||||
|
mount -t sysfs none /sys
|
||||||
|
HOTPLUG=""
|
||||||
|
# use a minimal ruleset only for creating device nodes
|
||||||
|
/sbin/hotplug2 --no-persistent --coldplug --set-rules-file /etc/hotplug2-init.rules
|
||||||
|
else
|
||||||
|
HOTPLUG="/sbin/hotplug2-dnode"
|
||||||
|
fi
|
||||||
|
echo "$HOTPLUG" > /proc/sys/kernel/hotplug
|
||||||
|
|
||||||
mkdir -p /dev/pts
|
mkdir -p /dev/pts
|
||||||
mount none /dev/pts -t devpts
|
mount none /dev/pts -t devpts
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,6 @@ include $(INCLUDE_DIR)/package.mk
|
||||||
define Package/hotplug2
|
define Package/hotplug2
|
||||||
SECTION:=utils
|
SECTION:=utils
|
||||||
CATEGORY:=Utilities
|
CATEGORY:=Utilities
|
||||||
DEPENDS:=@LINUX_2_6 +udevtrigger
|
|
||||||
TITLE:=Dynamic device management subsystem for embedded systems
|
TITLE:=Dynamic device management subsystem for embedded systems
|
||||||
URL:=http://isteve.bofh.cz/~isteve/hotplug2/
|
URL:=http://isteve.bofh.cz/~isteve/hotplug2/
|
||||||
endef
|
endef
|
||||||
|
@ -32,6 +31,9 @@ in a tiny pack, intended for Linux early userspace: Init RAM FS and InitRD.
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/hotplug2/install
|
define Package/hotplug2/install
|
||||||
|
$(INSTALL_DIR) $(1)/etc
|
||||||
|
$(INSTALL_DATA) ./files/hotplug2.rules $(1)/etc/
|
||||||
|
$(INSTALL_DATA) ./files/hotplug2-init.rules $(1)/etc/
|
||||||
$(INSTALL_DIR) $(1)/sbin
|
$(INSTALL_DIR) $(1)/sbin
|
||||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/hotplug2 $(1)/sbin/
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/hotplug2 $(1)/sbin/
|
||||||
endef
|
endef
|
||||||
|
|
|
@ -4,9 +4,6 @@ DEVICENAME ~~ (tun|tap[0-9]) {
|
||||||
}
|
}
|
||||||
|
|
||||||
DEVPATH is set {
|
DEVPATH is set {
|
||||||
makedev /dev/%DEVICENAME% 0644
|
makedev /dev/%DEVICENAME% 0644
|
||||||
}
|
}
|
||||||
|
|
||||||
MODALIAS is set {
|
|
||||||
exec /sbin/modprobe -q %MODALIAS% ;
|
|
||||||
}
|
|
12
package/hotplug2/files/hotplug2.rules
Normal file
12
package/hotplug2/files/hotplug2.rules
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
DEVICENAME ~~ (tun|tap[0-9]) {
|
||||||
|
makedev /dev/net/%DEVICENAME% 0644
|
||||||
|
next
|
||||||
|
}
|
||||||
|
|
||||||
|
DEVPATH is set {
|
||||||
|
makedev /dev/%DEVICENAME% 0644
|
||||||
|
}
|
||||||
|
|
||||||
|
SUBSYSTEM ~~ (net|button) {
|
||||||
|
exec /sbin/hotplug-call %SUBSYSTEM%;
|
||||||
|
}
|
34
package/hotplug2/patches/100-rules_override.patch
Normal file
34
package/hotplug2/patches/100-rules_override.patch
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
diff -ur hotplug2.old/hotplug2.c hotplug2.dev/hotplug2.c
|
||||||
|
--- hotplug2.old/hotplug2.c 2006-10-08 15:18:23.000000000 +0200
|
||||||
|
+++ hotplug2.dev/hotplug2.c 2007-05-05 11:38:51.456551560 +0200
|
||||||
|
@@ -391,6 +391,7 @@
|
||||||
|
int rv = 0;
|
||||||
|
int i;
|
||||||
|
char *coldplug_command = NULL;
|
||||||
|
+ char *rules_file = HOTPLUG2_RULE_PATH;
|
||||||
|
sigset_t block_mask;
|
||||||
|
|
||||||
|
struct rules_t *rules = NULL;
|
||||||
|
@@ -435,6 +436,13 @@
|
||||||
|
break;
|
||||||
|
|
||||||
|
modprobe_command = *argv;
|
||||||
|
+ } else if (!strcmp(*argv, "--set-rules-file")) {
|
||||||
|
+ argv++;
|
||||||
|
+ argc--;
|
||||||
|
+ if (argc <= 0)
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ rules_file = *argv;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -443,7 +451,7 @@
|
||||||
|
#ifdef HAVE_RULES
|
||||||
|
if (!dumb) {
|
||||||
|
filemap = MAP_FAILED;
|
||||||
|
- rule_fd = open(HOTPLUG2_RULE_PATH, O_RDONLY | O_NOATIME);
|
||||||
|
+ rule_fd = open(rules_file, O_RDONLY | O_NOATIME);
|
||||||
|
if (rule_fd == -1) {
|
||||||
|
dumb = 1;
|
||||||
|
ERROR("rules parse","Unable to open rules file: %s.", strerror(errno));
|
|
@ -31,14 +31,16 @@ if grep devfs /proc/filesystems > /dev/null; then
|
||||||
mount none /dev -t devfs
|
mount none /dev -t devfs
|
||||||
M0=/dev/pty/m0
|
M0=/dev/pty/m0
|
||||||
M1=/dev/pty/m1
|
M1=/dev/pty/m1
|
||||||
|
HOTPLUG=/sbin/hotplug-call
|
||||||
else
|
else
|
||||||
mount -t sysfs none /sys
|
mount -t sysfs none /sys
|
||||||
mount -t tmpfs tmpfs /dev -o size=512K
|
mount -t tmpfs tmpfs /dev -o size=512K
|
||||||
mknod /dev/console c 5 1
|
mknod /dev/console c 5 1
|
||||||
mkdir /dev/shm
|
mkdir /dev/shm
|
||||||
/sbin/hotplug2 --no-persistent --coldplug --max_children 1
|
/sbin/hotplug2 --no-persistent --coldplug --set-rules-file /etc/hotplug2-init.rules
|
||||||
M0=/dev/ptmx
|
M0=/dev/ptmx
|
||||||
M1=/dev/ptmx
|
M1=/dev/ptmx
|
||||||
|
HOTPLUG=
|
||||||
fi
|
fi
|
||||||
mkdir -p /dev/pts
|
mkdir -p /dev/pts
|
||||||
mount none /dev/pts -t devpts
|
mount none /dev/pts -t devpts
|
||||||
|
@ -86,7 +88,7 @@ eval ${FAILSAFE:+failsafe}
|
||||||
|
|
||||||
lock -w /tmp/.failsafe
|
lock -w /tmp/.failsafe
|
||||||
set_state preinit
|
set_state preinit
|
||||||
echo /sbin/hotplug-call > /proc/sys/kernel/hotplug
|
echo "$HOTPLUG" > /proc/sys/kernel/hotplug
|
||||||
|
|
||||||
ifconfig $ifname 0.0.0.0 down
|
ifconfig $ifname 0.0.0.0 down
|
||||||
|
|
||||||
|
|
|
@ -175,7 +175,6 @@ CONFIG_MSDOS_FS=m
|
||||||
CONFIG_MTD_BCM947XX=y
|
CONFIG_MTD_BCM947XX=y
|
||||||
CONFIG_MTD_CFI_SSTSTD=y
|
CONFIG_MTD_CFI_SSTSTD=y
|
||||||
CONFIG_MTD_SFLASH=y
|
CONFIG_MTD_SFLASH=y
|
||||||
# CONFIG_MTD_SPLIT_ROOTFS is not set
|
|
||||||
# CONFIG_NATSEMI is not set
|
# CONFIG_NATSEMI is not set
|
||||||
# CONFIG_NE2K_PCI is not set
|
# CONFIG_NE2K_PCI is not set
|
||||||
# CONFIG_NE3210 is not set
|
# CONFIG_NE3210 is not set
|
||||||
|
|
|
@ -366,6 +366,7 @@ CONFIG_IP6_NF_MATCH_EUI64=m
|
||||||
CONFIG_IP6_NF_MATCH_FRAG=m
|
CONFIG_IP6_NF_MATCH_FRAG=m
|
||||||
CONFIG_IP6_NF_MATCH_HL=m
|
CONFIG_IP6_NF_MATCH_HL=m
|
||||||
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
|
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
|
||||||
|
CONFIG_IP6_NF_MATCH_LIMIT=m
|
||||||
CONFIG_IP6_NF_MATCH_OPTS=m
|
CONFIG_IP6_NF_MATCH_OPTS=m
|
||||||
CONFIG_IP6_NF_MATCH_OWNER=m
|
CONFIG_IP6_NF_MATCH_OWNER=m
|
||||||
CONFIG_IP6_NF_MATCH_RT=m
|
CONFIG_IP6_NF_MATCH_RT=m
|
||||||
|
|
Loading…
Reference in a new issue