diff options
-rw-r--r-- | meta/recipes-core/udev/udev/init | 54 | ||||
-rw-r--r-- | meta/recipes-core/udev/udev/udev-cache | 6 |
2 files changed, 38 insertions, 22 deletions
diff --git a/meta/recipes-core/udev/udev/init b/meta/recipes-core/udev/udev/init index 426e4dbb19..d90d4468e4 100644 --- a/meta/recipes-core/udev/udev/init +++ b/meta/recipes-core/udev/udev/init @@ -18,15 +18,17 @@ export TZ=/etc/localtime [ -x @UDEVD@ ] || exit 1 [ -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 -readfile () { - filename=$1 +readfiles () { READDATA="" - if [ -r $filename ]; then - while read line; do - READDATA="$READDATA$line" - done < $filename - fi + for filename in $@; do + if [ -r $filename ]; then + while read line; do + READDATA="$READDATA$line" + done < $filename + fi + done } case "$1" in @@ -52,29 +54,37 @@ case "$1" in mount -a -t tmpfs 2>/dev/null mkdir -p /var/volatile/tmp - # cache handling + # Cache handling. + # 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 /proc/atags" if [ "$DEVCACHE" != "" ]; then - readfile /proc/version - VERSION="$READDATA" - readfile /proc/cmdline - CMDLINE="$READDATA" - readfile /proc/devices - DEVICES="$READDATA" - readfile /proc/atags - ATAGS="$READDATA" - if [ -e $DEVCACHE ]; then - readfile /etc/udev/cache.data - if [ "$READDATA" = "$VERSION$CMDLINE$DEVICES$ATAGS" ]; then + readfiles $CMP_FILE_LIST + NEWDATA="$READDATA" + readfiles /etc/udev/cache.data + OLDDATA="$READDATA" + if [ "$OLDDATA" = "$NEWDATA" ]; then (cd /; tar xf $DEVCACHE > /dev/null 2>&1) not_first_boot=1 [ "$VERBOSE" != "no" ] && echo "udev: using cache file $DEVCACHE" [ -e /dev/shm/udev.cache ] && rm -f /dev/shm/udev.cache else - echo "$VERSION$CMDLINE$DEVICES$ATAGS" > /dev/shm/udev.cache + # Output detailed reason why the cached /dev is not used + if [ "$VERBOSE" != "no" ]; then + echo "udev: udev cache not used" + echo "udev: we use $CMP_FILE_LIST as criteria to judge whether the cache /dev could be resued" + echo "udev: olddata: $OLDDATA" + echo "udev: newdata: $NEWDATA" + fi + echo "$NEWDATA" > /dev/shm/udev.cache fi - else - echo "$VERSION$CMDLINE$DEVICES$ATAGS" > /dev/shm/udev.cache + 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. + readfiles $CMP_FILE_LIST + echo "$READDATA" > /dev/shm/udev.cache + fi fi fi diff --git a/meta/recipes-core/udev/udev/udev-cache b/meta/recipes-core/udev/udev/udev-cache index 8a84fa9dc8..db5a513e14 100644 --- a/meta/recipes-core/udev/udev/udev-cache +++ b/meta/recipes-core/udev/udev/udev-cache @@ -15,8 +15,14 @@ export TZ=/etc/localtime [ -x @UDEVD@ ] || exit 1 [ -d /sys/class ] || exit 1 +[ -f /etc/default/rcS ] && . /etc/default/rcS [ -f /etc/default/udev-cache ] && . /etc/default/udev-cache +if [ "$ROOTFS_READ_ONLY" = "yes" ]; then + [ "$VERBOSE" != "no" ] && echo "udev-cache: read-only rootfs, skip generating udev-cache" + exit 0 +fi + if [ "$DEVCACHE" != "" -a -e /dev/shm/udev.cache ]; then echo "Populating dev cache" (cd /; tar cf "$DEVCACHE" dev) |