海思平台架构概述(二)

内容纲要

海思软件ECC架构

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

ECC制作工具tools/hosttool/hi_makeimage,如下所示

file

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

数据分析(hi_uboot.bin)

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

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

烧片文件制作

整包编译后,会在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。

    file

  • 单独打包 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/]”;对于有明确作者署名的文章,还需完整保留作者姓名。在引用本网站内容时,请确保内容准确无误,并遵循学术及行业的引用规范。

Like (1)
Donate 微信扫一扫打赏 微信扫一扫打赏 支付宝扫一扫打赏 支付宝扫一扫打赏
tomgzhe的头像tomgzhe
Previous 2024年7月18日 11:45
Next 2025年2月16日 14:31

相关推荐

发表回复

Please Login to Comment
联系我们

联系我们

400-800-6666

在线咨询: QQ交谈 邮件:tomgzhe@qq.com 工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
SHARE
TOP
蛇年新气象!从2025年2月起,本博客将在保留科技板块基础上,新增生活美学、个人成长等多元内容,希望能为大家带来更丰富的阅读体验,敬请期待!