get_image() { # <source> [ <command> ]
local from="$1"
local conc="$2"
local cmd
case "$from" in
http://*|ftp://*) cmd="wget -O- -q";;
*) cmd="cat";;
esac
if [ -z "$conc" ]; then
local magic="$(eval $cmd $from | dd bs=2 count=1 2>/dev/null | hexdump -n 2 -e '1/1 "%02x"')"
case "$magic" in
1f8b) conc="zcat";;
425a) conc="bzcat";;
esac
fi
eval "$cmd $from ${conc:+| $conc}"
}
get_image函数的作用就是根据输入的文件类型,获取执行那个命令是 cat ,zcat ,bzcat
default_do_upgrade() {
syncif [ "$SAVE_CONFIG" -eq 1 -a -z "$USE_REFRESH" ]; then
get_image "$1" | mtd -j "$CONF_TAR" write - "${PART_NAME:-image}"
else
get_image "$1" | mtd write - "${PART_NAME:-image}"
fi
}
default_do_upgrade 函数的作用 入若果要是走get_image "$1" | mtd -j "$CONF_TAR" write - "${PART_NAME:-image}" 这个分支,
get_image "$1"就相当于cat 文件名,然后通过管道输入到mtd中,mtd是openwrt实现读写flash的标准函数,所以一定要记住不要在get_image中添加任何打印输出信息比如
echo "111111"要不然会导致mtd写入flash存储区出问题,系统会无法启动