开发板直连电脑搭建NFS&TFTP环境

作者:zzssdd2

E-mail:[email protected]

一、说明

  • Linux系统:Ubuntu 20.04.3 LTS
  • Windows系统:Windows 10 专业版
  • 虚拟机:VMware® Workstation 15 Pro
  • 开发板:IMX6ULL
  • 电脑通过WiFi上网,开发板与电脑通过网线直接连接

二、搭建环境

2.1、虚拟机设置

  1. 设置2个网络适配器:一个用于共享Windows的WiFi上网(NAT模式),一个用于网线连接的通信(桥接模式)。

    第一步:

    虚拟机 → 设置 → 网络适配器 → 添加 → 网络适配器 → 完成 → 选中添加的网络适配器 → 桥接模式 → 确定

    开发板直连电脑搭建NFS&TFTP环境_第1张图片

    第二步:

    编辑 → 虚拟网络编辑器 → 更改设置 → 添加网络 → 确定 → 选中添加网络 → 桥接模式 → 确定

开发板直连电脑搭建NFS&TFTP环境_第2张图片

2.2 Windows设置

控制面板\网络和 Internet\网络连接面板:选中电脑与开发板网线连接的网卡 → 属性 → 双击Internet协议版本4(TCP/IPv4) → 手动设置IP地址信息(确保与开发板和Ubuntu设置为同一网段)

开发板直连电脑搭建NFS&TFTP环境_第3张图片

2.3 Ubuntu设置

Ubuntu中有两个以太网,其中一个是共享Windows无线网络用于上网的,另一个是桥接电脑与开发板的,将这个网络的IP手动设置为和Windows、开发板同一网段。Ubuntu → 设置 → 网络 → 设置桥接网络 → IPV4 → 手动 → 填入IP信息,点击应用后将网络开关按钮关闭再打开。

开发板直连电脑搭建NFS&TFTP环境_第4张图片

2.4 开发板设置

开发板进入uboot模式,然后设置开发板IP与Windows、Ubuntu同一网段,并将服务器IP地址设置为Ubuntu

# 设置开发板ip
=> setenv ipaddr 192.168.10.128
# 设置子网掩码
=> setenv netmask 255.255.255.0
# 设置网关
=> setenv gatewayip 192.168.10.1
# 设置服务器ip
=> setenv serverip 192.168.10.64
# 设置网卡1
=> setenv ethaddr ca:38:29:c3:28:30
# 设置网卡2(没有或未配置则不设置)
=> setenv eth1addr 76:7d:33:a8:f0:e7
# 保存设置
=> saveenv

三、搭建服务

3.1 TFTP服务

  1. 安装

    sudo apt-get install tftp-hpa tftpd-hpa
    

    tftp-hpa:客户端

    tftpd-hpa :服务端

  2. 配置

    修改 /etc/default/tftpd-hpa文件内容如下:

    # /etc/default/tftpd-hpa
    
    TFTP_USERNAME="tftp"
    TFTP_DIRECTORY="/home/zsd/work/tftp"
    TFTP_ADDRESS=":69"
    TFTP_OPTIONS="-l -c -s"
    

    TFTP_DIRECTORY:tftp 启动根目录,修改为自己的目录

    TFTP_OPTIONS:tftp 启动选项:-l :Listen, -c :create, -s :secure

  3. 重启

    sudo service tftpd-hpa restart
    

3.2 NFS服务

  1. 安装

    sudo apt-get install nfs-kernel-server
    
  2. 创建

    # 创建nfs目录
    sudo mkdir /home/zsd/work/nfs
    # 更改权限
    sudo chmod 777 /home/zsd/work/nfs
    
  3. 配置

    # 打开配置文件
    sudo vim /etc/exports
    # 文件末添加内容如下
    /home/zsd/work/nfs *(rw,sync,no_root_squash)
    

    /home/zsd/work/nfs:NFS 共享的目录

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

    rw:访问者具有可读写权限

    sync:资料同步写入到内存与硬盘中

    no_root_squash: 访问者具有 root 权限

  4. 重启

    sudo /etc/init.d/nfs-kernel-server restart
    
  5. 查看

    $ showmount -e
    Export list for zsd-virtual-machine:
    /home/zsd/work/nfs *
    

3.3 Samba服务

  1. 安装

    sudo apt-get install samba samba-common
    
  2. 配置

    # 设置共享目录权限
    sudo chmod 777 /home/zsd/work/samba
    # 修改配置文件
    sudo vim /etc/samba/smb.conf
    # 添加以下内容:
    [samba]
    comment = samba common share directory
    path = /home/zsd/work/samba
    valid users = zsd
    create mask = 0755
    directory mask = 0755
    browseable = yes
    public = yes
    writeable = yes
    available = yes
    
  3. 添加用户

    sudo smbpasswd -a zsd
    # 输入2次密码后完成用户添加
    
  4. 重启

    sudo /etc/init.d/smbd restart
    
  5. 访问

    Windows下win+R打开运行窗口,输入Ubuntu的IP地址即可访问(ifconfig命令查询)

    例:输入:\\192.168.1.40

四、验证

4.1 TFTP挂载内核&设备树

首先,开发板网线连接电脑,然后启动开发板进入uboot模式。

方式1:

# 设置启动命令bootcmd
#	zImage为内核镜像,通过tftp下载到首地址为0x80800000的内存空间
#	imx6ull-14x14-topeet-emmc.dtb为设备树
#	bootz根据内核镜像地址和设备树地址加载启动
=> setenv bootcmd 'tftp 80800000 zImage;tftp 83000000 imx6ull-14x14-topeet-emmc.dtb;bootz 80800000 - 83000000'
# 保存
=> saveenv
Saving Environment to MMC... Writing to MMC(0)... OK
# 复位重启
=> reset

方式2:

# 加载内核镜像
tftp 80800000 zImage
# 加载设备树
tftp 83000000 imx6ull-14x14-topeet-emmc.dtb
# 启动加载
bootz 80800000 - 83000000

4.2、NFS挂载文件系统

测试nfs服务

1-将zImage放在nfs目录下
2-启动开发板进入uboot
3-uboot中使用[? nfs]查看nfs使用方法:nfs [loadAddress] [[hostIPaddr:]bootfilename]
4-测试nfs(将nfs服务器目录中在zImage下载到开发板80800000地址):
nfs 80800000 192.168.10.64:/home/zsd/work/nfs/zImage

挂载rootfs

开发板网线连接电脑,然后启动开发板进入uboot模式设置启动参数bootargs

# 设置启动参数bootargs
#	nfsroot后的参数为Ubuntu的nfs文件夹路径;格式为:nfsroot=NFS服务器IP:文件系统的绝对路径.
#	ip后的参数为开发板网络信息:ip=开发板IP:服务器IP:网关,子网掩码::eth0:off. 
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.10.64:/home/zsd/work/nfs/rootfs ip=192.168.10.128:192.168.10.64:192.168.10.1:255.255.255.0::eth0:off’
# 保存
=> saveenv
Saving Environment to MMC... Writing to MMC(0)... OK
# 复位重启
=> reset

五、其他

开发板与虚拟机nfs服务版本不同导致下载、挂载失败解决方法(提示"Loading: * ERROR: File lookup fail"、"VFS: Unable to mount root fs via NFS, trying floppy."等)

问题原因:Ubuntu的nfs默认为协议V3和协议V4,开发板uboot默认启动的是协议V2的形式,从而导致uboot不能在nfs服务器中找到文件。

解决方法:让Ubuntu中的nfs兼容协议V2,修改/etc/default/nfs-kernel-server文件。

1)打开文件:sudo vim /etc/default/nfs-kernel-server

2)修改如下:

# Number of servers to start up
RPCNFSDCOUNT="-V 2 8"

# Runtime priority of server (see nice(1))
RPCNFSDPRIORITY=0

# Options for rpc.mountd.
# If you have a port-based firewall, you might want to set up
# a fixed port here using the --port option. For more information, 
# see rpc.mountd(8) or http://wiki.debian.org/SecuringNFS
# To disable NFSv4 on the server, specify '--no-nfs-version 4' here
RPCMOUNTDOPTS="-V 2 --manage-gids"

# Do you want to start the svcgssd daemon? It is only required for Kerberos
# exports. Valid alternatives are "yes" and "no"; the default is "no".
NEED_SVCGSSD=""

# Options for rpc.svcgssd.
RPCSVCGSSDOPTS="--nfs-version 2,3,4 --debug --syslog"

3)保存退出:ESC --> :wq --> Enter

4)重启NFS服务器:sudo service nfs-kernel-server restart

你可能感兴趣的:(嵌入式Linux,linux,嵌入式,nfs)