diff --git a/package/eudev/S10udevd b/package/eudev/S10udevd
index 8bb8f6eb3a01..6602e92c2c86 100644
--- a/package/eudev/S10udevd
+++ b/package/eudev/S10udevd
@@ -35,6 +35,14 @@ start() {
 	status=$?
 	if [ "$status" -eq 0 ]; then
 		echo "OK"
+		# start-stop-daemon returns before udevd listens to kernel events:
+		# wait for it, or the events triggered below may get lost
+		i=0
+		while ! udevadm control --start-exec-queue 2>/dev/null; do
+			i=$((i + 1))
+			[ "$i" -ge 50 ] && break
+			sleep 0.1
+		done
 	else
 		echo "FAIL"
 	fi
