如果该文章对你有帮助,欢迎点赞
最近在做汽车娱乐域控制器的项目,有用到hypervisor虚拟机,在娱乐域控上跑QNX和Android两个系统,在实际运行时会遇到两个系统之间共享一些文件,如log,媒体文件等。所以打算用NFS来实现两个系统之间文件的共享。上篇文章记录了一下我在QNX端配置NFS服务端的步骤和遇到的问题,这篇文章记录一下在Android端的配置
目标简述
通过对Android进行NFS客户端配置,获取到QNX的NFS服务端共享的目录或文件。
硬件软件环境
高通8155平台;Hypervisor;QNX 7.0;Android p;
安卓端需要内核配置中使能NFS的功能;
配置步骤
- 使用
showmount
查看一下NFS服务端的配置信息,看能否正常输出服务端信息,如使用showmount -e 192.168.1.1
查看NFS服务器输出目录列表,注:192.168.1.1为我测试时配置的NFS服务端的ip地址。 - 使用命令mount命令进行挂载NFS服务端的共享目录,如下:
busybox mount -t nfs 192.168.1.1:/usr/test /mnt/nfs
注:192.168.1.1
是我测试时的NFS服务端的ip地址,/usr/test
为测试时我配置的NFS服务端共享的目录,/mnt/nfs
为Android本地的挂载点,在使用的时候可以根据需要修改为自己配置的ip地址和共享目录,以及挂载点,但需要注意的是挂载点需要是空目录。 - 如果上述mount执行成功,则现在在挂载的目录下就会看到服务端共享的目录内的文件。
**注:**如果NFS服务端共享的目录内的文件比较大,挂载时间可能会长点。
还有另外一种方式,虽然也是mount,但不需要那么多参数。方式如下:
在/etc目录下创建fstab配置文件,具体fstab的配置内容可参考linux的fstab配置说明,可以将要使用mount挂载NFS系统的信息写入该配置表中,然后运行busybox mount -a
即可。
以下为我测试的fstab的内容:
# cat /etc/fstab
192.168.1.1:/usr/test /mnt/nfs/mount nfs rw,nolock
上述信息中192.168.1.1
为NFS服务端ip地址,/usr/test
为服务端共享的目录,/mnt/nfs/mount
为Android客户端的挂载点,nfs为系统类型,rw,nolock
为挂载的配置参数。
运行busybox mount -a
命令,系统会自动到/etc/
目录下寻找并解析fstab文件,并逐个挂载。
我将上述内容运行的命令写入了shell脚本,请参考。该脚本仅为个人写的简单的测试脚本,如下:
# cat nfs_mount.sh
#!/bin/sh
#Create /mnt/nfs/log directory
if [ -d /mnt/nfs/log ];then
log -p v -t "NFS_MOUNT" "The /mnt/nfs/log directory is exist..."
else
#echo "The /mnt/nfs/log directory is not exist, so create it..."
mkdir -p /mnt/nfs/log
if [ $? -eq 0 ];then
log -p v -t "NFS_MOUNT" "Create the /mnt/nfs/log directory successe..."
else
log -p v -t "NFS_MOUNT" "Create the /mnt/nfs/log directory failed..."
fi
fi
if [ -d /mnt/nfs/mount ];then
log -p v -t "NFS_MOUNT" "The /mnt/nfs/mount directory is exist..."
else
log -p v -t "NFS_MOUNT" "The /mnt/nfs/mount directory is not exist, so create it..."
mkdir -p /mnt/nfs/mount
if [ $? -eq 0 ];then
log -p v -t "NFS_MOUNT" "Create the /mnt/nfs/mount directory successe..."
else
log -p v -t "NFS_MOUNT" "Create the /mnt/nfs/mount directory failed..."
fi
fi
touch /mnt/nfs/log/nfs-mount.log
echo "192.168.1.1:/usr/test /mnt/nfs/mount nfs rw,nolock" > /etc/fstab
echo "Starting to mount nfs ..." > /mnt/nfs/log/nfs-mount.log
i=1
busybox mount -a
while [[ $? -ne 0 ]]
do
let i++
echo "Retry $i times mount..." >> /mnt/nfs/log/nfs-mount.log
sleep 1
busybox mount -a
done
echo "Mount to /mnt/nfs/mount success ..." >> /mnt/nfs/log/nfs-mount.log
上述脚本中使用了log命令,该命令主要是将log输出到logcat中。由于Android在开机启动时可能因为权限原因无法创建目录或文件,导致mount失败。通过将该log输出到logcat可在开机时通过adb logcat进行查看。具体log命令以及adb logcat请参考网上说明,此处不做详细讲解。
如果有问题,欢迎留言讨论。