summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
authorChen Qi <Qi.Chen@windriver.com>2013-06-28 15:48:22 +0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-07-02 22:23:47 +0100
commit28786ec6ccb61e558eeb2a32287f57e601d72d79 (patch)
treebf80c8311e31822871bd80147017a9ca37aac16d /meta
parent6ecba81678de7796dfdf1ec1686062cafd5bae96 (diff)
downloadpoky-28786ec6ccb61e558eeb2a32287f57e601d72d79.tar.gz
udev-cache: take a read-only rootfs into consideration
In case of a read-only rootfs, we skip the process of generating udev cache, as the data cannot be persisted between reboots. However, it's possbile that the $DEVCACHE (default to /etc/dev.tar) exists in a read-only rootfs, no matter how it's generated or installed. In such situation, we try to use $DEVCACHE if possible. Besides the basic changes in the logic of udev cache handling, this patch also adds code to output more information if the udev cache is not used and VERBOSE enabled. This patch also changes the readfile function to readfiles function so that it could handle more than one file at once. (From OE-Core rev: 4ec1266e7e1aacdb9d3d0fc5cd6307b60df1731e) Signed-off-by: Chen Qi <Qi.Chen@windriver.com> Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r--meta/recipes-core/udev/udev/init54
-rw-r--r--meta/recipes-core/udev/udev/udev-cache6
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
18[ -x @UDEVD@ ] || exit 1 18[ -x @UDEVD@ ] || exit 1
19[ -f /etc/default/udev-cache ] && . /etc/default/udev-cache 19[ -f /etc/default/udev-cache ] && . /etc/default/udev-cache
20[ -f /etc/udev/udev.conf ] && . /etc/udev/udev.conf 20[ -f /etc/udev/udev.conf ] && . /etc/udev/udev.conf
21[ -f /etc/default/rcS ] && . /etc/default/rcS
21 22
22readfile () { 23readfiles () {
23 filename=$1
24 READDATA="" 24 READDATA=""
25 if [ -r $filename ]; then 25 for filename in $@; do
26 while read line; do 26 if [ -r $filename ]; then
27 READDATA="$READDATA$line" 27 while read line; do
28 done < $filename 28 READDATA="$READDATA$line"
29 fi 29 done < $filename
30 fi
31 done
30} 32}
31 33
32case "$1" in 34case "$1" in
@@ -52,29 +54,37 @@ case "$1" in
52 mount -a -t tmpfs 2>/dev/null 54 mount -a -t tmpfs 2>/dev/null
53 mkdir -p /var/volatile/tmp 55 mkdir -p /var/volatile/tmp
54 56
55 # cache handling 57 # Cache handling.
58 # A list of files which are used as a criteria to judge whether the udev cache could be reused.
59 CMP_FILE_LIST="/proc/version /proc/cmdline /proc/devices /proc/atags"
56 if [ "$DEVCACHE" != "" ]; then 60 if [ "$DEVCACHE" != "" ]; then
57 readfile /proc/version
58 VERSION="$READDATA"
59 readfile /proc/cmdline
60 CMDLINE="$READDATA"
61 readfile /proc/devices
62 DEVICES="$READDATA"
63 readfile /proc/atags
64 ATAGS="$READDATA"
65
66 if [ -e $DEVCACHE ]; then 61 if [ -e $DEVCACHE ]; then
67 readfile /etc/udev/cache.data 62 readfiles $CMP_FILE_LIST
68 if [ "$READDATA" = "$VERSION$CMDLINE$DEVICES$ATAGS" ]; then 63 NEWDATA="$READDATA"
64 readfiles /etc/udev/cache.data
65 OLDDATA="$READDATA"
66 if [ "$OLDDATA" = "$NEWDATA" ]; then
69 (cd /; tar xf $DEVCACHE > /dev/null 2>&1) 67 (cd /; tar xf $DEVCACHE > /dev/null 2>&1)
70 not_first_boot=1 68 not_first_boot=1
71 [ "$VERBOSE" != "no" ] && echo "udev: using cache file $DEVCACHE" 69 [ "$VERBOSE" != "no" ] && echo "udev: using cache file $DEVCACHE"
72 [ -e /dev/shm/udev.cache ] && rm -f /dev/shm/udev.cache 70 [ -e /dev/shm/udev.cache ] && rm -f /dev/shm/udev.cache
73 else 71 else
74 echo "$VERSION$CMDLINE$DEVICES$ATAGS" > /dev/shm/udev.cache 72 # Output detailed reason why the cached /dev is not used
73 if [ "$VERBOSE" != "no" ]; then
74 echo "udev: udev cache not used"
75 echo "udev: we use $CMP_FILE_LIST as criteria to judge whether the cache /dev could be resued"
76 echo "udev: olddata: $OLDDATA"
77 echo "udev: newdata: $NEWDATA"
78 fi
79 echo "$NEWDATA" > /dev/shm/udev.cache
75 fi 80 fi
76 else 81 else
77 echo "$VERSION$CMDLINE$DEVICES$ATAGS" > /dev/shm/udev.cache 82 if [ "$ROOTFS_READ_ONLY" != "yes" ]; then
83 # If rootfs is not read-only, it's possible that a new udev cache would be generated;
84 # otherwise, we do not bother to read files.
85 readfiles $CMP_FILE_LIST
86 echo "$READDATA" > /dev/shm/udev.cache
87 fi
78 fi 88 fi
79 fi 89 fi
80 90
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
15[ -x @UDEVD@ ] || exit 1 15[ -x @UDEVD@ ] || exit 1
16[ -d /sys/class ] || exit 1 16[ -d /sys/class ] || exit 1
17 17
18[ -f /etc/default/rcS ] && . /etc/default/rcS
18[ -f /etc/default/udev-cache ] && . /etc/default/udev-cache 19[ -f /etc/default/udev-cache ] && . /etc/default/udev-cache
19 20
21if [ "$ROOTFS_READ_ONLY" = "yes" ]; then
22 [ "$VERBOSE" != "no" ] && echo "udev-cache: read-only rootfs, skip generating udev-cache"
23 exit 0
24fi
25
20if [ "$DEVCACHE" != "" -a -e /dev/shm/udev.cache ]; then 26if [ "$DEVCACHE" != "" -a -e /dev/shm/udev.cache ]; then
21 echo "Populating dev cache" 27 echo "Populating dev cache"
22 (cd /; tar cf "$DEVCACHE" dev) 28 (cd /; tar cf "$DEVCACHE" dev)