nfs即网络文件系统,通过网络,对在不同主机上的文件进行共享。 嵌入式开发中,往往需要构建调试文件系统,在主机端以nfs文件系统的方式先调试构建文件系统,将极大地方便开发。

1、nfs文件系统

nfs需要主机端以及板端的nfs服务支持。

1.1. 主机端nfs配置

主机端以/nfs/rootfs目录作为文件共享目录,该目录必须具备读写权限。打开/etc/exports文件加入目录共享。

  1. /nfs/rootfs 192.168.0.*(rw,async,no_root_squash)

关闭防火墙

  1. service iptables stop

重启nfs服务,如果没有nfs服务,需要先安装nfs服务。

  1. service rpcbind start
  2. service nfs restart

配置ip地址,并且自挂载以确认主机nfs服务工作正常。

  1. ifconfig eth0 192.168.0.10 up
  2. mkdir /mnt/nfs
  3. mount t nfs 192.168.0.10:/nfs/rootfs /mnt/nfs

1.2. 板端nfs配置

在前面的章节中,Linux内核集成了initramfs根文件系统,也可以直接采用nfs作为根文件系统。 Linux内核配置支持nfs文件系统后,可以在initramfs根文件系统启动后,先尝试挂载nfs文件系统,以确定板端及主机端的nfs服务正常。 确认正常后,Linux内核可以去掉initramfs根文件系统,bootloader传递挂载nfs根文件系统的启动参数,实现从nfs挂载根文件系统启动。 initramfs根文件系统启动后,通过mount挂载nfs的方法:

  1. #将PC端的192.168.0.10:/nfs/rootfs挂载到本地/mnt/nfs目录下:
  2. mount -t nfs -o nolock 192.168.0.10:/nfs/rootfs /mnt/nfs

bootloader传递启动参数,使nfs作为根文件系统:

  1. const char BootCmd[] = "noinitrd root=/dev/nfs init=/init console=ttySAC0 nfsroot=192.168.0.10:/nfs/rootfs,nolock rw ip=192.168.0.20:192.168.0.10:192.168.0.10:255.255.255.0::eth0:off";

2、内核配置

Linux配置支持nfs文件系统,选中File systems->Network File Systems->NFS client support。 19_NFS文件系统 - 图1

3、主机端构建根文件系统

在主机/nfs/rootfs目录中构建开发板端的根文件系统,把交叉编译工具的加载器以及动态库复制到根文件系统的lib目录。

  1. cp *.so* /nfs/rootfs/lib d

重新以共享库的方式交叉编译busybox,并把库、配置文件、可执行文件等拷贝到/nfs/rootfs根文件系统中。 减少对flash的读写,把/tmp、/dev目录挂接在tmpfs设备上。打开/etc/fstab文件,加入/tmp、/dev目录的挂载。

  1. tmpfs /tmp tmpfs defaults 0 0
  2. tmpfs /dev tmpfs defaults 0 0

etc/init.d/rcS 文件加入mdev的支持,从而不用手动创建设备节点。

  1. echo /sbin/mdev >/proc/sys/kernel/hotplug
  2. mdev -s

可以添加/etc/mdev.conf配置文件,实现设备的自动挂载/卸载等。支持nfs文件系统后,就可以在主机端构建配置根文件系统,当验证通过后,再把构建好的根文件系统制作成flash烧录镜像并烧录,可以极大地加快开发的进度。

4、附录

文件 源码下载
bootloader源码以及使用说明 https://pan.baidu.com/s/1slczwhJ
Qt5.8官网源码 https://pan.baidu.com/s/1eRDJtNs
本系列例程的根文件系统 https://pan.baidu.com/s/1nuGmSqt
opev3.2.0官网源码 https://pan.baidu.com/s/1i5btLGT
yaffs官网源码 https://pan.baidu.com/s/1pLpuHw3
busybox-1.26.2官网源码 https://pan.baidu.com/s/1bpkZynt
tslib官网源码 https://pan.baidu.com/s/1i4EtjfR
mplayer-1.3.0官网源码 https://pan.baidu.com/s/1i5MGRhb
基于S3C2416修改的linux-4.10.10源码 https://pan.baidu.com/s/1sl0fXlr

补充: http://blog.chinaunix.net/uid-20752341-id-3081976.html