Linux操作系列之07--- Linux配置NFS服务器及嵌入式开发挂载rootfs

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服务器及嵌入式开发挂载rootfs)