美文网首页
Linux操作系列之07--- Linux配置NFS服务器及嵌入

Linux操作系列之07--- Linux配置NFS服务器及嵌入

作者: A红豆爸爸 | 来源:发表于2020-01-30 16:08 被阅读0次
    Linux操作文档系列之07

    Linux配置NFS服务器及嵌入式开发挂载rootfs

    目的:开机后Linux嵌入式开发板Kernel从NFS服务器读取rootfs文件系统,不用每次烧写Flash,方便开发

    1.开发环境连接方式

    image

    硬件连接方式:

    • 开发板和电脑,以及linux服务器连接在同一个路由器组成局域网内
    • 用USB串口将板子串口和电脑连接,安装好驱动
      Linux服务器可以在PC电脑安装虚拟机,并用桥接的方式配置网络,使==三者处于同一网络==

    2.安装Linux服务器端NFS服务

    2.1.安装nfs服务
         sudo apt-get install nfs-kernel-server
    
    2.2.配置导出rootfs文件系统
        sudo echo "/home/wang/work/sync/nfs1 *(rw,no_root_squash,async,no_subtree_check)" >> /etc/exports
    

    /home/wang/work/rootfs:共享的目录 (修改成你自己的路径)

        \* :指定哪些用户可以访问  
        \*  所有可以ping同该主机的用户  
        192.168.3.*  指定网段,在该网段中的用户可以挂载  
        192.168.3.48 只有该用户能挂载
    
        (rw,no_root_squash,async):权限  
            ro : 只读
            rw : 读写
            async :  同步
            no_root_squash: 不降低root用户的权限
    
    2.3.更新NFS导出文件系统列表
        sudo exportfs -af
    
    2.4.设置目录权限
        sudo chmod 777 -R /home/wang/work/sync/nfs
    

    复制rootfs下所有文件到此目录下

    2.5.重启服务:
        sudo /etc/init.d/rpcbind restart 
        sudo /etc/init.d/nfs-kernel-server restart 
        sudo showmount -e 
    
    2.5.测试:

    在本机测试把共享目录挂到了/mnt/nfs目录

        mkdir -p /mnt/nfs
        sudo mount -t nfs 192.168.3.171:/home/wang/work/sync/nfs /mnt/nfs
    

    其中192.168.3.171为nfs服务器ip

    取消挂载用:

     sudo umount /mnt/nfs
    

    在开发板执行下面命令:

    cat /proc/filesystems
    

    若有一行为 nodev nfs,则开发板Linux内核支持NFS

    如果用开发板上挂载,要加上参数-o nolock

    mkdir -p /mnt/nfs
    mount -t nfs -o nolock 192.168.3.171:/home/wang/work/sync/nfs /mnt/nfs
    

    整理成自动执行脚本如下:

    #!/bin/bash
    
    sudo apt-get install nfs-kernel-server
    sudo mv /etc/exports /etc/exports_old
    sudo cp -fv ./exports /etc/exports
    sudo exportfs -af
    sudo chmod 777 -R /home/wang/work/sync/nfs
    sudo /etc/init.d/nfs-kernel-server restart
    sleep 1s
    sudo showmount -e 
    

    export文件如下如下:

    # /etc/exports: the access control list for filesystems which may be exported
    #       to NFS clients.  See exports(5).
    #
    # Example for NFSv2 and NFSv3:
    # /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
    #
    # Example for NFSv4:
    # /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
    # /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
    #
    /home/wang/work/sync/nfs *(rw,no_root_squash,async,no_subtree_check)
    /home/wang/work/sync/nfs1 *(rw,no_root_squash,async,no_subtree_check)
    

    3.配置Linux服务器为静态IP

    不希望ip变化,所以可以设置为静态IP模式。

    3.1 修改网卡接口配置文件
    sudo gedit /etc/network/interfaces
    

    打开网络配置文件做如下修改:

    auto lo  
    iface lo inet loopback
    
    #动态获取的配置:  
    # auto eth0  
    # iface eth0 inet dhcp
    
    #静态分配的配置:
    auto eth0  
    iface eth0 inet static  
    address 192.168.1.100  
    netmask 255.255.255.0  
    gateway 192.168.1.1  
    dns-nameservers 192.168.1.1  
    

    配置为静态IP。

    3.2 重启 Linux服务器
    cat /etc/resolv.conf
    

    如果不能上网,可以查看dns设置是都正确。

    4.修改Linux内核配置,开启开发板Linux内核支持NFS

    很多开发板linux内核都是默认关闭了nfs,必须打开重新编译

    kernel\linux-4.4.y\arch\arm\configs\defconfig
    

    linux kernel编译配置选项:

    • 关闭initrd功能
        # CONFIG_BLK_DEV_INITRD=y
        # CONFIG_INITRAMFS_SOURCE=""
        # CONFIG_RD_GZIP=y
        # CONFIG_RD_BZIP2=y
        # CONFIG_RD_LZMA=y
        # CONFIG_RD_XZ=y
        # CONFIG_RD_LZO=y
        # CONFIG_RD_LZ4=y
    
    • 打开IP_PNP配置网络支持
        CONFIG_IP_PNP=y
        CONFIG_IP_PNP_DHCP=y
        CONFIG_IP_PNP_BOOTP=y
        CONFIG_IP_PNP_RARP=y
        CONFIG_DNS_RESOLVER=y
    
    • 打开NFS相关配置
        CONFIG_NFS_V4=y
        CONFIG_NFS_SWAP=y
        CONFIG_NFS_V4_1=y
        CONFIG_NFS_V4_2=y
        CONFIG_PNFS_FILE_LAYOUT=y
        CONFIG_PNFS_FLEXFILE_LAYOUT=m
        CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org"
        CONFIG_NFS_V4_1_MIGRATION=y
        CONFIG_ROOT_NFS=y
        CONFIG_NFS_USE_KERNEL_DNS=y
        CONFIG_SUNRPC_GSS=y
        CONFIG_SUNRPC_BACKCHANNEL=y
        CONFIG_SUNRPC_SWAP=y
        CONFIG_KEYS=y
        CONFIG_ASSOCIATIVE_ARRAY=y
        CONFIG_OID_REGISTRY=y
    

    参考:https://www.cnblogs.com/AP0904225/p/7020527.html

    重新编译Linux kernel.

    5.修改uboot bootargs

    配置目标板的MAC地址:
    setenv ethaddr 08:67:4E:BD:25:31
    配置目标板的IP地址 :
    setenv ipaddr 192.168.3.48
    配置目标板的子网掩码:
    setenv netmask 255.255.255.0
    配置目标板的网关:
    setenv gatewayip 192.168.3.1

    配置完成后使用ping 命令测试目标板的网络环境是否正确。

    bootargs 参数增加红色部分,IP配置修改为自己平台IP值:

    baudrate=115200
    ipaddr=192.168.1.165
    netmask=255.255.255.0
    gatewayip=192.168.3.1
    serverip=192.168.1.147
    bootcmd=nand read 0x1FFFFC0 0x1000000 0x800000;bootm 0x1FFFFC0
    bootargs_128M=mem=128M mmz=ddr,0,0,78M
    bootdelay=0
    stdin=serial
    stdout=serial
    stderr=serial
    ethact=up
    bootargs_1G=mem=1G mmz=ddr,0,0,380M
    bootargs=console=ttyAMA0,115200 root=/dev/nfs rw nfsroot=192.168.3.58:/home/wang/work/sync/nfs ethmac=08:67:4E:BD:25:31 ip=192.168.3.25:192.168.3.58:192.168.3.1:255.255.255.0::eth0:off init=/linuxrc noinitrd blkdevparts=mmcblk0:2M(boot),1M(bootargs),1M(baseparam),1M(pqparam),1M(logo),1M(cfg),1M(cfgbak),8M(kernel),30M(rootfs),25M(loader),-(others)
    

    相关文章

      网友评论

          本文标题:Linux操作系列之07--- Linux配置NFS服务器及嵌入

          本文链接:https://www.haomeiwen.com/subject/lqgithtx.html