本文介绍 nfs 命令的使用,具体是:通过 NFS服务向开发板下载 zImage内核镜像文件。
nfs命令使用的目的:为了方便开发板调试。
nfs(Network File System) 网络文件系统,通过 nfs 可以在计算机之间通过网络来分享资源,
例如,我们将 linux 镜像和设备树文件放到 Ubuntu 中,然后在 uboot 中使用 nfs 命令将 Ubuntu 中
的 linux 镜像和设备树下载到开发板的 DRAM 中。
我们在使用之前,需要开启 Ubuntu 主机的 NFS 服务,并且要新建一个 NFS 使用的目录,以后所有要通过 NFS 访问的文件都需要放到这个 NFS 目录中。
uboot 中的 nfs 命令格式如下所示:
nfs [loadAddress] [[hostIPaddr:]bootfilename]
NFS 操作如下:
前提:开发板的 uboot命令模式下,可以 ping通 Ubuntu系统 。
(1) 首先,将 "系统镜像\教程系统镜像\kernel镜像" 目录下的 zImage文件(即内核文件)拷贝到 ubuntu系统的目录:/home/wangtian/nfs_File。
(2) 其次,启动 ubuntu系统的 nfs服务。ubuntu系统控制台输入命令,操作如下:
wangtian@wangtian-virtual-machine:~/nfs_File$ sudo /etc/init.d/nfs-kernel-server restart
[sudo] wangtian 的密码:
Restarting nfs-kernel-server (via systemctl): nfs-kernel-server.service.
wangtian@wangtian-virtual-machine:~/nfs_File$
(3) 开发板进入 uboot的命令模式,开发板的调试串口输入命令,如下:
=> nfs 80800000 192.168.1.66:/home/wangtian/nfs_File/zImage
Using FEC1 device
File transfer via NFS from server 192.168.1.66; our IP address is 192.168.1.50
Filename '/home/wangtian/nfs_File/zImage'.
Load address: 0x80800000
Loading: *** ERROR: File lookup fail
可以看出,内核镜像文件 zImage文件下载失败。通过百度搜索,很多人说导致这个原因是:
开发板的 NFS版本与 ubuntu的NFS版本不兼容,开发板NFS的版本低于 ubuntu的NFS。
具体更改如下:
(1) 进入 ubuntu系统,更改 /etc/default/nfs-kernel-server文件。
ubuntu的终端输入命令,如下:
wangtian@wangtian-virtual-machine:~$ sudo vim /etc/default/nfs-kernel-server
更改如下,更改完后,保存退出。如下所示:
(2) 重启NFS服务器。ubuntu系统终端输入如下命令:
wangtian@wangtian-virtual-machine:~$ sudo service nfs-kernel-server restart
开发板 uboot命令模式下,输入如下命令,进行下载:
=> nfs 80800000 192.168.1.66:/home/wangtian/nfs_File/zImage
Using FEC1 device
File transfer via NFS from server 192.168.1.66; our IP address is 192.168.1.50
Filename '/home/wangtian/nfs_File/zImage'.
Load address: 0x80800000
Loading: #################################################################
#################################################################
###############################################################
done
Bytes transferred = 983040 (f0000 hex)
以上输出信息,可以看出: 向开发板下载成功 zImage 文件。