Files
poky/meta/recipes-core/udev/eudev/init
Alejandro Hernandez 3e5e540513 eudev: Replaces udev with eudev for compatibility when using sysvinit on newer kernels
udev has started to fail on new kernels (4.4), due to being deprecated in favor
of systemd's udev implementation. To maintain a sysvinit alternative we also
need to provide an alternative to udev. Eudev is a fork of systemds udev,
this new eudev recipe provides upstream udev 220 funcitonality.

  - Removes patches that dont apply anymore
  - ToDo: eudev-ptest?

[YOCTO #8998]

(From OE-Core rev: a22797f7c37a865420837b5c29b270f73ee4c6ce)

Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2016-03-02 22:39:43 +00:00

4.7 KiB

#!/bin/sh

BEGIN INIT INFO

Provides: udev

Required-Start: mountvirtfs

Required-Stop:

Default-Start: S

Default-Stop:

Short-Description: Start udevd, populate /dev and load drivers.

END INIT INFO

export TZ=/etc/localtime

[ -d /sys/class ] || exit 1 [ -r /proc/mounts ] || exit 1 [ -x @UDEVD@ ] || exit 1 SYSCONF_CACHED="/etc/udev/cache.data" SYSCONF_TMP="/dev/shm/udev.cache" DEVCACHE_REGEN="/dev/shm/udev-regen" # create to request cache regen

A list of files which are used as a criteria to judge whether the udev cache could be reused.

CMP_FILE_LIST="/proc/version /proc/cmdline /proc/devices" [ -f /proc/atags ] && CMP_FILE_LIST="$CMP_FILE_LIST /proc/atags"

List of files whose metadata (size/mtime/name) will be included in cached

system state.

META_FILE_LIST="lib/udev/rules.d/* etc/udev/rules.d/*"

Command to compute system configuration.

sysconf_cmd () { cat -- $CMP_FILE_LIST stat -c '%s %Y %n' -- $META_FILE_LIST | awk -F/ '{print $1 " " $NF;}' }

[ -f /etc/default/udev-cache ] && . /etc/default/udev-cache [ -f /etc/udev/udev.conf ] && . /etc/udev/udev.conf [ -f /etc/default/rcS ] && . /etc/default/rcS

kill_udevd () { pid=pidof -x udevd [ -n "$pid" ] && kill $pid }

case "$1" in start) export ACTION=add # propagate /dev from /sys echo "Starting udev"

# Check for requireed devtmpfs before trying to start udev and
# mount a no-existant fs.
if ! grep -q devtmpfs /proc/filesystems
then
    echo "Missing devtmpfs, which is required for udev to run";
    echo "Halting..."
    halt
fi
# mount the devtmpfs on /dev, if not already done
LANG=C awk '$2 == "/dev" && ($3 == "devtmpfs") { exit 1 }' /proc/mounts && {
        mount -n -o mode=0755 -t devtmpfs none "/dev"
}
[ -e /dev/pts ] || mkdir -m 0755 /dev/pts
[ -e /dev/shm ] || mkdir -m 1777 /dev/shm
# the automount rule for udev needs /tmp directory available, as /tmp is a symlink
# to /var/tmp which in turn is a symlink to /var/volatile/tmp, we need to make sure
# /var/volatile/tmp directory to be available.
mkdir -m 1777 -p /var/volatile/tmp

# Cache handling.
if [ "$DEVCACHE" != "" ]; then
        if [ -e $DEVCACHE ]; then
	    sysconf_cmd > "$SYSCONF_TMP"
	    if cmp $SYSCONF_CACHED $SYSCONF_TMP >/dev/null; then
                        tar xmf $DEVCACHE -C / -m
                        not_first_boot=1
                        [ "$VERBOSE" != "no" ] && echo "udev: using cache file $DEVCACHE"
                        [ -e $SYSCONF_TMP ] && rm -f "$SYSCONF_TMP"
                        [ -e "$DEVCACHE_REGEN" ] && rm -f "$DEVCACHE_REGEN"
                else
		    # Output detailed reason why the cached /dev is not used
		    cat <<EOF

udev: Not using udev cache because of changes detected in the following files: udev: $CMP_FILE_LIST udev: $META_FILE_LIST udev: The udev cache will be regenerated. To identify the detected changes, udev: compare the cached sysconf at $SYSCONF_CACHED udev: against the current sysconf at $SYSCONF_TMP EOF touch "$DEVCACHE_REGEN" fi else if [ "$ROOTFS_READ_ONLY" != "yes" ]; then # If rootfs is not read-only, it's possible that a new udev cache would be generated; # otherwise, we do not bother to read files. touch "$DEVCACHE_REGEN" fi fi fi

# make_extra_nodes
kill_udevd > "/dev/null" 2>&1

# trigger the sorted events
[ -e /proc/sys/kernel/hotplug ] && echo -e '\000' >/proc/sys/kernel/hotplug
@UDEVD@ -d

udevadm control --env=STARTUP=1
if [ "$not_first_boot" != "" ];then
        if [ "$PROBE_PLATFORM_BUS" != "yes" ]; then
            PLATFORM_BUS_NOMATCH="--subsystem-nomatch=platform"
        else
            PLATFORM_BUS_NOMATCH=""
        fi
        udevadm trigger --action=add --subsystem-nomatch=tty --subsystem-nomatch=mem --subsystem-nomatch=vc --subsystem-nomatch=vtconsole --subsystem-nomatch=misc --subsystem-nomatch=dcon --subsystem-nomatch=pci_bus --subsystem-nomatch=graphics --subsystem-nomatch=backlight --subsystem-nomatch=video4linux $PLATFORM_BUS_NOMATCH
        (udevadm settle --timeout=3; udevadm control --env=STARTUP=)&
else
        udevadm trigger --action=add
        udevadm settle
fi
;;

stop) echo "Stopping udevd" start-stop-daemon --stop --name udevd --quiet ;; restart) $0 stop sleep 1 $0 start ;; status) pid=pidof -x udevd if [ -n "$pid" ]; then echo "udevd (pid $pid) is running ..." else echo "udevd is stopped" fi ;; *) echo "Usage: $0 {start|stop|status|restart}" exit 1 esac exit 0