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,如下图:

     

  • 相关阅读:
    设计模式学习总结系列应用实例
    【研究课题】高校特殊学生的发现及培养机制研究
    Linux下Oracle11G RAC报错:在安装oracle软件时报file not found一例
    python pro practice
    openstack python sdk list tenants get token get servers
    openstack api
    python
    git for windows
    openstack api users list get token get servers
    linux 流量监控
  • 原文地址:https://www.cnblogs.com/topeet/p/5292800.html
Copyright © 2011-2022 走看看