嵌入式Linux挂载NFS网络文件系统

背景

关于NFS

NFS (Network File System) 是一种分布式文件系统协议,用于在不同的操作系统之间共享文件。它允许在网络上的不同计算机之间共享文件和目录,提高了数据共享的效率和安全性。NFS 最初由 Sun Microsystems 开发,现在是一个开放的标准,被广泛应用于各种操作系统和网络设备。NFS 采用客户端-服务器模型,客户端计算机可以访问服务器上的共享文件,就像访问本地文件一样。
在日常嵌入式Linux开发中,通常受硬件内存大小局限性,又因为调试需要经常从宿主机copy文件到开发板。所以我们可以采用NFS的方式,板端挂载宿主机的目录。方便文件传输,及扩展开发板存储空间。
因为嵌入式linux往往经过裁剪,因此需要移植对应的NFS工具。

结构

采用服务端部署在宿主机,开发板作为客户端挂载nfs的方式。

实施步骤

前提条件

  1. 首先需要开发板与宿主机网络相通。
  2. 开发板内核支持NFS功能。可以通过 cat /proc/filesystem节点查看是否包含“ntfs”字样。如果没有打开可以参考: linux+内核中开启nfs,启用linux内核中的nfs服务
  3. 宿主机端安装ubuntu系统(其它系统亦可参考)
  4. 运行裁剪后linux的开发板

宿主机配置

  1. 安装NFS客户端和服务器软件。通常可以使用以下命令在Linux中安装NFS软件:
sudo apt-get install nfs-kernel-server nfs-common
  1. 创建共享目录
sudo mkdir /nfsroot
sudo chmod -R 777 /nfsroot
  1. 配置NFS服务器。编辑以下配置文件:
sudo vim /etc/exports

在此文件中,您可以指定将共享哪些目录,以及要将这些目录共享到哪些客户端机器。例如:

/nfsroot *(rw,sync,no_root_squash)

这将共享/nfsroot 目录,并允许客户端机器以读/写模式挂载该目录。

  1. 重新加载NFS服务器配置:
sudo exportfs -a
  1. 启动NFS服务器:
sudo systemctl restart nfs-kernel-server
  1. 验证
    宿主机端执行showmount -e命令查看是否正常启动服务
$ showmount -e
Export list for <HOST name>:
/nfsroot *

以下命令验证nfs服务端有没有成功配置

sudo mount -t nfs 127.0.0.1:/nfsroot /mnt -o nolock
$ mount | grep mnt
127.0.0.1:/nfsroot on /mnt type nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=127.0.0.1,local_lock=none,addr=127.0.0.1)

结果如上所示,证明宿主机端配置完成

客户端源码编译及移植

  1. 首先添加交叉编译器路径,
export PATH=$PATH:/<交叉编译工具链路径>/bin
  1. nfsutil 依赖的动态库 libtirpc源码获取及编译
    下载libtirpc源码: libtirpc
    执行以下指令进行编译,其中–host为交叉编译工具链(其它平台需要切换对应的工具链),–prefix为编译完成后动态库安装的路径
./configure --disable-gssapi --host=aarch64-buildroot-linux-gnu --prefix=<安装的路径>
make -j2
make install
  1. nfs-util 源码获取及编译
    其中 CC指向交叉编译工具, 需要注意的是LDFLAGS后要添加libtirpc 动态库安装的路径。因为编译有依赖
./configure --disable-ipv6 --disable-uuid --disable-nfsv4 --disable-gss CC=aarch64-buildroot-linux-gnu-gcc --host=aarch64-buildroot-linux-gnu --prefix=<安装的路径> LDFLAGS="-L/<libtirpc 动态库安装的路径>/lib/"
make -j4
make install DESTDIR=<安装的路径>

将编译生成的libtirpc.so.3.0.0及对应的软链接文件libtirpc.so libtirpc.so.3 复制到板子上的/lib/usr/lib(通常默认包含在LD_LIBRARY_PATH路径里)目录下。并将编译生成的mount.nfs 复制到开发板上的/sbin目录下

验证

开发板端执行以下指令挂载nfs服务

mount.nfs 10.43.0.38:/nfsroot /mnt -o nolock

猜你喜欢

转载自blog.csdn.net/weixin_43328157/article/details/132695755