在嵌入式 Linux 开发中,我们经常使用 nfs 命令加载服务端的共享文件或者挂载文件系统。关于服务端 NFS 服务的搭建可以参考基于 NFS 的文件共享实现。
U-Boot 也支持了 nfs 命令,笔者在 U-Boot 命令模式下,学习使用 nfs 命令从服务端(虚拟机 Ubuntu 18.04)下载 Linux 内核镜像文件到开发板 RAM 的过程中遇到了一些问题,经过一番波折终于都解决了,故此记录一下。
问题一
问题描述
- 开发板 ping 服务端 IP 通过,但是在使用 nfs 命令下载 Linux 内核镜像文件时出现了文件查找失败的错误:
- Loading: *** ERROR: File lookup fail
错误原因
- NFS 版本不兼容导致的共享文件找不到
- U-Boot 中 NFS 为 V2 版本
- 服务端 NFS 为 V3、V4 版本
解决方案
- 修改服务端 /etc/default/nfs-kernel-server 文件:
sudo vim /etc/default/nfs-kernel-server
- 重启 NFS 服务:
sudo service nfs-kernel-server restart
- 查看一下服务端 NFS 版本:
sudo cat /proc/fs/nfsd/versions
- 如果已经有 +2 则说明 V2 版本 NFS 服务已经开启,如果为 -2 则说明系统内核虽然已经支持了 V2 版本的 NFS,但还没有开启;
- 开启 V2 版本的 NFS,用 vim 编辑器打开 /etc/nfs.conf 文件,如果没有该文件则会自动创建一个:
sudo vim /etc/nfs.conf
- 配置 udp 和 vers2 为 y:
- 再次重启 NFS 服务:
sudo service nfs-kernel-server restart
- 再次查看 NFS 版本,V2 版本开启了:
- 测试下载,出现问题二
问题二
问题描述
- 使用 nfs 命令下载文件过程中出现传输中断,打印 T T T…
解决方案
- 编辑服务端 /etc/hosts 文件:
sudo vim /etc/hosts
- 添加开发板 IP 和服务端 NFS 共享文件目录:
- 再次重启 NFS 服务:
sudo service nfs-kernel-server restart
- 再次测试下载,问题解决:
更多内容
- CSDN博客:@Hello阿尔法
- 哔哩哔哩:@Hello阿尔法
- 知乎:@Hello阿尔法