[ARM Linux系统移植] U-Boot 网络命令

"先修"笔记:

[ARM Linux系统移植] U-Boot 初次编译

[ARM Linux系统移植] U-Boot 的基础命令

1. 网络配置

在进行 u-boot 的网络命令学习之前,需要通过网线使开发板和电脑能够通信。因为设备限制(没有多余的路由器),我这边是将网线直连实验的笔记本电脑,下面记录配置过程。

需要将网线连接到开发板的 ENET2 网口。启动开发板进入 u-boot 后,就能通过 ipconfig 命令看到新的以太网适配器。可以从图 1 看到电脑分配的 IP 地址是 169.254.43.43,并基于此信息,手动分配给开发板 IP 地址为 169.254.43.44,Linux 虚拟机 IP 地址为 169.254.43.45

  • >ipconfig
图1 电脑的 IP 地址

首先来分配虚拟机的 IP 地址,采用虚拟机和电脑主机采用直接桥接的方式。因为多网卡的原因,所以如图 2 所示,需要在 编辑 - 虚拟网络编辑器 处设置桥接模式使用的物理网卡。接着就可以在具体虚拟机的网络设置页面选择桥接模式,如图 3 所示,这边需要注意的是,自己在实验的过程中发现需要勾选 复制物理网络连接状态 才能正常配置。如图 4 所示,进入虚拟机操作系统之后,还需要手动设置一下虚拟的 IP 地址和掩码地址(参照 图1 信息)。以上虚拟机和主机的之间的连接就配置完毕了,可以在主机(169.254.43.43)上 ping 虚拟机(169.254.43.45)确保是否连通成功。

  • >ping 169.254.43.45
图2 桥接模式设置

图3 虚拟机网络配置

图4 Linux 网络设置

接着需要配置开发板的网络参数,分配设置开发板对应的 IP 地址、物理网卡地址和服务器地址(虚拟机地址)。

  • >setenv ipaddr 169.254.43.44
  • >setenv ethaddr 00:04:9f:04:d2:35
  • >setenv serverip 169.254.43.45
  • >saveenv

在 u-boot 上同样可以使用 ping 命令验证和虚拟机是否连通。

  • >ping 169.254.43.45

2. nfs 命令

首先需要在 Linux 虚拟机上安装 nfs 服务器:

  • >sudo apt-get install nfs-kernel-server rpcbind

接着在 /etc/exports 文件末尾添加如下内容,其中的目录为当前系统上自定义的存放文件的目录。

  • /home/tim/nfs *(rw,sync,no_root_squash)

最后启动重启 nfs 服务:

  • >sudo /etc/init.d/nfs-kernel-server restart

u-boot 上的 nfs 命令使用格式为 nfs [loadAddress] [[hostIPaddr:]bootfilename],其中 loadAddress 为要保存的 DRAM 地址,hostIPaddr 地址为 nfs 服务器地址,bootfilename 为要下载的文件名。可以使用 nfs 下载编译 zImage 文件,同时下载完毕后可以使用内存查看命令(见 附录)验证下载的内容是否正确。

  • >nfs 80800000 169.254.43.45:/home/tim/nfs/zImage

3. tftp 命令

同样首先需要在 Linux 虚拟机上安装 tftp 服务器:

  • >sudo apt-get install tftp-hpa tftpd-hpa
  • >sudo apt-get install xinetd

接着需要新建 /etc/xinetd.d/tftp 文件,输入以下内容(注意其中的目录路径)。

/etc/xinetd.d/tftp 文件
  1. server tftp
  2. {
  3.   socket_type = dgram
  4.   protocol = udp
  5.   wait = yes
  6.   user = root
  7.   server = /usr/sbin/in.tftpd
  8.   server_args = -s /home/tim/tftp/
  9.   disable = no
  10.   per_source = 11
  11.   cps = 100 2
  12.   flags = IPv4
  13. }

设置完成后,启动 tftp 服务:

  • >sudo service tftpd-hpa start

接着打开 /etc/default/tftpd-hpa 文件,将其中的内容修改如下,同样注意目录的路径。

/etc/default/tftpd-hpa 文件
  1. # /etc/default/tftpd-hpa
  2.  
  3. TFTP_USERNAME="tftp"
  4. TFTP_DIRECTORY="/home/tim/tftp"
  5. TFTP_ADDRESS=":69"
  6. #TFTP_OPTIONS="--secure"
  7. TFTP_OPTIONS="-l -c -s"

最后重启 tftp 服务:

  • >sudo service tftpd-hpa restart

tftp 命令的格式和 nfs 的一致,为 tftpboot [loadAddress] [[hostIPaddr:]bootfilename],但是 tftp 命令可以省略 hostIPaddr 这个参数。同样可以使用 tftp 命令将编译的 zImage 文件和设备树文件下载到 DRAM 相关位置,再进行引导,从而到达快速调试的作用。其中的 bootargs 参数和 bootz 命令需要后续进行了解。

  • >tftp 80800000 zImage
  • >tftp 83000000 imx6ull-14x14-emmc-4.3-800x480-c.dtb
  • >setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
  • >bootz 80800000 - 83000000

附录 内存操作命令

内存操作命令用于直接对 DRAM 进行读写操作。

1. md 命令

md 命令为 “memory display” 的缩写,用于查看指定位置的内存值。用法为 md [.b, .w, .l] address [# of objects],其中的 b、w、l 分别代表 byte、word、long;# 后跟多少个这样的单位。使用举例:

  • >md.b 80800000 10

2. mm 命令

mm 命令为 “memory modify” 的缩写,用于修改指定位置的内存值,修改的地址是自动递增的,输入 "q" 退出。用法为 mm [.b, .w, .l] address 命令一样。使用举例:

  • >mm.b 80800000
  • 80800000: 00 ? ff
  • 80800001: 00 ? ff
  • 80800002: a0 ? q

3. nm 命令

nm 命令和 mm 命令类似,只不过是修改的地址是固定的,也是输入 "q" 退出。


4. mw 命令

mw 命令为 “memory write” 的缩写,用于填充指定位置内存的值。用法为 mw [.b, .w, .l] address value [count]。使用举例:

  • >mw.b 80800000 0 2

5. cp 命令

cp 命令,用于将源地址指定数量的内容拷贝到目标地址。用法为 cp [.b, .w, .l] source target count。使用举例:

  • >cp.b 80800004 80800000 2

6. cmp 命令

cmp 命令,用于比较源地址和目标地址下指定个数的值是否相等。用法为 cmp [.b, .w, .l] addr1 addr2 count。使用举例:

  • >cmp.b 80800004 80800000 2
  • Total of 2 byte(s) were the same
  • >cmp.b 80800004 80800000 4
  • byte at 0x80800007 (0xe1) != byte at 0x80800003 (0xe)
  • Total of 3 byte(s) were the same