uboot支持大量的网络相关命令, 比如 dhcp、ping、nfs 和 tftpboot。
在使用 uboot 的网络功能之前先用网线将开发板的 ENET2 接口和电脑或者路由器连接起来,I.MX6U-ALPHA 开发板有两个网口:ENET1 和 ENET2,一定要连接 ENET2,不能连接错了。
setenv ipaddr 192.168.1.50
setenv ethaddr 00:04:9f:04:d2:35
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.250
saveenv
注意,网络地址环境变量的设置要根据自己的实际情况,确保 Ubuntu 主机和开发板的 IP地址在同一个网段内,比如我现在的开发板和电脑都在 192.168.1.0 这个网段内,所以设置开发板的 IP 地址为192.168.1.50,我的 Ubuntu 主机的地址为 192.168.1.250,因此 serverip 就是192.168.1.250。ethaddr 为网络 MAC 地址,是一个 48bit 的地址,如果在同一个网段内有多个开发板的话一定要保证每个开发板的 ethaddr 是不同的,否则通信会有问题!设置好网络相关的环境变量以后就可以使用网络相关命令了。
1、ping 命令
ping 192.168.1.250
2、dhcp 命令
dhcp 用于从路由器获取 IP 地址,前提得开发连接到路由器上的,如果开发板是和电脑直连的, 那么 dhcp 命令就会失效。 直接输入 dhcp 命令即可通过路由器获取到 IP 地址, 如图所示:
3、nfs 命令
nfs(Network File System)网络文件系统,通过 nfs 可以在计算机之间通过网络来分享资源,比如我们将 linux 镜像和设备树文件放到 Ubuntu 中, 然后在 uboot 中使用 nfs 命令将 Ubuntu 中的 linux 镜像和设备树下载到开发板的 DRAM 中。
我们一般使用 uboot 中的 nfs 命令将 Ubuntu 中的文件下载到开发板的 DRAM 中,在使用之前需要开启 Ubuntu 主机的 NFS 服务,并且要新建一个 NFS 使用的目录,以后所有要通过NFS 访问的文件都需要放到这个 NFS 目录中。
我设置的/home/xue1995/linux/nfs 这个目录为我的 NFS 文件目录。uboot 中的 nfs 命令格式如下所示:
nfs [loadAddress] [[hostIPaddr:]bootfilename]
- loadAddress 是要保存的 DRAM 地址
- [[hostIPaddr:]bootfilename] 是要下载的文件地址
测试zImage下载地址:https://cloud.189.cn/t/VF7Bfu2E3Mrq
将zImage复制到/home/xue1995/linux/nfs中,如下图
准备好以后就可以使用 nfs 命令来将 zImage 下载到开发板 DRAM 的 0X80800000 地址处,SecureCRT中的输入如下命令:
nfs 80800000 192.168.1.250:/home/xue1995/linux/nfs/zImage
下载完成以后会提示下载的数据大小,这里下载的 6071136 字节,而 zImage 的大小就是 6071136 字节。
4、tftp 命令
tftp 命令的作用和 nfs 命令一样,都是用于通过网络下载东西到 DRAM 中,只是 tftp 命令使用的 TFTP 协议,Ubuntu 主机作为 TFTP 服务器。因此需要在 Ubuntu 上搭建 TFTP 服务器,需要安装 tftp-hpa 和 tftpd-hpa,命令如下:
sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd
和 NFS 一样,TFTP 也需要一个文件夹来存放文件,在用户目录下新建一个目录,命令如下:
mkdir tftpboot
chmod 777 tftpboot/
终端输入:sudo gedit /etc/xinetd.d/tftp
提示:如果错误,则先创建xinetd.d文件夹。
mkdit /etc/xinetd.d/
chmod 777 /etc/xinetd.d/
输入如下内容:
server tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /home/xue1995/linux/tftpboot/
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
完了以后启动 tftp 服务,命令如下:
sudo service tftpd-hpa start
打开/etc/default/tftpd-hpa 文件,将其修改为如下所示内容:
sudo gedit /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/xue1995/linux/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s"
TFTP_DIRECTORY 就是我们上面创建的 tftp 文件夹目录,以后我们就将所有需要通过TFTP 传输的文件都放到这个文件夹里面,并且要给予这些文件相应的权限。
最后输入如下命令, 重启 tftp 服务器:
sudo service tftpd-hpa restart
测试zImage下载地址:https://cloud.189.cn/t/VF7Bfu2E3Mrq
将zImage复制到/home/xue1995/linux/tftpboot 中,如下图
tftp 服务器已经搭建好了,接下来就是使用了。将 zImage 镜像文件拷贝到 tftpboot 文件夹中,并且给予 zImage 相应的权限,命令如下:
cp nfs/zImage tftpboot/
chmod 777 tftpboot/zImage
uboot 中的 tftp 命令格式如下:
tftpboot [loadAddress] [[hostIPaddr:]bootfilename]
- loadAddress 是文件在 DRAM 中的存放地址
- [[hostIPaddr:]bootfilename]是要从 Ubuntu 中下载的文件
现在将 tftpboot 文件夹里面的 zImage 文件下载到开发板 DRAM 的 0X80800000 地址处,SecureCRT中的输入如下:
tftp 80800000 zImage
有时候使用 tftp 命令从 Ubuntu 中下载文件的时候会出现如图 30.4.4.11 所示的错误提示:
在图中可以看到“TFTP error: ‘Permission denied’ (0)”这样的错误提示,提示没有权限,出现这个错误一般有两个原因:
①、在 Ubuntu 中创建 tftpboot 目录的时候没有给予 tftboot 相应的权限。
②、tftpboot 目录中要下载的文件没有给予相应的权限。