开发板直连电脑搭建NFS&TFTP环境
作者:zzssdd2
E-mail:zzssdd2@foxmail.com
一、说明
- Linux系统:Ubuntu 20.04.3 LTS
- Windows系统:Windows 10 专业版
- 虚拟机:VMware® Workstation 15 Pro
- 开发板:IMX6ULL
- 电脑通过WiFi上网,开发板与电脑通过网线直接连接
二、搭建环境
2.1、虚拟机设置
-
设置2个网络适配器:一个用于共享Windows的WiFi上网(NAT模式),一个用于网线连接的通信(桥接模式)。
第一步:
虚拟机 → 设置 → 网络适配器 → 添加 → 网络适配器 → 完成 → 选中添加的网络适配器 → 桥接模式 → 确定
第二步:
编辑 → 虚拟网络编辑器 → 更改设置 → 添加网络 → 确定 → 选中添加网络 → 桥接模式 → 确定
2.2 Windows设置
在控制面板\网络和 Internet\网络连接
面板:选中电脑与开发板网线连接的网卡 → 属性 → 双击Internet协议版本4(TCP/IPv4)
→ 手动设置IP地址信息(确保与开发板和Ubuntu设置为同一网段)
2.3 Ubuntu设置
Ubuntu中有两个以太网,其中一个是共享Windows无线网络用于上网的,另一个是桥接电脑与开发板的,将这个网络的IP手动设置为和Windows、开发板同一网段。Ubuntu → 设置 → 网络 → 设置桥接网络 → IPV4 → 手动 → 填入IP信息,点击应用
后将网络开关按钮关闭再打开。
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服务
-
安装
sudo apt-get install tftp-hpa tftpd-hpa
tftp-hpa
:客户端tftpd-hpa
:服务端 -
配置
修改
/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 -
重启
sudo service tftpd-hpa restart
3.2 NFS服务
-
安装
sudo apt-get install nfs-kernel-server
-
创建
# 创建nfs目录 sudo mkdir /home/zsd/work/nfs # 更改权限 sudo chmod 777 /home/zsd/work/nfs
-
配置
# 打开配置文件 sudo vim /etc/exports # 文件末添加内容如下 /home/zsd/work/nfs *(rw,sync,no_root_squash)
/home/zsd/work/nfs
:NFS 共享的目录*
:允许所有的网络段访问rw
:访问者具有可读写权限sync
:资料同步写入到内存与硬盘中no_root_squash
: 访问者具有 root 权限 -
重启
sudo /etc/init.d/nfs-kernel-server restart
-
查看
$ showmount -e Export list for zsd-virtual-machine: /home/zsd/work/nfs *
3.3 Samba服务
-
安装
sudo apt-get install samba samba-common
-
配置
# 设置共享目录权限 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
-
添加用户
sudo smbpasswd -a zsd # 输入2次密码后完成用户添加
-
重启
sudo /etc/init.d/smbd restart
-
访问
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