网络操作命令
进行网络操作之前,我们需要先配置一下 U-Boot 网络相关的环境变量,包括开发板的 IP 地址、MAC 地址、网关地址、子网掩码、服务器 IP 地址,并要保证开发板的 IP 地址和服务器 IP 地址在同一网段内:
setenv ipaddr 192.168.0.232 # U-Boor IP 地址 setenv ethaddr 00:aa:bb:cc:dd:ef # MAC 地址 setenv gatewayip 192.168.0.1 # 网关地址 setenv netmask 255.255.255.0 # 子网掩码 setenv serverip 192.168.0.120 # 服务器 IP 地址 saveenv # 保存环境变量
ping 命令
- 通过 ping 命令可以验证开发板的网络能否使用,是否可以和服务器进行通信:
=> ? ping ping - send ICMP ECHO_REQUEST to network host Usage: ping pingAddress
- ping 服务器 IP 地址:
dhcp 命令
- dhcp 用于开发板自动获取 IP 地址:
=> ? dhcp dhcp - boot image via network using DHCP/TFTP protocol Usage: dhcp [loadAddress] [[hostIPaddr:]bootfilename]
- 不仅如此,dhcp 命令还可以用来获取镜像文件
nfs 命令
- nfs(Network File System),即网络文件系统,通过 nfs 可以在计算机之间通过网络来分享文件资源,nfs 的用法:
=> ? nfs nfs - boot image via network using NFS protocol Usage: nfs [loadAddress] [[hostIPaddr:]bootfilename]
- U-Boot 中 nfs 一般用来通过服务器下载 Linux 镜像文件,如 zImage,在使用 nfs 之前,服务器要开启 NFS 服务并保证开发板能够 ping 通服务器 IP 地址,zImage 存放在服务器 /home/alpha/nfs-work/ 目录下:
- 使用 nfs 命令将 zImage 下载到开发板的 0x80800000 地址处:
=> nfs 80800000 192.168.0.120:/home/alpha/nfs-work/zImage
tftp 命令
- tftp 和 nfs 一样也可以从服务器下载文件,只不过使用的是 TFTP 协议:
=> ? tftp tftpboot - boot image via network using TFTP protocol Usage: tftpboot [loadAddress] [[hostIPaddr:]bootfilename]
- 同样在使用 tftp 之前服务器要开启 TFTP 服务,并保证开发板能够 ping 通服务器 IP 地址,使用 tftp 命令下载 zImage 到开发板的 0x80800000 地址处:
tftp 80800000 zImage
MMC 命令
在 U-Boot 中,一般将 eMMC 和 SD 卡视为一种设备,MMC 命令同样适用于 SD 卡。
- 输入 ?mmc 即可查看与 mmc 有关的命令:
- U-Boot 支持的 MMC 命令总结如下:
命令 | 描述 |
mmc info | 查看 MMC 设备的相关信息 |
mmc read | 读取 MMC 中的数据到 RAM 中 |
mmc wirte | 将 RAM 中的数据写入 MMC 设备 |
mmc erase | 擦除 MMC 设备数据 |
mmc rescan | 扫描 MMC 设备 |
mmc part | 查看 MMC 设备的分区 |
mmc dev | 切换 MMC 设备 |
mmc list | 查看当前所有 MMC 设备 |
mmc hwpartition | 设置 MMC 设备的分区 |
mmc bootbus…… | 设置指定 MMC 设备的 BOOT_BUS_WIDTH 域的值 |
mmc bootpart…… | 设置指定 MMC 设备的 boot 和 RPMB 分区的大小 |
mmc partconf…… | 设置指定 MMC 设备的 PARTITION_CONFG 域的值 |
mmc rst | 复位 MMC 设备 |
mmc setdsr | 设置 DSR 寄存器的值。 |
查看 MMC 设备
- U-Boot 启动日志可以看到当前设备为 eMMC:
- mmc list 命令用于查看当前一共多少 MMC 设备:
- mmc info 命令用于查看当前 MMC 设备的信息:
- mmc part 命令用于查看当前 MMC 设备的分区:
切换 MMC 设备
- mmc dev 命令用于切换当前 MMC 设备:
mmc dev [dev] [part] - show or set current mmc device [partition] # [dev] 是要切换到的 MMC 设备号,[part] 是分区号,默认为分区 0
- 如执行命令切换到 SD 卡:
mmc dev 0
- 查看 SD 卡设备信息:
- 查看 SD 卡设备分区:
MMC 读命令
- mmc read 命令用于读取 mmc 设备的数据到 RAM 中:
mmc read addr blk# cnt # addr 是数据读取到 RAM 中的地址 # blk 是要读取的块(扇区)的起始地址(十六进制),一个块是 512 字节 # cnt 是要读取的块(扇区)的数量(十六进制)
- 如读取 eMMC 某处数据,执行命令如下:
mmc dev 1 0 # 切换到 eMMC 分区 0 mmc read 80800000 600 10 # 从 eMMC 的第 1536(0x600)个块开始,读取 16(0x10)个块的数据到 RAM 的 0x80800000 地址处
- 通过 md.b 命令查看 0x80800000 处的数据
- 根据数据内容可以猜到这些数据为 U-Boot 的环境变量,即 eMMC 中 U-Boot 环境变量的存储起始地址就是第 1536*512 = 786432 字节处。
MMC 写命令
- mmc wirte 命令用于将 RAM 中的数据写入到 MMC 设备中:
mmc write addr blk# cnt # addr 是要写入 MMC 中的数据在 RAM 中的起始地址 # blk 是要写入 MMC 的块的起始地址(十六进制) # cnt 是要写入的块的数量(十六进制),一个块为 512 字节
- 从 TFTP 服务端创建一个测试文件 test.txt,文件大小共 12 个字节:
- 在 U-Boot 中执行 tftp 命令将其下载到 RAM 中:
- 执行写命令再将其写到 SD 卡中:
mmc dev 0 0 # 切换到 SD 卡 0 分区 mmc write 80800000 2 1 # SD 卡一个块 512 个字节,从第 2 个块开始烧写,一共烧写 1 个块
- 通过读命令将 SD 卡数据读到 RAM 中查看:
- 注意:不要写 SD 卡或者 eMMC 的前两个块(扇区),里面保存着分区表!
MMC 擦除命令
- mmc erase 命令用于擦除 MMC 设备数据,慎用!
mmc erase blk# cnt # blk 为要擦除的起始块 # cnt 是要擦除的块的数量
更多内容
- CSDN博客:@Hello阿尔法
- 哔哩哔哩:@Hello阿尔法
- 知乎:@Hello阿尔法