diff options
author | Scott Garman <scott.a.garman@intel.com> | 2010-08-13 11:18:05 -0700 |
---|---|---|
committer | Richard Purdie <rpurdie@linux.intel.com> | 2010-08-20 16:20:11 +0100 |
commit | f203df83a5627eae8c66ace8533d2212a6b9cff0 (patch) | |
tree | 0e6b50ea0b40104e67e04752843eb4cfa9833edf /scripts/poky-qemu-internal | |
parent | 81ff1ee2375161772a4e2471740e4d30f5577aae (diff) | |
download | poky-f203df83a5627eae8c66ace8533d2212a6b9cff0.tar.gz |
poky-qemu-internal: fixes for userspace NFS booting
Including a number of cases where the script could exit before
releasing a tun/tap lockfile.
Signed-off-by: Scott Garman <scott.a.garman@intel.com>
Diffstat (limited to 'scripts/poky-qemu-internal')
-rwxr-xr-x | scripts/poky-qemu-internal | 41 |
1 files changed, 27 insertions, 14 deletions
diff --git a/scripts/poky-qemu-internal b/scripts/poky-qemu-internal index 3d718391f7..01486ccff6 100755 --- a/scripts/poky-qemu-internal +++ b/scripts/poky-qemu-internal | |||
@@ -69,14 +69,23 @@ for tap in $POSSIBLE; do | |||
69 | done | 69 | done |
70 | 70 | ||
71 | if [ "$TAP" = "" ]; then | 71 | if [ "$TAP" = "" ]; then |
72 | USER=`id -u` | 72 | GROUPID=`id -g` |
73 | echo 'Setting up tap interface under sudo' | 73 | echo 'Setting up tap interface under sudo' |
74 | TAP=`sudo $QEMUIFUP $USER` | 74 | TAP=`sudo $QEMUIFUP $GROUPID` |
75 | LOCKFILE="" | 75 | LOCKFILE="" |
76 | else | 76 | else |
77 | echo "Using preconfigured tap device '$TAP'" | 77 | echo "Using preconfigured tap device '$TAP'" |
78 | fi | 78 | fi |
79 | 79 | ||
80 | release_lock() { | ||
81 | if [ "$LOCKFILE" = "" ]; then | ||
82 | $QEMUIFDOWN $TAP | ||
83 | else | ||
84 | echo "Releasing lockfile of preconfigured tap device '$TAP'" | ||
85 | rm -f $LOCKFILE | ||
86 | fi | ||
87 | } | ||
88 | |||
80 | KERNEL_NETWORK_CMD="ip=192.168.7.2::192.168.7.1:255.255.255.0" | 89 | KERNEL_NETWORK_CMD="ip=192.168.7.2::192.168.7.1:255.255.255.0" |
81 | QEMU_TAP_CMD="-net tap,vlan=0,ifname=$TAP,script=no,downscript=no" | 90 | QEMU_TAP_CMD="-net tap,vlan=0,ifname=$TAP,script=no,downscript=no" |
82 | QEMU_NETWORK_CMD="-net nic,vlan=0 $QEMU_TAP_CMD" | 91 | QEMU_NETWORK_CMD="-net nic,vlan=0 $QEMU_TAP_CMD" |
@@ -108,12 +117,14 @@ esac | |||
108 | 117 | ||
109 | if [ "$TYPE" != "nfs" -a ! -f "$HDIMAGE" ]; then | 118 | if [ "$TYPE" != "nfs" -a ! -f "$HDIMAGE" ]; then |
110 | echo "Error: Image file $HDIMAGE doesn't exist" | 119 | echo "Error: Image file $HDIMAGE doesn't exist" |
120 | release_lock | ||
111 | return | 121 | return |
112 | fi | 122 | fi |
113 | 123 | ||
114 | if [ "$TYPE" = "nfs" ]; then | 124 | if [ "$TYPE" = "nfs" ]; then |
115 | NFS_SERVER=`echo $HDIMAGE | sed 's/^\([^:]*\):.*/\1/'` | 125 | NFS_SERVER="192.168.7.1" |
116 | NFS_DIR=`echo $HDIMAGE | sed 's/^[^:]*:\(.*\)/\1/'` | 126 | NFS_DIR=`echo $HDIMAGE | sed 's/^[^:]*:\(.*\)/\1/'` |
127 | UNFS_OPTS="nfsvers=2,mountprog=21111,nfsprog=11111,udp" | ||
117 | fi | 128 | fi |
118 | 129 | ||
119 | if [ "$NFS_SERVER" = "" ]; then | 130 | if [ "$NFS_SERVER" = "" ]; then |
@@ -123,6 +134,7 @@ fi | |||
123 | 134 | ||
124 | if [ ! -f "$ZIMAGE" ]; then | 135 | if [ ! -f "$ZIMAGE" ]; then |
125 | echo "Error: Kernel image file $ZIMAGE doesn't exist" | 136 | echo "Error: Kernel image file $ZIMAGE doesn't exist" |
137 | release_lock | ||
126 | return | 138 | return |
127 | fi | 139 | fi |
128 | 140 | ||
@@ -138,9 +150,10 @@ if [ "$MACHINE" = "qemuarm" -o "$MACHINE" = "qemuarmv6" -o "$MACHINE" = "qemuarm | |||
138 | if [ "$TYPE" = "nfs" ]; then | 150 | if [ "$TYPE" = "nfs" ]; then |
139 | if [ "$NFS_SERVER" = "192.168.7.1" -a ! -d "$NFS_DIR" ]; then | 151 | if [ "$NFS_SERVER" = "192.168.7.1" -a ! -d "$NFS_DIR" ]; then |
140 | echo "Error: NFS mount point $HDIMAGE doesn't exist" | 152 | echo "Error: NFS mount point $HDIMAGE doesn't exist" |
153 | release_lock | ||
141 | return | 154 | return |
142 | fi | 155 | fi |
143 | KERNCMDLINE="root=/dev/nfs nfsroot=$NFS_SERVER:$NFS_DIR rw $KERNEL_NETWORK_CMD mem=$QEMU_MEMORY" | 156 | KERNCMDLINE="root=/dev/nfs nfsroot=$NFS_SERVER:$NFS_DIR,$UNFS_OPTS rw $KERNEL_NETWORK_CMD mem=$QEMU_MEMORY" |
144 | QEMUOPTIONS="$QEMU_NETWORK_CMD -M versatilepb --no-reboot $QEMU_UI_OPTIONS" | 157 | QEMUOPTIONS="$QEMU_NETWORK_CMD -M versatilepb --no-reboot $QEMU_UI_OPTIONS" |
145 | fi | 158 | fi |
146 | if [ "$MACHINE" = "qemuarmv6" ]; then | 159 | if [ "$MACHINE" = "qemuarmv6" ]; then |
@@ -161,9 +174,10 @@ if [ "$MACHINE" = "qemux86" ]; then | |||
161 | if [ "$TYPE" = "nfs" ]; then | 174 | if [ "$TYPE" = "nfs" ]; then |
162 | if [ "$NFS_SERVER" = "192.168.7.1" -a ! -d "$NFS_DIR" ]; then | 175 | if [ "$NFS_SERVER" = "192.168.7.1" -a ! -d "$NFS_DIR" ]; then |
163 | echo "Error: NFS mount point $HDIMAGE doesn't exist." | 176 | echo "Error: NFS mount point $HDIMAGE doesn't exist." |
177 | release_lock | ||
164 | return | 178 | return |
165 | fi | 179 | fi |
166 | KERNCMDLINE="root=/dev/nfs nfsroot=$NFS_SERVER:$NFS_DIR rw $KERNEL_NETWORK_CMD mem=$QEMU_MEMORY" | 180 | KERNCMDLINE="root=/dev/nfs nfsroot=$NFS_SERVER:$NFS_DIR,$UNFS_OPTS rw $KERNEL_NETWORK_CMD mem=$QEMU_MEMORY" |
167 | QEMUOPTIONS="$QEMU_NETWORK_CMD $QEMU_UI_OPTIONS" | 181 | QEMUOPTIONS="$QEMU_NETWORK_CMD $QEMU_UI_OPTIONS" |
168 | fi | 182 | fi |
169 | fi | 183 | fi |
@@ -181,9 +195,10 @@ if [ "$MACHINE" = "qemux86-64" ]; then | |||
181 | fi | 195 | fi |
182 | if [ ! -d "$HDIMAGE" ]; then | 196 | if [ ! -d "$HDIMAGE" ]; then |
183 | echo "Error: NFS mount point $HDIMAGE doesn't exist." | 197 | echo "Error: NFS mount point $HDIMAGE doesn't exist." |
198 | release_lock | ||
184 | return | 199 | return |
185 | fi | 200 | fi |
186 | KERNCMDLINE="root=/dev/nfs nfsroot=192.168.7.1:$HDIMAGE rw $KERNEL_NETWORK_CMD mem=$QEMU_MEMORY" | 201 | KERNCMDLINE="root=/dev/nfs nfsroot=$NFS_SERVER:$NFS_DIR,$UNFS_OPTS rw $KERNEL_NETWORK_CMD mem=$QEMU_MEMORY" |
187 | QEMUOPTIONS="$QEMU_NETWORK_CMD $QEMU_UI_OPTIONS" | 202 | QEMUOPTIONS="$QEMU_NETWORK_CMD $QEMU_UI_OPTIONS" |
188 | fi | 203 | fi |
189 | fi | 204 | fi |
@@ -258,11 +273,13 @@ if [ "$MACHINE" = "nokia800-maemo" ]; then | |||
258 | if [ ! -e "$HDIMAGE.qemuflash" ]; then | 273 | if [ ! -e "$HDIMAGE.qemuflash" ]; then |
259 | if [ ! -e "$HDIMAGE.initfs" ]; then | 274 | if [ ! -e "$HDIMAGE.initfs" ]; then |
260 | echo "Error, $HDIMAGE.initfs must exist!" | 275 | echo "Error, $HDIMAGE.initfs must exist!" |
276 | release_lock | ||
261 | return | 277 | return |
262 | fi | 278 | fi |
263 | if [ ! -e "$HDIMAGE.config" ]; then | 279 | if [ ! -e "$HDIMAGE.config" ]; then |
264 | echo "Error, $HDIMAGE.config must exist!" | 280 | echo "Error, $HDIMAGE.config must exist!" |
265 | echo "To generate it, take an n800 and cat /dev/mtdblock1 > $HDIMAGE.config" | 281 | echo "To generate it, take an n800 and cat /dev/mtdblock1 > $HDIMAGE.config" |
282 | release_lock | ||
266 | return | 283 | return |
267 | fi | 284 | fi |
268 | echo "'Flashing' config partition, please wait..." | 285 | echo "'Flashing' config partition, please wait..." |
@@ -280,6 +297,7 @@ fi | |||
280 | 297 | ||
281 | if [ "x$QEMUOPTIONS" = "x" ]; then | 298 | if [ "x$QEMUOPTIONS" = "x" ]; then |
282 | echo "Error: Unable to support this combination of options" | 299 | echo "Error: Unable to support this combination of options" |
300 | release_lock | ||
283 | return | 301 | return |
284 | fi | 302 | fi |
285 | 303 | ||
@@ -302,6 +320,7 @@ QEMUBIN=`which $QEMU` | |||
302 | 320 | ||
303 | if [ ! -x "$QEMUBIN" ]; then | 321 | if [ ! -x "$QEMUBIN" ]; then |
304 | echo "Error: No QEMU binary '$QEMU' could be found." | 322 | echo "Error: No QEMU binary '$QEMU' could be found." |
323 | release_lock | ||
305 | return | 324 | return |
306 | fi | 325 | fi |
307 | 326 | ||
@@ -310,6 +329,7 @@ function _quit() { | |||
310 | #echo kill `cat $PIDFILE` | 329 | #echo kill `cat $PIDFILE` |
311 | kill `cat $PIDFILE` | 330 | kill `cat $PIDFILE` |
312 | fi | 331 | fi |
332 | release_lock | ||
313 | return | 333 | return |
314 | } | 334 | } |
315 | 335 | ||
@@ -326,18 +346,11 @@ else | |||
326 | echo "Warning: distccd not present, no distcc support loaded." | 346 | echo "Warning: distccd not present, no distcc support loaded." |
327 | fi | 347 | fi |
328 | 348 | ||
329 | |||
330 | |||
331 | echo "Running $QEMU..." | 349 | echo "Running $QEMU..." |
332 | echo $QEMUBIN -kernel $ZIMAGE $QEMUOPTIONS $SERIALOPTS $* --append "$KERNCMDLINE" | 350 | echo $QEMUBIN -kernel $ZIMAGE $QEMUOPTIONS $SERIALOPTS $* --append "$KERNCMDLINE" |
333 | $QEMUBIN -kernel $ZIMAGE $QEMUOPTIONS $SERIALOPTS $* --append "$KERNCMDLINE" || /bin/true | 351 | $QEMUBIN -kernel $ZIMAGE $QEMUOPTIONS $SERIALOPTS $* --append "$KERNCMDLINE" || /bin/true |
334 | 352 | ||
335 | if [ "$LOCKFILE" = "" ]; then | 353 | release_lock |
336 | $QEMUIFDOWN $TAP | ||
337 | else | ||
338 | echo "Releasing preconfigured tap device '$TAP'" | ||
339 | rm -f $LOCKFILE | ||
340 | fi | ||
341 | 354 | ||
342 | trap - INT TERM QUIT | 355 | trap - INT TERM QUIT |
343 | return | 356 | return |