1#!/bin/sh
2# Copyright (C) 2011, 2012 O.S. Systems Software LTDA.
3# Licensed on MIT
4
5udev_shutdown_hook_handler() {
6	status=$1
7	module=$2
8	if [ "$status" = "pre" ] && [ "$module" = "finish" ]; then
9		udevadm settle
10		killall `basename $_UDEV_DAEMON` 2>/dev/null
11	fi
12}
13
14udev_daemon() {
15	OPTIONS="/sbin/udev/udevd /sbin/udevd /lib/udev/udevd /lib/systemd/systemd-udevd"
16
17	for o in $OPTIONS; do
18		if [ -x "$o" ]; then
19			echo $o
20			return 0
21		fi
22	done
23
24	return 1
25}
26
27_UDEV_DAEMON=`udev_daemon`
28
29udev_enabled() {
30	if [ -z "$_UDEV_DAEMON" ]; then
31		msg "WARNING: Cannot find the udev daemon; daemon will not be started in initramfs."
32		return 1
33	fi
34
35	return 0
36}
37
38udev_run() {
39	add_module_pre_hook "udev_shutdown_hook_handler"
40
41	mkdir -p /run
42	mkdir -p /var/run
43
44	# Workaround if console=null, systemd-udevd needs valid stdin, stdout and stderr to work
45	sh -c "exec 4< /dev/console" || { exec 0> /dev/null; exec 1> /dev/null; exec 2> /dev/null; }
46
47	$_UDEV_DAEMON --daemon
48	udevadm trigger --action=add
49	udevadm settle
50}
51