文章目录
00. ENV
ubuntn1804
10. 简述
通过NFS把文件系统等直接传到开发板、与服务端共享文件,提高开发效率。
20. 下载、安装、配置
安装NFS服务端、端口映射工具等
sudo apt install nfs-kernel-server rpcbind
配置:
- 创建NFS目录:
mkdir -p ~/nfs
- 配置NFS目录等:
sudo vi /etc/exports
添加:/home/xxxx/nfs *(rw,sync,no_root_squash)
// 添加NFS的路径和属性(具体属性参考“附件91”)- 重启NFS服务:
sudo /etc/init.d/nfs-kernel-server restart
- 查看配置:
4.1 路径: sudo exportfs
4.2 版本:sudo cat /proc/fs/nfsd/versions
30. 使用
1. 从uboot中设置NFS启动文件系统
- uboot中相关命令、参数简述:bootcmd,bootargs,nfs
1.1 bootcmd::uboot启动后自动执行该命令
1.2 bootargs:uboot启动时传递给内核的参数
1.2 nfs:该命令可以通过nfs服务将文件传到开发板内存中,后续可直接从内存中加载系统等。
nfs 命令格式:nfs [本地内存地址][[NFS服务器地址:]文件名]
命令参考: nfs 0x81000000 192.168.10.10:/home/xxx/nfs/zImage // 将服务器端.10.10的/home/xxx/nfs/zImage文件传输到开发板的0x81000000的位置
- 配置uboot默认从nfs加载系统
2.1 修改默认启动参数bootargs:
(假设服务器端存在
根文件系统:/home/xxx/nfs/rootfs
IP:192.168.10.10
开发板IP:192.168.10.200)
=> setenv bootargs '\
> root=/dev/nfs rw \
> nfsroot=169.168.10.10:/home/xxxx/nfs/rootfs,v2,tcp \
> ip=169.168.10.200:169.168.10.10:169.168.10.10:255.255.255.0::eth0:off \
> console=ttyS0,115200'
/* 格式参考如下:
* root=/dev/nfs rw
* nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
* 服务端rootfs文件夹,参数
* ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>
* 指定开发板IP,服务区IP,网关,掩码,xx,网口,状态,xx
*/
2. 调试
- 服务端修改的相关信息会同步到开发板上,即共享文件
80. 问题
1. NFS版本不匹配问题
- 修改支持的版本:以支持v2为例
sudo vi /etc/default/nfs-kernel-server
修改如下参数:
RPCNFSDCOUNT="-V 2 8"
RPCMOUNTDOPTS="-V 2 --manage-gids"
RPCSVCGSSDOPTS="--nfs-version 2,3,4 --debug --syslog"
- 重启服务:
sudo /etc/init.d/nfs-kernel-server restart
90. 附件
91. 服务端NFS配置项简述
选项 | 功能 |
---|---|
ro | 共享目录只读 |
rw | 共享目录可读可写 |
sync | 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性 |
no_root_squash | 来访的root用户保持root帐号权限 |
all_squash | 所有访问用户都映射为匿名用户或用户组 |
no_all_squash(默认) | 访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组 |
root_squash(默认) | 将来访的root用户映射为匿名用户或用户组 |
anonuid= | 指定匿名访问用户的本地用户UID,默认为nfsnobody(65534) |
anongid= | 指定匿名访问用户的本地用户组GID,默认为nfsnobody(65534) |
secure(默认) | 限制客户端只能从小于1024的tcp/ip端口连接服务器 |
insecure | 允许客户端从大于1024的tcp/ip端口连接服务器 |
async | 将数据先保存在内存缓冲区中,必要时才写入磁盘 |
wdelay(默认) | 检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率 |
no_wdelay | 若有写操作则立即执行,应与sync配合使用 |
subtree_check(默认) | 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限 |
no_subtree_check | 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率 |