boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr}
时间: 2023-11-01 22:41:58 浏览: 104
这是一个 U-Boot 的启动脚本命令,它的作用是从指定的存储设备(通过 ${devtype} 和 ${devnum} 指定)的指定分区(通过 ${distro_bootpart} 指定)中加载一个脚本文件,并在加载完成后执行。具体的脚本文件路径和文件名通过 ${prefix} 和 ${script} 指定。执行完成后,U-Boot 会清空 ${scriptaddr} 指定的地址空间,以便下一次使用。
这个命令通常用于在启动过程中加载和执行一个用于控制启动流程的脚本文件,以便在不同的启动环境中使用相同的启动脚本。
相关问题
bootcmd=boot_android ${devtype} ${devnum};boot_fit;bootrkp;run distro_bootcmd;
这是一个启动命令,用于启动Android系统。它包含几个命令:
1. boot_android ${devtype} ${devnum}:启动Android系统,其中 ${devtype} 和 ${devnum} 分别表示设备类型和设备编号。
2. boot_fit:如果存在的话,从 FIT 映像中启动Linux内核。
3. bootrkp:如果存在的话,从 RK 预启动映像中启动内核。
4. run distro_bootcmd:运行 distro_bootcmd 变量中定义的所有启动命令。
这些命令的具体含义和实际执行过程会根据具体的系统设置和配置而有所不同。
#!/bin/sh # /opt/app/bin/ini-rw.sh "set" "/opt/app/bin/cfg/net.conf" "main" "devtype" "1" operate=$1 file=$2 section=$3 key=$4 value=$5 # 读取 ini 文件中的值 get_ini_value() { section=$1 key=$2 awk -F '=' "/[$section]/{a=1} (a==1 && "$key"==$1){print $2;exit}" $file } # 设置 ini 文件中的值 set_ini_value() { section=$1 key=$2 value=$3 awk -F '=' "/[$section]/{a=1} (a==1 && "$key"==$1){$2="$value"}1" $file > tmp.ini mv tmp.ini $file } if [[ $operate = "get" ]]; then val=$(get_ini_value $section $key) echo $val else set_ini_value $section $key $value echo 'update success' fi分析上述代码, 为什么执行: 【./ini-rw.sh "set" "/opt/app/bin/cfg/net.conf" "main" "devtype" "1"】 这个语句后 ,devtype 1 会少一个等号=?
在set_ini_value函数中,使用了awk命令对配置文件进行修改,其中"$2"="$value"这一行代码实际上是想将第二个字段(即等号后面的值)修改为$value,但是由于"$2"被双引号括起来了,导致awk将其视为字符串,而不是变量。因此,awk会将整个"$2"="$value"当作一个字符串输出,从而导致了devtype 1缺少了等号。
解决方法是将"$2"="$value"改为$2="$value",这样awk就会将$2视为变量,从而正确地进行替换操作。修改后的set_ini_value函数如下所示:
```shell
set_ini_value() {
section=$1
key=$2
value=$3
awk -F '=' "/\[$section\]/{a=1} (a==1 && \"$key\"==\$1){\$2=\"$value\"}1" $file > tmp.ini
mv tmp.ini $file
}
```
需要注意的是,在awk语句中,由于$符号在shell中有特殊含义,因此需要使用反斜杠进行转义。
阅读全文