
The eliminates having to do extra steps (e.g. meta-ide-support) when booting an image with a nfs mount as rootfs - startng runqemu with a nfs mount starts to 'just work' after building an image. (From OE-Core rev: f73e370bec16d206592a7ca01b4a86b1d1316ada) Signed-off-by: Alexander Kanavin <alex@linutronix.de> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
3.1 KiB
Executable File
#!/bin/bash
Copyright (c) 2005-2009 Wind River Systems, Inc.
SPDX-License-Identifier: GPL-2.0-only
usage() { echo "Usage: $0 {start|stop|restart} " }
if [ $# != 2 ]; then usage exit 1 fi
if ; then echo "Unknown command '$1'" usage exit 1 fi
if [ ! -d "$2" ]; then echo "Error: '$2' does not exist" usage exit 1 fi
Ensure the nfs-export-dir is an absolute path
NFS_EXPORT_DIR=$(cd "$2" && pwd)
SYSROOT_SETUP_SCRIPT=which oe-find-native-sysroot 2> /dev/null
if [ -z "$SYSROOT_SETUP_SCRIPT" ]; then
echo "Error: Unable to find the oe-find-native-sysroot script"
echo "Did you forget to source your build environment setup script?"
exit 1
fi
. $SYSROOT_SETUP_SCRIPT qemu-helper-native
if [ ! -e "$OECORE_NATIVE_SYSROOT/usr/bin/unfsd" ]; then echo "Error: Unable to find unfsd binary in $OECORE_NATIVE_SYSROOT/usr/bin/"
echo "This shouldn't happen - something is missing from your toolchain installation"
exit 1
fi
if [ ! -d ~/.runqemu-sdk ]; then mkdir -p ~/.runqemu-sdk fi
NFS_INSTANCE=${NFS_INSTANCE:=0} EXPORTS=~/.runqemu-sdk/exports$NFS_INSTANCE RMTAB=~/.runqemu-sdk/rmtab$NFS_INSTANCE NFSPID=~/.runqemu-sdk/nfs$NFS_INSTANCE.pid MOUNTPID=~/.runqemu-sdk/mount$NFS_INSTANCE.pid
PSEUDO_OPTS="-P $OECORE_NATIVE_SYSROOT/usr" PSEUDO_LOCALSTATEDIR="$NFS_EXPORT_DIR/../$(basename $NFS_EXPORT_DIR).pseudo_state" export PSEUDO_LOCALSTATEDIR
if [ ! -d "$PSEUDO_LOCALSTATEDIR" ]; then echo "Error: $PSEUDO_LOCALSTATEDIR does not exist." echo "Did you create the export directory using runqemu-extract-sdk?" exit 1 fi
NFS server port number
NFSD_PORT=${NFSD_PORT:=$[ 3049 + 2 * $NFS_INSTANCE ]}
mountd port number
MOUNTD_PORT=${MOUNTD_PORT:=$[ 3048 + 2 * $NFS_INSTANCE ]}
For debugging you would additionally add
--debug all
UNFSD_OPTS="-p -i $NFSPID -e $EXPORTS -n $NFSD_PORT -m $MOUNTD_PORT"
See how we were called.
case "$1" in start) echo "Creating exports file..." echo "$NFS_EXPORT_DIR (rw,no_root_squash,no_all_squash,insecure)" > $EXPORTS
echo "Starting User Mode nfsd"
echo " $PSEUDO $PSEUDO_OPTS $OECORE_NATIVE_SYSROOT/usr/bin/unfsd $UNFSD_OPTS"
$PSEUDO $PSEUDO_OPTS $OECORE_NATIVE_SYSROOT/usr/bin/unfsd $UNFSD_OPTS
if [ ! $? = 0 ]; then
echo "Error starting nfsd"
exit 1
fi
# Check to make sure everything started ok.
if [ ! -f $NFSPID ]; then
echo "rpc.nfsd did not start correctly"
exit 1
fi
ps -fp `cat $NFSPID` > /dev/null 2> /dev/null
if [ ! $? = 0 ]; then
echo "rpc.nfsd did not start correctly"
exit 1
fi
echo " "
echo "On your target please remember to add the following options for NFS"
echo "nfsroot=IP_ADDRESS:$NFS_EXPORT_DIR,nfsvers=3,port=$NFSD_PORT,udp,mountport=$MOUNTD_PORT"
;;
stop)
if [ -f "$NFSPID" ]; then
echo "Stopping rpc.nfsd"
kill cat $NFSPID
rm -f $NFSPID
else
echo "No PID file, not stopping rpc.nfsd"
fi
if [ -f "$EXPORTS" ]; then
echo "Removing exports file"
rm -f $EXPORTS
fi
;;
restart)
$0 stop $NFS_EXPORT_DIR
$0 start $NFS_EXPORT_DIR
if [ ! $? = 0 ]; then
exit 1
fi
;;
*)
echo "$0 {start|stop|restart} "
;;
esac
exit 0