打印
[技术问答]

【MA35D1】如何修改Uboot环境变量自动执行升级脚本

[复制链接]
476|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jcky001|  楼主 | 2023-9-25 10:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何修改Uboot环境变量自动执行升级脚本

使用特权

评论回复
沙发
wanduzi| | 2023-9-25 11:54 | 只看该作者
要修改 U-Boot 环境变量以自动执行升级脚本,您需要了解 U-Boot 的环境变量系统以及如何配置它。下面是一个通用的步骤,可以帮助您实现这一目标:

注意:在修改 U-Boot 环境变量之前,请确保您了解您的系统和 U-Boot 版本,以及如何安全地进行操作,因为不正确的配置可能导致系统无法启动。

进入 U-Boot 命令行模式: 通常,您需要通过串口连接到目标设备,并在启动时按下适当的按键(例如,Ctrl+C)以进入 U-Boot 命令行模式。

查看当前的环境变量: 使用 printenv 命令来查看当前的 U-Boot 环境变量。这将显示当前的配置,包括启动命令和其他参数。

定义升级脚本: 创建一个用于升级的脚本,确保脚本能够在 U-Boot 中执行。脚本应该包含您** U-Boot 自动执行的升级命令。

例如,假设您的升级脚本名为 upgrade.scr,并包含以下内容:

使用特权

评论回复
板凳
wanduzi| | 2023-9-25 11:54 | 只看该作者
#!/bin/sh
echo "Starting upgrade..."
# 在这里添加升级命令,例如 tftp、nandwrite、mmc write 等
echo "Upgrade complete."

使用特权

评论回复
地板
wanduzi| | 2023-9-25 12:34 | 只看该作者
将脚本拷贝到目标设备: 将升级脚本 upgrade.scr 拷贝到目标设备的适当位置,例如 SD 卡或闪存。

配置 U-Boot 环境变量: 修改 U-Boot 的环境变量以在启动时自动执行升级脚本。您需要编辑 U-Boot 中与启动相关的环境变量,通常是 bootcmd 和 bootdelay。

bootcmd 定义了 U-Boot 启动时要执行的命令。您可以将其设置为执行升级脚本的命令,例如:
setenv bootcmd 'source ${scriptaddr}'

scriptaddr 是 U-Boot 中的一个环境变量,它通常用于指定脚本的加载地址。您需要确保 scriptaddr 的值正确指向您存储升级脚本的位置。

bootdelay 是 U-Boot 启动时的延迟时间(以秒为单位)。您可以将其设置为零,以确保 U-Boot 将立即执行 bootcmd。
setenv bootdelay 0

保存环境变量: 使用 saveenv 命令将修改后的环境变量保存到闪存中,以便它们在下次启动时保持不变。

重新启动设备: 使用 reset 命令重新启动设备。U-Boot 应该会自动执行升级脚本。

请注意,具体的配置步骤可能因不同的硬件和 U-Boot 版本而异。确保在进行配置之前详细阅读相关的 U-Boot 文档,并在操作之前备份当前的环境变量,以防出现问题。错误的配置可能会导致设备无法启动,因此谨慎操作非常重要。

使用特权

评论回复
5
riplay| | 2023-9-27 13:20 | 只看该作者
以SD卡升级spi nand为例:
1、修改uboot-env.txt文件
board/nuvoton/ma35d1/uboot-env.txt
在spinandboot命令下添加
if fatload mmc 0:1 0x90000000 uboot-update-cmd.img;then source 0x90000000;fi;
spinandboot=if test ${mtdids} = 'spi-nand0=spi-nand0' ;then echo "Booting from spinand ... ...";if fatload mmc 0:1 0x90000000 uboot-update-cmd.img;then source 0x90000000;fi; mtd list; setenv bootargs noinitrd ubi.mtd=${spinand_ubiblock} root=ubi0:rootfs rootfstype=ubifs rw rootwait=1 console=ttyS0,115200n8 rdinit=/sbin/init mem=${kernelmem}; mtd read kernel ${kernel_addr_r}; mtd read device-tree ${fdt_addr_r}; booti ${kernel_addr_r} - ${fdt_addr_r}; fi
2、新建一个文件uboot-update.script,里面是下面的命令:
fatls mmc 0:1
mtd erase device-tree
mtd erase kernel
mtd erase rootfs
fatload mmc 0:1 0x90000000 img5.bin
mtd write device-tree 0x90000000
fatload mmc 0:1 0x90000000 img6.bin
mtd write kernel 0x90000000
fatload mmc 0:1 0x90000000 img7.bin
mtd write rootfs 0x90000000
3、用output/host/bin目录下的mkimage工具将文件uboot-update.script转换成image(uboot-update-cmd.img)
./mkimage -A arm -O linux -T script -C none -n "uboot-nor script" -d ~/workspace/uboot-update.script ~/workspace/uboot-update-cmd.img
4、把需要更新的image 和uboot-update-cmd.img拷贝到SD卡,SD卡插入到开发板

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1510

主题

4543

帖子

6

粉丝