原始分区更新
的更新
命令通过执行以下操作简化了更新eMMC分区的任务:
从指定的介质下载所需的固件映像文件到RAM内存。
检索并检查要更新的分区的信息(偏移量、大小)。
将固件映像写入分区。
回读并验证写入的固件映像。
语法
=>help update update - Digi模块更新命令用法:update [source] [extra-args…]描述:更新(原始写入)在$mmcdev通过参数:- partition:分区索引,GUID分区名称,或保留名称之一:uboot - [source]: tftp|nfs|mmc|ram - [extra-args]:额外的参数取决于'source' source=tftp|nfs -> [filename] - filename:文件传输(如果没有提供,filename将从变量$_file中获取)source=mmc|usb -> [device:part] [filename] - device:part:设备和分区的数量- filename:要传输的文件(如果没有提供,文件名将从变量$_file中获取)source=ram -> [image_address] [image_size] - image_address: ram中图像的地址(如果没有提供$loadaddr) - image_size: ram中图像的大小(如果没有提供$filesize)
例子
例1:更新分区名称的名字与文件test.img
从TFTP下载:
=>更新myname TFTP test.img
例2:更新分区名称linux在模块的eMMC中使用默认文件名(由变量决定)linux_file美元
)从uSD卡上的FAT分区读取文件;
=>更新Linux MMC 1:1 fat
检查默认分区名存储布局。
使用环境变量进行定制
您可以通过参数和使用以下环境变量来定制update命令的行为:
地址
变量 | 描述 |
---|---|
|
下载用于更新的固件映像文件的RAM地址。 |
|
固件映像被读回的RAM地址,用于验证。U-Boot自动将此变量设置为可用RAM的中间RAM地址,从 |
图像文件名
变量 | 描述 |
---|---|
|
用于更新引导加载程序的默认映像文件名(如果没有作为参数传递文件名)。 |
|
这种形式的变量将包含用于更新命名的分区的默认文件名<分区名称>。例如,包含分区的默认文件名的变量复苏会被称为 |
目标媒体
变量 | 描述 |
---|---|
|
要写入固件的目标MMC设备索引。 |
|
对于“u-boot”分区更新,目标MMC分区索引写入固件。 |
更新引导加载程序
你可以使用更新
命令,手动更新eMMC中的引导加载程序。例如,使用缺省文件名(在变量中)从TFTP进行更新uboot_file美元
):
=>更新uboot TFTP
写入无效的引导加载程序文件可能导致目标无法引导。 |
Digi不时发布U-Boot更新以修复问题或添加新功能。添加到U-Boot中的许多自定义功能取决于环境变量和脚本,这些变量和脚本可能在新发布的版本中具有新值。Digi建议您在升级U-Boot后将环境重置为默认设置:
=>Env default -a
这将重置整个环境,除了受保护的变量(如MAC地址)。在重置环境之后,您可能需要调整制造或引导脚本,以适应默认环境中的更改,例如新的或修改的脚本、变量和默认文件名。
看到U-Boot文件的变体来验证您需要哪个U-Boot二进制文件。
动态更新机制
普通的更新命令首先将文件完全从介质传输到RAM内存中。然后将文件从RAM写入eMMC。有时,用于更新某个分区的固件文件非常大,可能比平台的可用RAM还大。在这种情况下,更新策略必须:
将文件的一个块从指定的介质传输到RAM存储器。
将块写入分区并验证写入的数据。
重复该过程,直到文件完全写入。
我们称这种机制为动态更新。
动态更新机制只能在从TFTP源进行更新时起作用,并且只推荐用于更新非常大的映像。请注意,如果在文件传输过程中出现任何问题,则分区将保留部分写入(与标准更新相比,如果传输失败,分区将保持不变)。
出于安全原因,在更新引导加载程序时将自动禁用动态更新机制。
您可以通过设置变量来激活动态更新机制otf-update美元
来是的
,然后正常使用update命令。如果变量otf-update美元
没有定义,则更新
命令可能会自动激活动态更新机制,如果要更新的分区的大小大于用于保存固件的可用RAM。(TFTP协议不指示传输文件的大小。)
动态更新机制在将每个块写入eMMC时暂停TFTP传输,并在回读并验证写入的数据后继续传输。由于这个原因,它可能不能与所有TFTP服务器一起工作。一定要检查TFTP服务器是否有足够大的超时,以便在设备进行写入和验证时,它不会因为没有及时收到客户机的ack而取消传输。此外,禁用任何不等待客户端的ack就发送数据包的机制(如预期窗口),这些机制可能并不总是与动态更新机制一起工作。 |
更新分区内的文件
的updatefile
命令简化了分区文件系统中文件的更新。标准更新命令将原始数据写入eMMC,而updatefile
命令使用U-Boot文件系统支持,通过以下操作将文件写入格式化的分区:
从指定的媒体下载所需的文件到RAM内存。
将文件写入分区的文件系统。
语法
=>help updatefile updatefile - Digi modules updatefile命令用法:updatefile [source] [extra-args…]说明:通过在$mmcdev中更新/写入中的文件参数:- partition:分区索引或GUID分区名称,用于上传文件- [source]: tftp|nfs|mmc|ram - [extra-args]:额外参数取决于'source' source=tftp|nfs -> [source_file] [targetfile] [target_fs] - source_file:要传输的文件- target_file:目标文件名- target_fs: fat(默认)source=mmc -> [device:part] [filesystem] [source_file] [target_file] [target_fs] - device:part:设备和分区的数量-文件系统:fat(默认)|ext4 - source_file:要传输的文件- target_file:目标文件名- target_fs: fat(默认)source=ram -> [image_address] [image_size] [target_fs] - image_address: ram中映像的地址(如果没有提供$loadaddr) - image_size: ram中映像的大小(如果没有提供$filesize) - target_file:目标文件名- target_fs: fat(默认)
例子
例1:更新newkernel.bin
文件从TFTP到linuxFAT分区:
=>Updatefile Linux TFTP newkernel.bin
例2:更新newkernel.bin
文件从uSD卡FAT分区3到linuxFAT分区,用文件名保存myImage-test
:
=>updatefile linux mmc:3 fat newkernel.bin
限制和注意事项
仅支持FAT和EXT4文件系统。
文件只能被覆盖,不能被删除。
文件系统支持不检查可用空间。
在没有空间的文件系统上写入文件可能会损坏整个文件系统。 |