海思软件ECC架构
海思软件架构采用的是 2k+64(NAND FLASH)的设计架构,因此在上电启动时,BOOTROM会按照2k+64方式读取(包含OOB 区域的ECC校验),读取数据错误则无法正常启动系统。
ECC制作工具tools/hosttool/hi_makeimage,如下所示

- hi_addecc是用来根据不同ecc校验模式和Nand Flash的page大小来生成软件ecc校 验数据。
- hi_page_reverse是针对FMC控制器使用省管脚启动模式时需要自动识别NandFlash的参数而对特定数据位进行反转。
- mkp是整体烧片制作流程的调用脚本入口。
- partition_lst存储的是分区信息,mkp脚本通过识别改文件中的分区信息来实现整体烧片镜像的制作,通过修改该文件中的分区信息可以实现制作不同内容的烧片镜像文件

数据分析(hi_uboot.bin)
-
通过addcc 进行将固件每1k和2k 位置添加对应的ECC数据,然后得到以下数据:

-
通过hi_page_reverse 进行对以上数据第一页的头数据32byte数据进行取反,尾部ECC数据进行部分取反处理,得到如下数据:

烧片文件制作
整包编译后,会在output/image/目录下生成固件,但是必须经过工具tmp/tools/hi_makeimage目录下:
-
整包打包mkp
./mkp 说明:topdir为SDK包所在目录,chipname为emei/luofu/xiling。执行命令后,生成的镜像包存放在${topdir}/output/factory_bin/${chipname}下,emei使用factory.ecc.64oob.reverse.bin,luofu使用factory.ecc.64oob.bin。
-
单独打包 hi_uboot_ecc_64oob_reverse.bin , kernel.images_ecc_64oob_reverse.bin 是可烧录文件,有添加ECC和进行reverse,烧录需要使用spare区域。
单独打包uboot 和内核文件脚本文件如下:
#!/bin/bash
SRC_PATH=./output/images
ECC_TOOL_PATH=./tmp/tools/hi_makeimage
OUTPUT_ADDECC_PATH=./hi_img_output
if test -e $OUTPUT_ADDECC_PATH; then
echo "rebuilt $OUTPUT_ADDECC_PATH file "
rm -r $OUTPUT_ADDECC_PATH
mkdir -p $OUTPUT_ADDECC_PATH
else
echo "create $OUTPUT_ADDECC_PATH doing ..."
mkdir -p $OUTPUT_ADDECC_PATH
fi
while getopts p:s: opt
do
case "${opt}" in
p) PAGESIZE=${OPTARG};;
s) OOBSIZE=${OPTARG};;
?)
echo "未知参数"
echo "$0 -p pagesizeNUM -s OOBsize "
exit 1;;
esac
done
echo "===>PAGESIZE: $PAGESIZE";
echo "===>OOBSIZE : $OOBSIZE";
# 检查变量
if [ -z "$PAGESIZE" ]; then
echo "Error: PAGESIZE is required"
echo "$0 -p pagesizeNUM -s OOBsize "
exit 1
fi
if [ -z "$OOBSIZE" ]; then
echo "Error: OOBSIZE is required"
echo "$0 -p pagesizeNUM -s OOBsize "
exit 1
fi
echo "==========>hi_addecc help==========>"
$ECC_TOOL_PATH/hi_addecc --help
echo "==========>hi_addecc end==========>"
echo "==========>hi_page_reverse help==========>"
$ECC_TOOL_PATH/hi_page_reverse --help
echo "==========>hi_page_reverse end==========>"
#uboot add ecc
$ECC_TOOL_PATH/hi_addecc -i $SRC_PATH/hi_uboot.bin -p $PAGESIZE -b 4 -s $OOBSIZE -o $OUTPUT_ADDECC_PATH/hi_uboot_ecc_${OOBSIZE}oob.bin
cp $OUTPUT_ADDECC_PATH/hi_uboot_ecc_${OOBSIZE}oob.bin $OUTPUT_ADDECC_PATH/hi_uboot_ecc_${OOBSIZE}oob_reverse.bin
$ECC_TOOL_PATH/hi_page_reverse -e 4 -s ${OOBSIZE} -b ${OOBSIZE} -p $PAGESIZE -f $OUTPUT_ADDECC_PATH/hi_uboot_ecc_${OOBSIZE}oob_reverse.bin
echo "========>addecc uboot ok! , output $OUTPUT_ADDECC_PATH/hi_uboot_ecc_${OOBSIZE}oob.bin file . "
# kernel add ecc
$ECC_TOOL_PATH/hi_addecc -i $SRC_PATH/kernel.images -p $PAGESIZE -b 4 -s ${OOBSIZE} -o $OUTPUT_ADDECC_PATH/kernel.images_ecc_${OOBSIZE}oob.bin
cp $OUTPUT_ADDECC_PATH/kernel.images_ecc_${OOBSIZE}oob.bin $OUTPUT_ADDECC_PATH/kernel.images_ecc_${OOBSIZE}oob_reverse.bin
$ECC_TOOL_PATH/hi_page_reverse -e 4 -s ${OOBSIZE} -b ${OOBSIZE} -p $PAGESIZE -f $OUTPUT_ADDECC_PATH/kernel.images_ecc_${OOBSIZE}oob_reverse.bin
echo "========>addecc kernel ok! , output $OUTPUT_ADDECC_PATH/kernel.images_ecc_${OOBSIZE}oob.bin file . "
echo "========> all addecc ok! , output $OUTPUT_ADDECC_PATH file . "
# add ./mkp
#topdir为SDK包所在目录,chipname为emei/luofu/xiling
#整包
#set oob size
if test -e $ECC_TOOL_PATH/oobsize.txt; then
rm $ECC_TOOL_PATH/oobsize.txt
touch $ECC_TOOL_PATH/oobsize.txt
else
touch $ECC_TOOL_PATH/oobsize.txt
fi
echo ${OOBSIZE} > $ECC_TOOL_PATH/oobsize.txt
cat $ECC_TOOL_PATH/oobsize.txt
SDK_PATH=$(pwd)
#cd $ECC_TOOL_PATH
#./mkp $SDK_PATH emei
#cd -
echo "========> all addecc ok! , output image file . "
版权声明
内容来源及使用限制
欢迎访问 TomgZHE研习社(网址:https://blog.tomgzhe.com)。本网站部分文章内容源自网络,仅作学习交流与参考分享;若您发现有内容涉嫌侵权,请立即联系 tomgzhe@qq.com,我们将在接到通知后的 48 小时内核实并删除相关侵权内容。
软件资源相关规定
本网站为个人非盈利性质的站点,所有软件资源均来自网络。这些资源仅用于个人学习、研究和参考,严禁用于任何商业用途。您下载和使用本网站软件资源即表示您同意仅将其用于学习目的,若因违反此规定导致任何法律纠纷或损失,责任由您自行承担。
原创版权
本网站上的原创内容,包括但不限于文字作品、自行设计的图片、独家制作的音频视频等,其版权均归本网站所有。未经本网站书面授权,任何组织或个人不得擅自复制、转载、摘编、传播或以其他任何方式使用这些原创内容。如需使用,请提前与我们联系并获得书面许可,同时需在显著位置注明出处及作者信息。
转载与引用规范
若您需转载本网站文章,务必注明文章来源为 “[TomgZHE研习社],原文链接:[http://blog.tomgzhe.com/index.php/2024/07/18/%e6%b5%b7%e6%80%9d%e5%b9%b3%e5%8f%b0%e6%9e%b6%e6%9e%84%e6%a6%82%e8%bf%b0%ef%bc%88%e4%ba%8c%ef%bc%89/]”;对于有明确作者署名的文章,还需完整保留作者姓名。在引用本网站内容时,请确保内容准确无误,并遵循学术及行业的引用规范。
微信扫一扫打赏
支付宝扫一扫打赏