194 lines
7.3 KiB
Bash
Executable File
194 lines
7.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
pkg_type=3
|
|
pkg_mode=1
|
|
pos_pkg_mode=17
|
|
pos_image_size=1
|
|
pos_mem_base=5
|
|
pos_nvm_offset=9
|
|
pos_image_ver=0
|
|
pos_nvm_type=18
|
|
pos_page_size=19
|
|
pos_erase_size=21
|
|
#if_baud_rate=0
|
|
|
|
pos_nand_main_size=25
|
|
pos_nand_oob_size=29
|
|
pos_nand_ecc_mode=33
|
|
pos_nand_ecc_pos=37
|
|
pos_nand_sector_num=89
|
|
pos_nand_info_size=93
|
|
pos_nand_block_page=97
|
|
|
|
#emmc_partition_sel=0
|
|
pos_emmc_part=25
|
|
|
|
xmodem_nvm_file="./xmodem_nvm_csv"
|
|
#desc_frame_name="desc_frame_data"
|
|
|
|
|
|
#$1: nvm_type
|
|
function xmodem_frame_add()
|
|
{
|
|
xmodem_page_size=0
|
|
xmodem_erase_size=0
|
|
xmodem_nor_page_size=0
|
|
xmodem_nor_erase_size=0
|
|
|
|
xmodem_nvm_type=$1
|
|
desc_frame_name=$2
|
|
xmodem_image_size=$3
|
|
xmodem_mem_base=$4
|
|
xmodem_nvm_offset=$5
|
|
xmodem_emmc_part=$6
|
|
|
|
tmp_file="tmp0"
|
|
if [ -f "$desc_frame_name" ]; then
|
|
echo "file exist...."
|
|
rm $desc_frame_name
|
|
fi
|
|
dd if=/dev/zero of="${desc_frame_name}" bs=128 count=1
|
|
|
|
while read line; do
|
|
IFS=' ', read -ra array <<< "$line"
|
|
count=${#array[@]}
|
|
if [ $count -eq 3 ]; then
|
|
if [ ${array[0]} = "nvm_type" ]; then
|
|
#echo "ignore title."
|
|
continue
|
|
fi
|
|
if [ ${array[0]} = "nor" ]; then
|
|
if [ ${array[1]} = "page_size" ]; then
|
|
xmodem_nor_page_size=${array[2]}
|
|
elif [ ${array[1]} = "erase_size" ]; then
|
|
xmodem_nor_erase_size=${array[2]}
|
|
else
|
|
echo "unused nvm info."
|
|
fi
|
|
elif [ ${array[0]} = "nand" ]; then
|
|
if [ ${array[1]} = "page_size" ]; then
|
|
xmodem_page_size=${array[2]}
|
|
elif [ ${array[1]} = "erase_size" ]; then
|
|
xmodem_erase_size=${array[2]}
|
|
elif [ ${array[1]} = "nand_main_size" ]; then
|
|
xmodem_nand_main_size=${array[2]}
|
|
elif [ ${array[1]} = "nand_oob_size" ]; then
|
|
xmodem_nand_oob_size=${array[2]}
|
|
elif [ ${array[1]} = "nand_ecc_mode" ]; then
|
|
xmodem_nand_ecc_mode=${array[2]}
|
|
elif [ ${array[1]} = "nand_ecc_pos" ]; then
|
|
xmodem_nand_ecc_pos=${array[2]}
|
|
elif [ ${array[1]} = "nand_sector_num" ]; then
|
|
xmodem_nand_sector_num=${array[2]}
|
|
elif [ ${array[1]} = "nand_info_size" ]; then
|
|
xmodem_nand_info_size=${array[2]}
|
|
elif [ ${array[1]} = "nand_block_page" ]; then
|
|
xmodem_nand_block_page=${array[2]}
|
|
else
|
|
echo "unused nvm info."
|
|
fi
|
|
elif [ ${array[0]} = "emmc" ]; then
|
|
if [ ${array[1]} = "block_size" ]; then
|
|
emmc_page_size=${array[2]}
|
|
else
|
|
echo "unused nvm info"
|
|
fi
|
|
else
|
|
echo "xmodem: unkown nvm type."
|
|
fi
|
|
else
|
|
echo "xmodem: invalid nvm information."
|
|
fi
|
|
done < "$xmodem_nvm_file"
|
|
|
|
#update package type...
|
|
printf "%08x" ${pkg_type} | xxd -r -p -l 4 > "$tmp_file".org
|
|
objcopy -I binary --reverse-bytes=4 "${tmp_file}".org "${tmp_file}".rev
|
|
dd conv=notrunc bs=1 seek=0 count=1 if="${tmp_file}".rev of="${desc_frame_name}" > /dev/null 2>&1;
|
|
|
|
#update package mode.
|
|
printf "%08x" ${pkg_mode} | xxd -r -p -l 4 > "$tmp_file".org
|
|
objcopy -I binary --reverse-bytes=4 "${tmp_file}".org "${tmp_file}".rev
|
|
dd conv=notrunc bs=1 seek="${pos_pkg_mode}" count=1 if="${tmp_file}".rev of="${desc_frame_name}" > /dev/null 2>&1;
|
|
|
|
#update nvm type.
|
|
printf "%08x" ${xmodem_nvm_type} | xxd -r -p -l 4 > "$tmp_file".org
|
|
objcopy -I binary --reverse-bytes=4 "${tmp_file}".org "${tmp_file}".rev
|
|
dd conv=notrunc bs=1 seek="${pos_nvm_type}" count=1 if="${tmp_file}".rev of="${desc_frame_name}" > /dev/null 2>&1;
|
|
|
|
if [ $xmodem_nvm_type -eq 1 ]; then
|
|
#update page size.
|
|
printf "%08x" ${xmodem_nor_page_size} | xxd -r -p -l 4 > "$tmp_file".org
|
|
objcopy -I binary --reverse-bytes=4 "${tmp_file}".org "${tmp_file}".rev
|
|
dd conv=notrunc bs=1 seek="${pos_page_size}" count=1 if="${tmp_file}".rev of="${desc_frame_name}" > /dev/null 2>&1;
|
|
#update erase size.
|
|
printf "%08x" ${xmodem_nor_erase_size} | xxd -r -p -l 4 > "$tmp_file".org
|
|
objcopy -I binary --reverse-bytes=4 "${tmp_file}".org "${tmp_file}".rev
|
|
dd conv=notrunc bs=1 seek="${pos_erase_size}" count=4 if="${tmp_file}".rev of="${desc_frame_name}" > /dev/null 2>&1;
|
|
fi
|
|
if [ $xmodem_nvm_type -eq 3 ]; then
|
|
#update page size.
|
|
printf "%08x" ${emmc_page_size} | xxd -r -p -l 4 > "$tmp_file".org
|
|
objcopy -I binary --reverse-bytes=4 "${tmp_file}".org "${tmp_file}".rev
|
|
dd conv=notrunc bs=1 seek="${pos_page_size}" count=1 if="${tmp_file}".rev of="${desc_frame_name}" > /dev/null 2>&1;
|
|
printf "%08x" ${xmodem_emmc_part} | xxd -r -p -l 4 > "$tmp_file".org
|
|
objcopy -I binary --reverse-bytes=4 "${tmp_file}".org "${tmp_file}".rev
|
|
dd conv=notrunc bs=1 seek="${pos_emmc_part}" count=1 if="${tmp_file}".rev of="${desc_frame_name}" > /dev/null 2>&1;
|
|
fi
|
|
|
|
#update image size.
|
|
printf "%08x" ${xmodem_image_size} | xxd -r -p -l 4 > "$tmp_file".org
|
|
objcopy -I binary --reverse-bytes=4 "${tmp_file}".org "${tmp_file}".rev
|
|
dd conv=notrunc bs=1 seek="${pos_image_size}" count=4 if="${tmp_file}".rev of="${desc_frame_name}" > /dev/null 2>&1;
|
|
|
|
#update memory base.
|
|
printf "%08x" ${xmodem_mem_base} | xxd -r -p -l 4 > "$tmp_file".org
|
|
objcopy -I binary --reverse-bytes=4 "${tmp_file}".org "${tmp_file}".rev
|
|
dd conv=notrunc bs=1 seek="${pos_mem_base}" count=4 if="${tmp_file}".rev of="${desc_frame_name}" > /dev/null 2>&1;
|
|
|
|
#update nvm offset.
|
|
printf "%08x" ${xmodem_nvm_offset} | xxd -r -p -l 4 > "$tmp_file".org
|
|
objcopy -I binary --reverse-bytes=4 "${tmp_file}".org "${tmp_file}".rev
|
|
dd conv=notrunc bs=1 seek="${pos_nvm_offset}" count=4 if="${tmp_file}".rev of="${desc_frame_name}" > /dev/null 2>&1;
|
|
|
|
|
|
#nand flash.
|
|
if [ $xmodem_nvm_type -eq 2 ]; then
|
|
printf "%08x" ${xmodem_nand_main_size} | xxd -r -p -l 4 > "$tmp_file".org
|
|
objcopy -I binary --reverse-bytes=4 "${tmp_file}".org "${tmp_file}".rev
|
|
dd conv=notrunc bs=1 seek="${pos_nand_main_size}" count=4 if="${tmp_file}".rev of="${desc_frame_name}" > /dev/null 2>&1;
|
|
|
|
printf "%08x" ${xmodem_nand_oob_size} | xxd -r -p -l 4 > "$tmp_file".org
|
|
objcopy -I binary --reverse-bytes=4 "${tmp_file}".org "${tmp_file}".rev
|
|
dd conv=notrunc bs=1 seek="${pos_nand_oob_size}" count=4 if="${tmp_file}".rev of="${desc_frame_name}" > /dev/null 2>&1;
|
|
|
|
printf "%08x" ${xmodem_nand_ecc_mode} | xxd -r -p -l 4 > "$tmp_file".org
|
|
objcopy -I binary --reverse-bytes=4 "${tmp_file}".org "${tmp_file}".rev
|
|
dd conv=notrunc bs=1 seek="${pos_nand_ecc_mode}" count=4 if="${tmp_file}".rev of="${desc_frame_name}" > /dev/null 2>&1;
|
|
|
|
printf "%08x" ${xmodem_nand_ecc_pos} | xxd -r -p -l 4 > "$tmp_file".org
|
|
objcopy -I binary --reverse-bytes=4 "${tmp_file}".org "${tmp_file}".rev
|
|
dd conv=notrunc bs=1 seek="${pos_nand_ecc_pos}" count=4 if="${tmp_file}".rev of="${desc_frame_name}" > /dev/null 2>&1;
|
|
|
|
printf "%08x" ${xmodem_nand_sector_num} | xxd -r -p -l 4 > "$tmp_file".org
|
|
objcopy -I binary --reverse-bytes=4 "${tmp_file}".org "${tmp_file}".rev
|
|
dd conv=notrunc bs=1 seek="${pos_nand_sector_num}" count=4 if="${tmp_file}".rev of="${desc_frame_name}" > /dev/null 2>&1;
|
|
|
|
printf "%08x" ${xmodem_nand_info_size} | xxd -r -p -l 4 > "$tmp_file".org
|
|
objcopy -I binary --reverse-bytes=4 "${tmp_file}".org "${tmp_file}".rev
|
|
dd conv=notrunc bs=1 seek="${pos_nand_info_size}" count=4 if="${tmp_file}".rev of="${desc_frame_name}" > /dev/null 2>&1;
|
|
|
|
printf "%08x" ${xmodem_nand_block_page} | xxd -r -p -l 4 > "$tmp_file".org
|
|
objcopy -I binary --reverse-bytes=4 "${tmp_file}".org "${tmp_file}".rev
|
|
dd conv=notrunc bs=1 seek="${pos_nand_block_page}" count=4 if="${tmp_file}".rev of="${desc_frame_name}" > /dev/null 2>&1;
|
|
fi
|
|
|
|
if [ -f "$tmp_file".org ]; then
|
|
rm "$tmp_file".org
|
|
fi
|
|
if [ -f "$tmp_file".rev ]; then
|
|
rm "$tmp_file".rev
|
|
fi
|
|
}
|
|
|