第14章:网络与远程更新
TFTP (Trivial File Transfer Protocol) 是一种简单的文件传输协议,常用于嵌入式系统中加载内核和文件系统。它基于UDP协议,占用端口69。
在UBoot中配置TFTP客户端需要设置以下环境变量:
setenv ipaddr 192.168.1.100 # 开发板IP地址
setenv serverip 192.168.1.1 # TFTP服务器IP
setenv netmask 255.255.255.0 # 子网掩码
setenv gatewayip 192.168.1.254 # 网关
setenv ethaddr 00:11:22:33:44:55 # MAC地址
saveenv
使用TFTP下载内核镜像:
tftp 0x82000000 uImage # 下载内核到内存地址0x82000000
bootm 0x82000000 # 启动内核
注意: 内存地址0x82000000是一个示例,实际地址需要根据具体硬件平台确定。
NFS (Network File System) 允许系统通过网络共享目录和文件,常用于开发阶段挂载根文件系统。
首先确保NFS服务器已正确配置并导出目录,然后在UBoot中设置:
setenv bootargs root=/dev/nfs rw nfsroot=192.168.1.1:/path/to/rootfs ip=192.168.1.100:192.168.1.1:192.168.1.254:255.255.255.0::eth0:off
启动内核并挂载NFS根文件系统:
tftp 0x82000000 uImage # 下载内核
bootm 0x82000000 # 启动内核
警告: 生产环境中不建议使用NFS作为根文件系统,仅适用于开发阶段。
| 特性 | TFTP | NFS |
|---|---|---|
| 协议 | UDP | TCP |
| 用途 | 文件下载 | 文件系统挂载 |
| 速度 | 较慢 | 较快 |
| 配置复杂度 | 简单 | 复杂 |
| 适用场景 | 内核/设备树下载 | 开发阶段根文件系统 |
OTA (Over-The-Air) 更新允许设备通过网络远程更新固件,无需物理接触设备。
注意: OTA更新必须包含回滚机制,以防更新失败导致设备无法启动。
UDP协议实现简单,适合小型设备或局域网环境。
# 设置网络参数
setenv ipaddr 192.168.1.100
setenv serverip 192.168.1.1
# 下载固件
udp 0x82000000 firmware.bin
# 验证固件
crc32 0x82000000 ${filesize}
# 写入Flash
sf probe 0
sf erase 0x100000 0x200000
sf write 0x82000000 0x100000 ${filesize}
HTTP协议更可靠,适合互联网环境下的OTA更新。
# 设置网络参数
setenv ipaddr 192.168.1.100
setenv gatewayip 192.168.1.254
# 下载固件
http 0x82000000 http://server/firmware.bin
# 验证固件
sha256sum 0x82000000 ${filesize}
# 写入Flash
sf probe 0
sf erase 0x100000 0x200000
sf write 0x82000000 0x100000 ${filesize}
OTA更新必须考虑安全性,防止恶意固件被安装。
警告: 不安全的OTA更新可能导致设备被攻击者控制,必须谨慎实现。
# 下载固件和签名
http 0x82000000 http://server/firmware.bin
http 0x83000000 http://server/firmware.sig
# 验证签名
rsa verify 0x82000000 ${filesize} 0x83000000
# 如果验证通过,则写入Flash
if test $? -eq 0; then
sf probe 0
sf erase 0x100000 0x200000
sf write 0x82000000 0x100000 ${filesize}
fi
| 特性 | UDP OTA | HTTP OTA |
|---|---|---|
| 可靠性 | 低 | 高 |
| 安全性 | 低 | 高(支持HTTPS) |
| 实现复杂度 | 简单 | 复杂 |
| 适用场景 | 局域网,小型更新 | 互联网,大型更新 |
| 资源占用 | 少 | 多 |