使用U-Boot的NFS(远程/网络用户空间)

Posted wanglouxiaozi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用U-Boot的NFS(远程/网络用户空间)相关的知识,希望对你有一定的参考价值。

前提条件

假设您的主机PC运行的是Ubuntu 14.04.1 LTS或更高版本,并且与您的开发平台在同一个本地网络上;为了简单起见,我们假设网络上也有DHCP服务器。
如果使用Juno,请确保使用的是前端以太网端口。

设置NFS服务器

   在主机上安装以下软件包:

sudo apt-get update && sudo apt-get install nfs-kernel-server rpcbind
切换到超级用户:
sudo su -

 创建一个根“/export/”目录,我们将使用它作为存放文件系统的目录:  

mkdir /export/

  设置文件系统的权限,并在‘/etc/exports‘文件末尾添加以下行:

/export/ *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)

    为了避免潜在的文件权限问题,我们将避免使用NFSv4。通过编辑‘ /etc/default/ ns -kernel-server‘,将默认值设置为NFSv3,如下所示:

# Number of servers to start up
# To disable nfsv4 on the server, specify `--no-nfs-version 4 here
#RPCNFSDCOUNT=8
RPCNFSDCOUNT="--no-nfs-version 4"

    然后重启nfs-kernel-server服务:

service nfs-kernel-server restart

    现在检查一下,“portmapper”、“nfs”和“mountd”都同时运行在“tcp”和“udp”上:

#rpcinfo -p
   program vers proto   port  service
    100000    4   tcp     111  portmapper
    100000    3   tcp     111  portmapper
    100000    2   tcp     111  portmapper
    100000    4   udp     111  portmapper
    100000    3   udp     111  portmapper
    100000    2   udp     111  portmapper
    100024    1   udp   43672  status
    100024    1   tcp   56293  status
    100003    2   tcp    2049  nfs
    100003    3   tcp    2049  nfs
    100003    4   tcp    2049  nfs
    100227    2   tcp    2049
    100227    3   tcp    2049
    100003    2   udp    2049  nfs
    100003    3   udp    2049  nfs
    100003    4   udp    2049  nfs
    100227    2   udp    2049
    100227    3   udp    2049
    100021    1   udp   53079  nlockmgr
    100021    3   udp   53079  nlockmgr
    100021    4   udp   53079  nlockmgr
    100021    1   tcp   50750  nlockmgr
    100021    3   tcp   50750  nlockmgr
    100021    4   tcp   50750  nlockmgr
    100005    1   udp   50127  mountd
    100005    1   tcp   48215  mountd
    100005    2   udp   49557  mountd
    100005    2   tcp   46457  mountd
    100005    3   udp   36349  mountd
    100005    3   tcp   54121  mountd

    接下来,将您需要的根文件系统提取到“/export/”目录中,也可以选择将其放在子目录中。在本例中,我们将根文件系统提取为“/export/juno/fs/”。

挂载主机目录到juno板

mount -t nfs 192.168.1.101:/export/  /mnt -o nolock

挂载完成以后你就可以在开发板上/mnt目录下看到主机/export目录下的内容,可以使用cp命令把主机/export目录下的内容拷贝到开发板上。

使用网络文件系统启动

打开Juno板并中断U-Boot的默认启动选择:

The default boot selection will start in   3 seconds

 将主机PC的IP地址保存到“serverip”环境变量:

VExpress64# set serverip <host_pc_ip_address>
VExpress64# saveenv

 接下来修改U-Boot的引导args,使用NFS找到根文件系统:

VExpress64# set origbootargs "$bootargs"
VExpress64# set bootargs "console=ttyAMA0,115200n8 root=/dev/nfs ip=dhcp nfsroot=${serverip}:/export/juno/fs rw rootwait earlyprintk=pl011,0x7ff80000 debug"
VExpress64# saveenv

 然后重新启动juno板, 它应该会使用NFS找到根文件系统。
 恢复到默认启动行为的办法:

VExpress64# set bootargs "$origbootargs"

 











 















以上是关于使用U-Boot的NFS(远程/网络用户空间)的主要内容,如果未能解决你的问题,请参考以下文章

论nfs共享存储服务器的优缺点

网络文件系统的演化

NFS

使用U-Boot的TFTP(远程/网络内核)

使用Petalinux准备U-Boot并从网络启动

NFS