u-boot脚本编写基础

u-boot脚本编写基础 四叶草~ 2024-03-29 11:03:19 118

一、判断

在u-boot中使用if命令进行判断执行,但是if后必须跟一条指令,if命令仅判断if后指令执行的返回值。一般使用test命令进行条件判断。对于test命令,u-boot有以下帮助信息。

test      - minimal test like /bin/sh

test命令本身不输出信息,仅对参数进行判断,结果通过函数的返回值进行返回。

test命令支持以下操作符:

const struct {
        int arg;
        const char *str;
        int op;
        int adv;
} op_adv[] = {
        {1, "=", OP_STR_EQ, 3},
        {1, "!=", OP_STR_NEQ, 3},
        {1, "<", OP_STR_LT, 3},
        {1, ">", OP_STR_GT, 3},
        {1, "-eq", OP_INT_EQ, 3},
        {1, "-ne", OP_INT_NEQ, 3},
        {1, "-lt", OP_INT_LT, 3},
        {1, "-le", OP_INT_LE, 3},
        {1, "-gt", OP_INT_GT, 3},
        {1, "-ge", OP_INT_GE, 3},
        {0, "!", OP_NOT, 1},
        {0, "-o", OP_OR, 1},
        {0, "-a", OP_AND, 1},
        {0, "-z", OP_STR_EMPTY, 2},
        {0, "-n", OP_STR_NEMPTY, 2},
        {0, "-e", OP_FILE_EXISTS, 4},
};

除test命令外还有两个命令truefalse。与test命令相似,同样使用函数返回值返回数据而不是输出到控制台。true永远返回真,true永远返回假。

应用举例

# 数值判断(输出hello)
if test 1 -le 2;then echo "hello";fi

# 字符串相等(输出hello)
if test "hello" = "hello";then echo "hello";fi

# 字符串不等(输出hello)
if test "hel" != "hello";then echo "hello";fi

# true的使用(输出hello)
if true;then echo "hello";fi

二、计算

在u-boot中使用setexpr进行计算,该命令将计算的结果放入指定的环境变量中。(使用10进制进行计算,十六进制运算出现进位时可能会出现异常)在u-boot的帮助信息中有以下描述

setexpr [.b, .w, .l] name [*]value1 <op> [*]value2
    - set environment variable 'name' to the result of the evaluated
      expression specified by <op>.  <op> can be &, |, ^, +, -, *, /, %
      size argument is only meaningful if value1 and/or value2 are
      memory addresses (*)

由上述描述可知setexpr命令支持一般的四则运算、取模以及位运算

# 设置i的初始值
setenv i 12
# i++
setexpr i $i + 1
# 输出13
echo $i

三、循环

u-boot中支持for循环与while循环,语法与Linux shell中相像。

while <判断条件>;do <指令1>;[指令2];...done;

下面给出一个例子,输出1-10

setenv i 1;while test "0x$i" -le "0xa";do echo "$i"; setexpr i $i + 1;done

四、运行脚本

uboot中通过run命令运行环境变量中的脚本

setenv cmd1 'setenv i 1;while test "0x$i" -le "0xa";do echo "$i"; setexpr i $i + 1;done'
run cmd1

关于scr脚本

scr文件是uboot的脚本文件,在uboot执行时可将脚本加载到内存,再使用source命令执行

fatload mmc 1:1 $loadaddr /boot/boot-abc.scr
source $loadaddr

注意scr是脚本编译后可被uboot识别的文件,需要先编辑一个脚本文件,通过编译命令编译为scr文件

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
四叶草~
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区