IELFTOOL 체크섬 - 여러 범위에 걸친

기술노트 53274

아키텍처:

ARM, RH850, RX, SH, STM8

컴포넌트:

general

업데이트:

2021-05-26 오전 10:04

소개

체크섬 계산은 여러 범위에 걸쳐 수행될 수 있습니다. 만약 해당 범위가 사용 중이라면, 다음 사항을 주목하시기 바랍니다:

  • GUI는 오직 하나의 범위만 허용합니다. 따라서 체크섬 옵션을 비활성화 해야합니다. 대신에...
    • Project > Options... > Linker > "Extra options" 에 일부 명령줄 옵션을 추가합니다.
    • "build actions" > "post build command line" 에다가 일부 명령줄 옵션을 추가합니다.
  • 낮은 주소범위를 가진 범위를 먼저 계산(프로그램 상에서) 해야 합니다.
  • 계산은(프로그램 상에서) 체크섬 심볼(GUI에 의해 정의된)을 사용하지 못할 수도 있습니다, 따라서 프로그램에서 올바른 범위를 사용하도록 약간의 노력을 들여야 합니다.

Two ranges - two checksum values

다음 예제 프로젝트를 참고: Two ranges two checksums 650.zip.

첫 번째 범위는 0x1006000 부터 0x102FFFB 이고, 두 번째 범위는 0x1030000 부터 0x103EFFB입니다.

세 가지 변경사항이 필요합니다:

  1. "Project > Options... > Linker > Extra options"에 IAR ILINK 링커를 위한 수정사항이 반영되야 합니다.
    다음을 추가하세요:
    --place_holder __checksum1,2,.checksum1,1
    --place_holder __checksum2,2,.checksum2,1
    --define_symbol __checksum_begin1=0x1006000
    --define_symbol __checksum_end1=0x102FFFB
    --define_symbol __checksum_begin2=0x1030000
    --define_symbol __checksum_end2=0x103EFFB
  2. 빌드 후에 체크섬 계산을 실행하는 명령 라인을 "Project > Options... > Build Actions > Post-build command line" 에서 설정한 뒤 사용합니다.
    ielftool --fill 0xFF;0x1006000-0x102FFFB --fill 0xFF;0x1030000-0x103EFFB
    --checksum __checksum1:2,crc16,0x0;0x1006000-0x102FFFB
    --checksum __checksum2:2,crc16,0x0;0x1030000-0x103EFFB
    --verbose "$TARGET_PATH$" "$TARGET_PATH$"
  3. .icf 파일에, 메모리 범위와 어디에 체크섬을 위치시킬지 정의합니다:
    define symbol __ICFEDIT_region_ROM_start__ = 0x1006000;
    define symbol __ICFEDIT_region_ROM_end__ = 0x102FFFF;

    define symbol __ICFEDIT_region_PFM_start__ = 0x1030000;
    define symbol __ICFEDIT_region_PFM_end__ = 0x103EFFF;

    define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__
    to __ICFEDIT_region_ROM_end__];

    define region PFM_region = mem:[from __ICFEDIT_region_PFM_start__
    to __ICFEDIT_region_PFM_end__];

    place at end of ROM_region { readonly section .checksum1 };
    place at end of PFM_region { readonly section .checksum2 };

Two ranges - one checksum value

다음 예제 프로젝트를 참고: Two ranges one checksum 650.zip.

첫 번째 범위는 0x1006000 부터 0x102FFFB 이고 두 번째 범위는  0x1030000 부터 0x103EFFF 입니다.

세 가지 변경사항이 필요합니다:

  1. "Project > Options... > Linker > Extra options"에 IAR ILINK 링커를 위한 수정사항이 반영되야 합니다.
    다음을 추가하세요:
    --place_holder __checksum,2,.checksum,1
    --define_symbol __checksum_begin1=0x1006000
    --define_symbol __checksum_end1=0x102FFFB
    --define_symbol __checksum_begin2=0x1030000
    --define_symbol __checksum_end2=0x103EFFF
  2. 빌드 후에 체크섬 계산을 실행하는 명령 라인을 "Project > Options... > Build Actions > Post-build command line" 에서 설정한 뒤 사용합니다.
    ielftool --fill 0xFF;0x1006000-0x102FFFB --fill 0xFF;0x1030000-0x103EFFF
    --checksum __checksum:2,crc16,0x0;0x1006000-0x102FFFB;0x1030000-0x103EFFF
    --verbose "$TARGET_PATH$" "$TARGET_PATH$"
  3. .icf 파일에, 메모리 범위와 어디에 체크섬을 위치시킬지 정의합니다:
    define symbol __ICFEDIT_region_ROM_start__ = 0x1006000;
    define symbol __ICFEDIT_region_ROM_end__ = 0x102FFFF;

    define symbol __ICFEDIT_region_PFM_start__ = 0x1030000;
    define symbol __ICFEDIT_region_PFM_end__ = 0x103EFFF;

    define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__
    to __ICFEDIT_region_ROM_end__];

    define region PFM_region = mem:[from __ICFEDIT_region_PFM_start__
    to __ICFEDIT_region_PFM_end__];

    place at end of ROM_region { readonly section .checksum };

 

모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.

죄송하지만, 당사 사이트에서는 Internet Explorer를 지원하지 않습니다.보다 편안한 사이트를 위해 Chrome, Edge, Firefox 등과 같은 최신 브라우저를 사용해 주시길 부탁드립니다.