zoukankan      html  css  js  c++  java
  • [学习嵌入式开发板]iTOP-4412实现NFS网络文件系统

    本文转自迅为:http://www.topeetboard.com

    学习平台:iTOP-4412开发板

    本文讲解如何在 iTOP-4412 开发板上实现 NFS 网络文件系统。

    我们使用的软硬件环境是:一台 PC,上面运行虚拟机 UbuntuiTOP-4412 开发板一块,PC 机和iTOP-4412 开发板通过网线连接到路由器上面,路由器分配的网段是 192.168.1.x 的 ip 地址,默认网关是路由器的 ip 地址,即 192.168.1.1PC 机的 ip 地址是 192.168.1.103iTOP-4412 开发板的 ip 地址是192.168.1.230,网段的子网掩码是 255.255.255.0。这几个 ip 地址在后面配置 iTOP-4412 开发板内核 nfs的时候会用到,大家需要根据自己使用的网络环境来设置这几个 ip 地址,设置的原则是确保 PC 的 ip iTOP4412 开发板的 ip 在同一个网段。

    NFS 是 Network FileSystem 的缩写,是由 SUN 公司研制的 UNIX 表示层协议(pressentation layerprotocol) ,NFS 是基于 UDP/IP 协议的应用。它的最大功能就是可以通过网络让不同的机器,不通的操作系统彼此共享文件,可以通过 NFS 挂载远程主机的目录,访问该目录就像访问本地目录一样,所以也可以简单的将它看做一个文件服务器。通过 NFS 服务,我们可以实现在线调试文件系统或应用程序,而不用像传统的方式生成文件系统镜像,然后烧写到 iTOP-4412 的 eMMC 里,在启动开发板。通过 NFS 服务可以提高我们的调试效率。

    实现 NFS,我们需要一个主机作为 NFS 服务器,我们选择我们的虚拟机 Ubuntu 作为主机。首先我们需要在虚拟机的 Ubuntu 上安装 Ubuntu NFS 服务,这是一个软件包,我们可以使用 apt 命令下载, (下载前请确认你的虚拟机可以上网) 。首先登录到虚拟机上,使用快捷键 Ctrl+Alt+t 组合按键打开终端如下图:

     

    输入 su root 命令切换到 root 用户,如下图:

     

    输入 apt-get install nfs-kernel-server 命令安装 Ubuntu NFS 服务,如下图:

     

    在安装的过程中会提示“是否继续安装”的信息,如下图:

     

    我们输入“Y” ,如下图:

     

    然后按回车,会继续安装,如下图:

     

    安装完成,如下图:

     

    接下来需要配置/etc/exports,使用 vi 命令打开/etc/export,如下图:

     

    /etc/export 文件的最后一行添加:

    /home/topeet/linux/ *(rw,sync,no_root_squash),如下图:

     

    下面讲解一下上面输入的内容都代表什么意思:

    /home/topeet/linux:是要共享的目录;

    *:代表允许所有的网络段访问;

    rw:是可读写权限;

    sync:是资料同步写入内存和硬盘;

    no_root_squash:是 Ubuntu nfs 客户端分享目录使用者的权限,如果客户端使用的是 root 用户,那么对于

    该共享目录而言,该客户端就具有 root 权限;

    其他 Ubuntu nfs 常用的参数有:

    ro:只读访问

    async nfs 在写入数据前可以相应请求

    secure: nfs 通过以下的安全 TCP/IP 端口发送

    insecure: nfs 通过 1024 以上的端口发送

    wdelay:如果多个用户要写入 NFS 目录,则归组(默认)

    no_wdelay:如果多个用户要写入 NFS 目录,则立即写入,当使用 async 时,无需此设置

    hide:在 nfs 共享目录中不共享妻子目录

    no_hide:共享 nfs 目录的子目录

    subtree_check:如果共享/usr/bin 之类的子目录时,强制 nfs 检查父目录的权限(默认

    no_subtree_check:和上面相对,不检查父目录权限

    all_squash:共享文件的 UID 和 GID 映射匿名用户 anonymous,适合公用目录

    no_all_squash:保留共享文件的 UID 和 GID(默认)

    root_squash root:用户的所有请求映射成如 anonymous 用户一样的权限(默认)

    no_root_squash root:用户具有根目录的完全管理访问权限

    anonuid=xxx:指定 nfs 服务器/etc/passwd 文件中匿名用户多的 UID

    anongid=xxx:指定 nfs 服务器/etc/passwd 文件中匿名用户的 GID

    接下来重启 portmap 服务,输入/etc/init.d/portmap restart 命令,如下图:

     

    运行结果如下图:

     

    然后重启 nfs 服务,输入/etc/init.d/nfs-kernel-server restart 命令,如下图:

     

    运行结果如下图:

     

    现在 Ubuntu nfs 服务器端的配置就完成了,下面我们可以在虚拟机 Ubuntu 本机上验证一下,例如我们把

    /home/topeet/linux/app/system 挂载到/mnt 目录下,需要输入 mount -t nfs

    localhost:/home/topeet/linux/app/system /mnt 命令,如下图:

     

    执行完上面的命令,可以使用 df 命令查看是否挂载成功,如下图:

     

    我们可以看到上图中高亮的那一行就是我们挂载的 nfs 文件系统,这说明我们的 Ubuntu nfs 服务器端搭建成

    功了。

    本章节我们用前面章节制作的做小 linux 系统为例,通过 nfs 来挂载它。我们把 linux 最小文件系统放到虚拟

    机 Ubuntu /home/topeet/linux/app 目录下,如下图:

     

    实现 nfs 文件系统我们需要修改 linux 最小文件系统的 etc/init.d/ifconfig-eth0 文件,如下图:

     

    使用 vi 命令修改第八行,修改为:if grep -q nfs /proc/mounts ; then,修改后如下图:

     

    修改完成后保存并退出。

    下面我们开始配置 iTOP-4412 开发板的内核。要实现 nfs 功能,需要修改内核配置来支持,打开内核源

    码,输入 cp config_for_linux .config 命令生成支持 linux 最小文件系统的内核配置文件,如下图:

     

    然后输入 make menuconfig 命令进入 linux 配置界面,如下图:

     

    选中“Networking support” ,如下图:

     

    然后按回车进入 Networking support 配置界面,如下图:

     

    选中“Networking options”选项,如上图所示,然后按回车进入 Networking options 配置界面,如下图:

     

    在 Networking options 配置界面,选中“IP: kernel level autoconfiguration” ,如下图:

     

    然后返回到 make menuconfig 的初始界面,如下图:

     

    然后选择“File systems”选项,如下图:

     

    然后输入回车,进入 File systems 配置界面,如下图:

     

    选中“Network File Systems”选项,如下图:

     

    然后输入回车,进入 Network File Systems 配置界面,如下图:

     

    选中“ NFS client support” , “ NFS client support for NFS version 3” , “ NFS client support for the NFSv3

    ACL protocol extension” , “NFS client support for NFS version 4” , “NFS client support for NFSv4.1” ,

    Root file system on NFS” ,如下图:

     

    然后返回到 make menuconfig 的初始配置界面,如下图:

     

    然后在初始配置界面选中“Boot options” ,如下图:

     

    按回车进入 Boot options 配置界面,然后再 Default kernel command 里面输入:

    root=/dev/nfs rw nfsroot=192.168.1.103:/home/topeet/linux/app/system

    ip=192.168.1.230:192.168.1.103:192.168.1.1:255.255.255.0:iTOP:eth0:off rootfstype=ext4

    init=/linuxrc console=ttySAC2,115200",如下图:

     

    下面讲解一下上面输入命令的命令里面的几个参数:

    root=/dev/nfs rw nfsroot=192.168.1.103:/home/topeet/linux/app/system 表示挂载的 nfs 服务器 ip 

    192.168.1.103,挂载的目录是/home/topeet/linux/app/system, (注意:/home/topeet/linux/是前面我

    们搭建 nfs 服务器设置的) ;

    ip=192.168.1.230:192.168.1.103:192.168.1.1:255.255.255.0:iTOP:eth0:off 这里面,第一个

    ip192.168.1.230是我们开发板的ip地址, 第二个ip192.168.1.103nfd服务器的ip, 第三个ip192.168.1.1

    是开发板的网关, 255.255.255.0 是子网掩码, iTOP 是开发主机的名字 (一般无关紧要, 可以随便填写) , eth0

    是网卡设备的名称。

    至此,linux 内核的配置就完成了,退出 make menuconfig 配置,会弹出保存窗口,如下图:

     

    使用键盘的左右方向键,选中上图的”Yes“,然后输入回车,退出保存配置,如下图:

     

    然后输入 make 命令开始编译内核,如下图:

     

    编译过程如下图:

     

    编译完成,如下图:

     

    至此,linux 内核支持 nfs 制作完成了,大家可以把编译生成的 zImage 烧写到 iTOP-4412 开发板上看下运行

    结果。我们可以在串口上看到内核启动挂载 nfs 文件系统的 log,如下图:

     

  • 相关阅读:
    leetcode_Basic Calculator II
    leetcode_Basic Calculator
    LeetCode_Add Two Numbers
    LeetCode_Partition List
    LeetCode_Compare Version Numbers
    LeetCode—Longest Consecutive Sequence
    Thrift数据类型
    thrift简介
    grpc与json格式互转
    grpc测试
  • 原文地址:https://www.cnblogs.com/topeet/p/5292800.html
Copyright © 2011-2022 走看看