[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

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



接着需要配置开发板的网络参数,分配设置开发板对应的 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 文件,输入以下内容(注意其中的目录路径)。
- server tftp
- {
- socket_type = dgram
- protocol = udp
- wait = yes
- user = root
- server = /usr/sbin/in.tftpd
- server_args = -s /home/tim/tftp/
- disable = no
- per_source = 11
- cps = 100 2
- flags = IPv4
- }
设置完成后,启动 tftp 服务:
- >sudo service tftpd-hpa start
接着打开 /etc/default/tftpd-hpa 文件,将其中的内容修改如下,同样注意目录的路径。
- # /etc/default/tftpd-hpa
- TFTP_USERNAME="tftp"
- TFTP_DIRECTORY="/home/tim/tftp"
- TFTP_ADDRESS=":69"
- #TFTP_OPTIONS="--secure"
- 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