nfs即网络文件系统,通过网络,对在不同主机上的文件进行共享。 嵌入式开发中,往往需要构建调试文件系统,在主机端以nfs文件系统的方式先调试构建文件系统,将极大地方便开发。
1、nfs文件系统
nfs需要主机端以及板端的nfs服务支持。
1.1. 主机端nfs配置
主机端以/nfs/rootfs目录作为文件共享目录,该目录必须具备读写权限。打开/etc/exports文件加入目录共享。
/nfs/rootfs 192.168.0.*(rw,async,no_root_squash)
关闭防火墙
service iptables stop
重启nfs服务,如果没有nfs服务,需要先安装nfs服务。
service rpcbind start
service nfs restart
配置ip地址,并且自挂载以确认主机nfs服务工作正常。
ifconfig eth0 192.168.0.10 up
mkdir /mnt/nfs
#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的方法:
#将PC端的192.168.0.10:/nfs/rootfs挂载到本地/mnt/nfs目录下:
mount -t nfs -o nolock 192.168.0.10:/nfs/rootfs /mnt/nfs
bootloader传递启动参数,使nfs作为根文件系统:
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。
3、主机端构建根文件系统
在主机/nfs/rootfs目录中构建开发板端的根文件系统,把交叉编译工具的加载器以及动态库复制到根文件系统的lib目录。
cp *.so* /nfs/rootfs/lib –d
重新以共享库的方式交叉编译busybox,并把库、配置文件、可执行文件等拷贝到/nfs/rootfs根文件系统中。 减少对flash的读写,把/tmp、/dev目录挂接在tmpfs设备上。打开/etc/fstab文件,加入/tmp、/dev目录的挂载。
tmpfs /tmp tmpfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
etc/init.d/rcS 文件加入mdev的支持,从而不用手动创建设备节点。
echo /sbin/mdev >/proc/sys/kernel/hotplug
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 |