UBoot 系统基础入门

第14章:网络与远程更新

14.1 通过TFTP/NFS加载内核

TFTP协议简介

TFTP (Trivial File Transfer Protocol) 是一种简单的文件传输协议,常用于嵌入式系统中加载内核和文件系统。它基于UDP协议,占用端口69。

TFTP优点

  • 实现简单,资源占用少
  • 适合小型文件传输
  • 无需认证,使用方便

TFTP缺点

  • 没有加密,安全性低
  • 传输效率不高
  • 不支持大文件传输

配置UBoot使用TFTP

在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协议简介

NFS (Network File System) 允许系统通过网络共享目录和文件,常用于开发阶段挂载根文件系统。

NFS优点

  • 方便开发调试
  • 无需频繁烧写文件系统
  • 支持大文件访问

NFS缺点

  • 需要网络连接
  • 配置较复杂
  • 性能不如本地存储

配置UBoot使用NFS

首先确保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比较

特性 TFTP NFS
协议 UDP TCP
用途 文件下载 文件系统挂载
速度 较慢 较快
配置复杂度 简单 复杂
适用场景 内核/设备树下载 开发阶段根文件系统

14.2 使用UDP或HTTP实现OTA更新

OTA更新概述

OTA (Over-The-Air) 更新允许设备通过网络远程更新固件,无需物理接触设备。

OTA更新流程

  1. 设备检查更新
  2. 下载更新包
  3. 验证更新包
  4. 应用更新
  5. 重启验证

注意: OTA更新必须包含回滚机制,以防更新失败导致设备无法启动。

基于UDP的OTA实现

UDP协议实现简单,适合小型设备或局域网环境。

UBoot中实现UDP OTA

                # 设置网络参数
                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}
            

UDP OTA优缺点

优点
  • 实现简单
  • 资源占用少
  • 适合小型更新
缺点
  • 不可靠,可能丢包
  • 无加密,安全性低
  • 不适合大文件

基于HTTP的OTA实现

HTTP协议更可靠,适合互联网环境下的OTA更新。

UBoot中实现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}
            

HTTP OTA优缺点

优点
  • 可靠传输
  • 支持HTTPS加密
  • 适合大文件
缺点
  • 实现复杂
  • 资源占用多
  • 依赖TCP/IP栈

OTA更新安全考虑

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与HTTP OTA比较

特性 UDP OTA HTTP OTA
可靠性
安全性 高(支持HTTPS)
实现复杂度 简单 复杂
适用场景 局域网,小型更新 互联网,大型更新
资源占用